Google

NAME="GENERATOR" CONTENT="Modular DocBook HTML Stylesheet Version 1.73 ">

XLIX. LDAP

Introduction à LDAP

LDAP est l'acronyme de Lightweight Directory Access Protocol, c'est à dire Protocole Léger d'Accès aux Dossiers. C'est un protocole utilisé pour accéder à des "serveurs de dossiers", des serveurs qui gèrent les informations de manière hiérarchique.

Le concept est similaire à la structure de votre disque dur, hormis le fait que la racine s'appelle ici : "The world" (le monde), et que les dossiers du premier niveau sont assimilés à des pays. Les niveaux inférieurs de la structure contiennent des entrées de sociétés, d'organisations ou de lieux tandis que les niveaux encore inférieurs sont des gens, voire des équipements ou des documents.

Pour accéder à un fichier sur votre disque, vous devez utiliser la syntaxe suivante :


    /usr/local/myapp/docs
  

Le slash indique une division de la référence, et la séquence est lue de gauche à droite.

Avec tous les détails, une référence LDAP s'appelle un "nom distingué" ("distinguished name"), appelé aussi "nd" ("dn" en anglais). Par exemple :


    cn=Jean Dupont,ou=Comptes,o=Ma Société,c=Fr
  

La virgule marque une division de la référénce, et la séquence est lue de droite à gauche. Vous pouvez la lire comme ceci :


    country = Fr
    organization = Ma Société
    organizationalUnit = Comptes
    commonName = Jean Dupont
  

De la même façon qu'il n'y a pas de règle universelle d'organisation d'un disque dur, un serveur de dossier peut supporter n'importe quelle structure du moment qu'elle a un sens pour ce qu'on en fait. Cependant, il existe quelques conventions : il est impossible d'écrire un code d'accès à un dossier sans en connaître sa structure, de la même façon que vous ne pouvez pas utiliser une base de données sans en connaître les tables.

Exemple complet

Recupérer toutes les entrées dont le nom commence par "S" dans un serveur, et afficher le nom et l'adresse email.

Exemple 1. Recherche LDAP

<?php
// Structure d'une commande simple :
// connexion, lien, recherche, interpretation de la recherche
// résultat, déconnexion
  echo "<?h3>LDAP query test<?/h3>";
  echo "Connexion ...";
  $ds=ldap_connect("localhost");  // Doit être un serveur LDAP valide!
  echo "Résultat de la connexion : ".$ds."<?p>";
  if ($ds) {
    echo "Lien ...";
    $r=ldap_bind($ds);     // Ceci est un lien "anonymous", typiquement
                           // en lecture seule. En cas d'accès, affiche
                           // " Lien résultat est"
    echo "Lien résultat est ".$r."<?p>";
    echo "Recherche de (sn=S*) ...";
    // Recherche dans les noms
    $sr=ldap_search($ds,"o=Ma Société, c=Fr", "sn=S*");
    echo "Résultat : ".$sr."<?p>";
    echo "Nombre d'entrée retournée : ".ldap_count_entries($ds,$sr)."<?p>";
    echo "Lecture des entrées...<?p>";
    $info = ldap_get_entries($ds, $sr);
    echo "Data for ".$info["count"]." items returned:<?p>";
    for ($i=0; $i<?$info["count"]; $i++) {
        echo "dn vaut : ". $info[$i]["dn"] ."<?br>";
        echo "première entrée cn vaut : ". $info[$i]["cn"][0] ."<?br>";
        echo "premièr email vaut: ". $info[$i]["mail"][0] ."<?p>";
    }
    echo "Déconnexion ";
    ldap_close($ds);
  } else {
    echo "<?h4>Impossible de se connecter à un serveur LDAP <?/h4>";
  }
?>

Utilisation des fonctions PHP LDAP

Il faut d'abord que les bibliothèques client LDAP soient compilées avec PHP. Vous pouvez vous procurer ces bibliothèques University of Michigan (ldap-3.3 package) ou chez Netscape (Netscape Directory SDK).

Avant d'utiliser les fonctions LDAP il faut savoir :

  • Le nom ou l'adresse du serveur à utiliser

  • Le "nd" dans le serveur (la partie du monde qui est sur ce serveur, ce qui peut correspondre à "o=Ma société,c=Fr")

  • Eventuellement, un mot de passe pour accéder au serveur (de nombreux serveusr fournissent un accès anonyme ("anonymous bind") mais requièrent un mot de passe pour tous les autres).

Une séquence habituelle LDAP suivra le schéma suivant :


  ldap_connect()    // établit une connexion à un serveur
     |
  ldap_bind()       // nom de compte "login" ou anonyme
     |
    éxécution de commandes sur le serveur, comme un listage, ou
    une modification de données avec affichage
     |
  ldap_close()      // "déconnexion"
   

Plus d'informations

Vous pouvez en apprendre encore plus, mais en anglais, aux adresses suivantes :

Le SDK Netscape contient un guide du programmeur au format HTML particulièrement pratique (en anglais).

Table des matières
ldap_8859_to_t61 --  Translate 8859 characters to t61 characters
ldap_add -- Ajoute une entrée à un dossier LDAP.
ldap_bind -- Se lie à un serveur LDAP.
ldap_close -- Déconnecte d'un serveur LDAP.
ldap_compare -- Compare les valeurs des attributs trouvés dans un ND
ldap_connect -- Se connecte à un serveur LDAP.
ldap_count_entries -- Compte le nombre d'entrées d'une recherche.
ldap_delete -- Efface une entrée dans un dossier.
ldap_dn2ufn -- Convertit un ND dans un format plus accessible.
ldap_err2str --  Convertit un numéro d'erreur LDAP en message d'erreur.
ldap_errno --  Retourne le numéro d'erreur LDAP de la dernière commande exécutée.
ldap_error --  Retourne le message LDAP de la dernière commande LDAP.
ldap_explode_dn -- Scinde un ND en plusieurs composants.
ldap_first_attribute -- Retourne le premier attribut.
ldap_first_entry -- Retourne l'identifiant du premier attribut.
ldap_first_reference --  Return first reference
ldap_free_result --  Libère la mémoire prise par un résultat.
ldap_get_attributes --  Retourne les attributs d'une entrée d'un résultat.
ldap_get_dn -- Retourne un ND d'une entrée d'un résultat.
ldap_get_entries -- Retourne toutes les entrées.
ldap_get_option -- Lit la valeur courante d'une option
ldap_get_values_len --  Retourne toutes les valeurs binaires à partir d'un identifiant de résultat.
ldap_get_values -- Retourne toutes les entrées d'un résultat.
ldap_list -- Recherche dans un seul niveau.
ldap_mod_add -- Ajoute un attribut
ldap_mod_del -- Efface un attribut
ldap_mod_replace -- Remplace un attribut
ldap_modify -- Modifie une entrée LDAP.
ldap_next_attribute -- Lit l'attribut suivant.
ldap_next_entry -- Lit l'attribut suivant.
ldap_next_reference --  Get next reference
ldap_parse_reference --  Extract information from reference entry
ldap_parse_result --  Extract information from result
ldap_read -- Lit une entrée.
ldap_rename -- Modifie le nom d'une entrée
ldap_search -- Recherche dans tout l'arbre LDAP.
ldap_set_option -- Modifie une option LDAP
ldap_set_rebind_proc --  Set a callback function to do re-binds on referral chasing.
ldap_sort --  Sort LDAP result entries
ldap_start_tls --  Start TLS
ldap_t61_to_8859 --  Translate t61 characters to 8859 characters
ldap_unbind -- Termine la liaison avec un serveur LDAP.