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

API, COM et SDKs Delphi Discussion :

Explorateur ldap Delphi


Sujet :

API, COM et SDKs Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 61
    Points : 47
    Points
    47
    Par défaut Explorateur ldap Delphi
    bonjour,

    je cherche à créer un explorateur ldap.

    j'essaie d'utiliser l'unité ldap de jean-paul toth :

    les fonctions LDAPSearch, LDAPAttribute fonctionnent, mais ne permettent pas de récupérer les infos de type arborescence (type entrée au lieu de attribut texte par exemple).

    Comment peut-on modifier afin que cela soit rendu possible ?


    Est-ce quelqu'un a t'il déjà travailler sur cette unité ?

  2. #2
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 718
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 718
    Points : 15 097
    Points
    15 097
    Par défaut
    Salut.

    Je suis pas du tout spécialiste, mais tu peux toujours jeter un œil à cette discussion, pas très vieille.
    Mes 2 cts,
    --
    jp
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 61
    Points : 47
    Points
    47
    Par défaut
    merci,

    effectivement la source adsi fonctionne, mais j'aimerais pouvoir m'en passer (activex) et utiliser le code natif de jean-paul toth.

  4. #4
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    Citation Envoyé par dvarrel Voir le message
    merci,

    effectivement la source adsi fonctionne, mais j'aimerais pouvoir m'en passer (activex) et utiliser le code natif de jean-paul toth.
    bon déjà, si tu continues à m'appeler Jean-Paul tu prends une baffe

    ensuite pour faire ce que tu veux, il va falloir que tu te documentes un peu sur LDAP. Mon unité, comme bcp de ce que je livre sous GPL, est au départ un outils dont j'ai eu besoin. Et là mon besoin était d'authentifier des gens, pas de parcourir l'annuaire.

    les clients LDAP utilisent une syntaxe à la con pour faire des recherche...un truc qui fait un peu penser à du SQL. Au niveau protocole, c'est codé sous une forme tout aussi étrange avec des "chunk"

    voici le principe un peu plus expliqué dans le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
    function LDAPSearch(LDAP:integer; Name:string):string;
    var
     s1,s2,s3:string;
    begin
     Result:='';
    // construction de la requête LDAP
     s1:=Chunk(LDAP_SEQUENCE, // SEQUENCE
    // en vrai, l'ID devrait incrémenté à chaque requête...
      Chunk(LDAP_INTEGER,#2)+      // Message ID 2
    // on va faire une recherche
      Chunk(LDAP_SEARCH,     // Search
    // chaine vide = objet de base (efin il me semble :) )
       Chunk(LDAP_STRING,'')+ // BaseObject
    // sur tout l'arbre
       Chunk(LDAP_ENUM,#2)+ // Scope 2 = Whole Tree
    // en incluant les alias
       Chunk(LDAP_ENUM,#0)+ // Aliases 0 = derefaliases
    // sans limite de taille
       Chunk(LDAP_INTEGER,#0)+ // Size limite
    // ni de temps
       Chunk(LDAP_INTEGER,#0)+ // Time limite
    // ni de type d'objet
       Chunk(LDAP_BOOLEAN,LDAP_FALSE)+ // Type only (boolean)
    // et maintenant le filtre
    // un OR entre les deux qui suivent
       Chunk(LDAP_FILTER_OR, // Filter = OR
     // le premier est un MATCH entre "cn" et le nom
        Chunk(LDAP_FILTER_MATCH, // Filter = Equality Match
         Chunk(LDAP_STRING,'cn')+ // common name
         Chunk(LDAP_STRING,Name)
        )+
     // le second est un match entre "uid" et le nom
        Chunk(LDAP_FILTER_MATCH, // Filter = Equality Match
         Chunk(LDAP_STRING,'uid')+ // unique id
         Chunk(LDAP_STRING,Name)
        )
       )+
    // fin du chunk
       Chunk(LDAP_SEQUENCE,
        Chunk(LDAP_NULL,'') // NULL
       )
      )
     );
    // on envoie la requte
     if SendData(LDAP,s1[1],Length(s1))<=0 then exit;
    // on lit la séquence réponse dans s1, s2 est un buffer de réception
     s1:='';
     if not ReadSequence(LDAP,s1,s2,2) then exit;
    // ouverture du chunk qui doit être un SEARCH_ENTRY
     if not OpenChunk(LDAP_SEARCH_ENTRY,s1) then exit;
    // la 2ième séquence dans  s2 (s3 est le buffer de réception)
      if not ReadSequence(LDAP,s2,s3,2) then exit;
    // on ne devrait pas avoir de 3ième séquence (voir ci-dessous)
      if s3<>'' then exit;
    // la seconde séquence doit être un SEARCH_DONE (sinon, c'est qu'on a plusieurs réponses...ce qui sera le cas sur un explorateur)
      if not OpenChunk(LDAP_SEARCH_DONE,s2) then exit; // Search Done
    // tout va bien, donc la première séquence est la chaine que l'on cherche
     Result:=StrChunk(s1);
    end;
    Mon unité, comme je le fais souvent, stocke dans des STRING des données binaires. Cela présente l'avantage de pouvoir concaténer deux éléments par une simple addition L'affichage d'une de ces chaines ne donnerait rien d'intéressant en fait

    Maintenant sous Windows tu as une DLL qui permet d'interroger un annuaire LDAP, et il serait sans doute plus simple de passer par là C'est juste une question de gout, moi j'aime bien comprendre ce qu'il se passe dans les protocoles, ça permet à mon sens de faire des clients mieux conçus (notamment sur les requêtes MySQL)
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 61
    Points : 47
    Points
    47
    Par défaut
    Toutes mes confuses PAUL !

    merci pour ces renseignements, je vais me documenter, et trouver le filtre qui va bien pour ton LDAPSEARCH.

  6. #6
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    Sinon tu peux utiliser ceci qui exploite la DLL wldap32.dll de Windows.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 61
    Points : 47
    Points
    47
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    Sinon tu peux utiliser ceci qui exploite la DLL wldap32.dll de Windows.
    merci beaucoup, c'est exactement ce qui me fallait.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 30/04/2007, 17h46
  2. Réponses: 5
    Dernier message: 15/03/2007, 09h52
  3. Manque explorateur de code sur delphi 6
    Par shadrak dans le forum Delphi
    Réponses: 12
    Dernier message: 28/08/2006, 14h48
  4. Comment accéder à un annuaire LDAP à partir de Delphi ?
    Par plante20100 dans le forum API, COM et SDKs
    Réponses: 25
    Dernier message: 28/07/2005, 13h45
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

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