IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

[LDAP] Mise à jour d'une propriété (LastLogonTimeStamp)


Sujet :

VB.NET

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2012
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2012
    Messages : 28
    Points : 14
    Points
    14
    Par défaut [LDAP] Mise à jour d'une propriété (LastLogonTimeStamp)
    Bonjour,
    Je suis bloquée sur ce problème depuis quelque temps.

    J'ai reçu une demande de mon DT pour une MaJ d'une propriété de user dans le LDAP à chaque connexion à notre intranet.

    Le code qui effectue l'authentification au LDAP utilise des UsersPrincipal qui n'ont pas accès à la propriété LastLogonTimeStamp mais accès en readonly à LastLogon.

    J'ai regardé et beaucoup de gens utilise DirectoryEntry pour modifiée des propriétés mais je n'arrive pas à modifier celle-ci ni même a bien comprendre comment fonctionne le Directory Entry comparativement au UserPrincipal...

    Je sais que c'est possible de modifier cette entrée en PHP mais l'est-ce en VB.Net? ou plutot VB lors de l'authentification sur l'intranet.

    Cordialement

    Bobuche

  2. #2
    Membre à l'essai
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2012
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2012
    Messages : 28
    Points : 14
    Points
    14
    Par défaut
    Bonjour,
    j'ai réussi à accéder aux différentes propriétés et à en modifier durablement.

    Le problème est sur les lastlogon et lastlogontimestamp qui ont des valeurs assez particluière.

    J'utilise ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Dim dirEntry As DirectoryEntry = New DirectoryEntry("LDAP://FR-DTC-DC02/DC=fr,DC=capio,DC=net", "COMPTE", "MDP")
                Dim dirSearch As DirectorySearcher = New DirectorySearcher(dirEntry)
                dirSearch.Filter = "(&(objectCategory=person)(sAMAccountName=apigenel))"
                Dim result As DirectoryEntry = dirSearch.FindOne().GetDirectoryEntry()
                Dim name As String = result.Properties("lastLogonTimestamp").Value.ToString()
                If result.Properties.Contains("lastLogonTimestamp") Then
                    result.Properties("lastLogonTimestamp").Item(0)
                End If
                dirEntry.CommitChanges()
    L'objet retourne un "System.__ComObject" que je ne sais pas utilisé.

    Une idée?

    Cordialement

  3. #3
    Membre expérimenté Avatar de bizet
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2005
    Messages
    717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 717
    Points : 1 338
    Points
    1 338
    Par défaut
    Salut

    Ta valeur est en int64.
    Pour la convertir :
    http://social.msdn.microsoft.com/For...6-198422838cdf

  4. #4
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 048
    Points : 2 201
    Points
    2 201
    Par défaut
    Le principal (jeux de mot pourri) problème que tu auras en voulant utiliser les infos lastlogon et lastlogontimestamp c'est que ces propriétés sont probablement partagées avec l'authentification de windows sur l'active directory. C'est probablement pourquoi elles sont protégées en écriture.

    Donc en gros tu ne sais pas si la valeur de lastlogon correspondera à sa dernière ouverture de session sur Windows dans le domaine, sur ton site intranet, voir même à un access à Exchange.

    Par contre il est possible de définir et utilisé des propriétés personnalisée dans Active Directory (et les autres annuaires LDAP) pour étendre les fonctionnalités de stockage des principals. Tu peux donc utiliser ce moyen pour définir un espace de stockage reservé à ta problèmatique.

    Par contre il est clair que l'interface "standard" de gestion de l'annuaire de windows ne permettera pas de consulter ces informations (déjà qu'elle ne gère pas toutes les propriétés propres à Windows comme par exemple l'image associé au login utilisateur par ex.).

    Il faudra donc développer une interface spécifique pour la lecture de ta propriété.

    Autrement tu stockes cette information ailleurs (base de donnée) en utilisant le guid de l'utilisateur identifié pour faire le lien avec l'annuaire.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2012
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2012
    Messages : 28
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par bizet Voir le message
    Salut

    Ta valeur est en int64.
    Pour la convertir :
    http://social.msdn.microsoft.com/For...6-198422838cdf
    Je ne vois pas comment convertir...

    Je suis surement aveugle

    Cdt

    Bobuche

  6. #6
    Membre expérimenté Avatar de bizet
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2005
    Messages
    717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 717
    Points : 1 338
    Points
    1 338
    Par défaut
    ceci ne fonctionne pas ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     long int64Value = (long)((uint)result.Properties["lastLogon"]);
     
    var date = DateTime.FromFileTimeUtc(int64Value);

  7. #7
    Membre à l'essai
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2012
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2012
    Messages : 28
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par bizet Voir le message
    ceci ne fonctionne pas ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     long int64Value = (long)((uint)result.Properties["lastLogon"]);
     
    var date = DateTime.FromFileTimeUtc(int64Value);
    Le code en VB serait celui-ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dim int64Value As Long = DirectCast(DirectCast(result.Properties("lastLogon"), UInt64), Long)
                    Dim var As Date = DateTime.FromFileTimeUtc(int64Value)
    Dans un premier temps le uint n'est pas reconnu mais UInt12,32,64 oui.

    Et sur la première ligne la valeur "result.Properties("lastLogon")" est une collection de propriété.

    Si je rajoutes ".Value" il me dit impossible de cast en ULong.

    Je fais donc ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Dim int64Value As ULong = DirectCast(DirectCast(result.Properties("lastLogon").Value, UInt64), ULong)
                    Dim tempaaa As DateTime = Convert.ToDateTime(int64Value)
                    Dim tempgg As String = tempaaa.Date.ToString
    Et j'ai une exception sur le premier cast.


    Ma demande est de voir comment je peux obtenir mais aussi insérer dans la propriété.

    Je veux pouvoir mettre la date actuelle et l'heure dans cette propriétée.

    Cordialement

    Bobuche

  8. #8
    Membre expérimenté Avatar de bizet
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2005
    Messages
    717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 717
    Points : 1 338
    Points
    1 338
    Par défaut
    Un nouveau lien

    http://en.csharp-online.net/User_Man...ing_Last_Logon

    si tu regardes bien il prend le premier element de la liste.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2012
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2012
    Messages : 28
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par bizet Voir le message
    Un nouveau lien

    http://en.csharp-online.net/User_Man...ing_Last_Logon

    si tu regardes bien il prend le premier element de la liste.
    Bonjour,
    Merci de ton aide.

    Le problème que j'ai actuellement c'est que toutes les techniques que j'essaye ne marche pas pour une raison.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    result.Properties("lastLogonTimeStamp").Value
    Cette objet est de type "System.__ComObject"

    J'ai réussi à faire ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        If result.Properties.Contains("lastLogonTimestamp") Then
                    Dim highPart As Int32 = DirectCast(result.Properties("lastLogon")(0), Int32).MaxValue
                    Dim lowPart As Int32 = DirectCast(result.Properties("lastLogon")(0), Int32).MinValue
                    Dim total As Long = CLng((highPart * 2 ^ 32) + lowPart)
                    Dim dat As DateTime = New DateTime(total)
                End If
    Mon problème c'est qu'avec cette technique qui n'est pas bonne j'obtient un long ENORME!

    J'ai obtenu:9223372030412324864 pour 129997993762676702 (date du jour)

    Je ne comprend pas d'où peu venir cette erreur de conversion...

    Les propriétés "givenName" qui sont des chaines de caractères je les récupères correctement dans une string...

    J'ai aussi essayer de convertir directement en date, datetime... Rien a fonctionné a cause du type retourné par cette propriété...

    Je n'y comprend rien... Surtout que personne n'a ce genre de problème j'ai l'impression...

    Je suis en Framework 2.0 au passage je ne sais pas si cela influ mais une DLL du Framework 3.5 m'a permis d'utiliser certaine fonctionnalité.

    Cordialement

    Bobuche

  10. #10
    Membre à l'essai
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2012
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2012
    Messages : 28
    Points : 14
    Points
    14
    Par défaut
    ENFIN!

    Voila un lien qui répond a ma question!

    Je l'ai trouvé en fouillant sur les largeInteger en VB d'après un autre lien qui m'avais été recommandé par qqun... Bref a trouvé c'est relou!

    http://msdn.microsoft.com/en-us/libr...=vs.80%29.aspx

    Mon problème est résolu.

    a part un petit cas de droit sur le serveur que je vais régler avec les admins!

    merci a tous ceux qui m'ont aidé!

    Cordialement

    Bobuche

  11. #11
    Membre à l'essai
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2012
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2012
    Messages : 28
    Points : 14
    Points
    14
    Par défaut
    Bonjour,
    Je reviens vers vous car manuellement la propriété LastLogonTimeStamp ne peut être modifée...

    Il faut donc passer par une authentification au niveau du LDAP qui requiert certaines conditions que je n'arrive pas a cerner...

    Quelqu'un aurais une idée?

    On m'a parlé de liaison simple, requête etc...

    Mais j'ai réussi a me connecté au ldap avec directory entry et login,mdp, authentification.Secure...
    J'ai réussi a mettre à jour des propriétés puis CommitChanges...

    Je ne vois pas ce qu'il faut de plus pour une requete ou liaison simple...

    Apparement, ce n'est pas le bon mode de fonctionnement.

    Si jamais quelqu'un à déja effectuer ce genre de traitement merci de m'aider...

    Cordialement

    Bobuche

  12. #12
    Membre à l'essai
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2012
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2012
    Messages : 28
    Points : 14
    Points
    14
    Par défaut
    Bonjour,

    Je rajoute la solution au problème:

    Pour mettre à jour cette propriété il faut effectuer au minimum un bind avec l'AD.

    En outre, établir une connexion avec un compte précis sur le LDAP suffit à enclencher le processus de mise à jour de la propriété LastLogonTimeStamp.

    Cependant, cela ne modifie que la propriété du user qui a effectué le bind mais aussi d'un random de 5 -14 par rapport à la valeur actuel du LastLogonTimeStamp!

    Pour que la mise a jour soit quotidienne et pas en générale au bout de 3 à 5 jour, voir plus, il faut abaissé le 14 à 5 (qui est la valeur minimale!)

    Je n'ai plus le lien pour cette info que je tire de la documentation MSDN.

    Cordialement

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Notification de mise à jour d'une propriété
    Par Edtech dans le forum Windows Presentation Foundation
    Réponses: 17
    Dernier message: 04/04/2011, 14h58
  2. Réponses: 3
    Dernier message: 23/05/2008, 09h42
  3. Réponses: 1
    Dernier message: 08/06/2007, 13h40
  4. Mise à jour d'une table avec un fichier csv
    Par blackangel dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 26/05/2005, 14h46
  5. Mise à jour d'une bd mysql
    Par joquetino dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 11/01/2005, 14h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo