LDAP
Introduction
LDAP siginifie : Lightweight Directory Access Protocol (Protocole léger d'accès aux annuaires). C'est un protocole utilisé pour accéder aux "serveurs de dossiers". Ces serveurs sont des bases de données particulières, qui stockent les informations sous forme d'arborescence.
Le concept d'arborescence est similaire à celui de la structure de votre système de fichier, hormis le fait que dans ce contexte, la racine s'appelle "le monde", et que le premier niveau de sous-dossier s'appelle "pays". Les niveaux encore en dessous sont des "compagnies" "organisation" ou "places", et encore plus bas, vous trouverez des "personnes" et même des "équipements" et "documents".
Pour identifier un fichier dans votre disque, vous utilisez un chemin tel que
/usr/local/mon_application/documents
Le slash indique une division dans la référence, et la séquence est lue de gauche à droite.
l'équivalent d'une référence globale en LDAP s'appelle un "nom distingué" ("distinguished name"), aussi appelé "dn". Un exemple de dn serait :
cn=Jean Dupond,ou=Comptabilité,o=Ma Compagnie,c=FR
La virgule marque la séparation de chaque division comme référence, et la séquence est lue de droite à gauche. Il faut donc lire :
country = FR organization = Ma Compagnie organizationalUnit = Comptabilité commonName = Jean Dupond
De la même façon qu'il n'y a pas de règle obligatoire sur comment organiser les fichiers sur un disque dur, un responsable de serveur de dossiers peut organiser le serveur comme cela lui semble le plus pratique. Cependant, il y a des conventions à utiliser. Le principe est que vous ne pouvez pas accéder à un serveur de dossier à moins que vous ne connaissiez sa structure, de même que vous ne pouvez écrire une base de données sans en connaître les tables et les bases.
Bien plus d'informations sont disponibles aux URL suivantes (en anglais) :
Le SDK Netscape contient un guide du programmeur (» Programmer's Guide) très utile, au format HTML (et en anglais).
Pré-requis
Vous devez télécharger et compiler les bibliothèques clientes LDAP depuis soit » OpenLDAP ou » Bind9.net pour assurer le support LDAP.
Installation
Le support LDAP de PHP n'est pas activé par défaut. Vous devez utiliser l'option de configuration --with-ldap[=DIR] lorsque vous compilez PHP, où DIR est le répertoire d'installation du serveur LDAP. Pour activer le support SASL, assurez-vous que l'option de configuration --with-ldap-sasl[=DIR] est utilisée et que le fichier sasl.h existe sur votre système.
Note: Note aux utilisateurs Win32 Afin de faire fonctionner cette extension, quelques bibliothèques DLL doivent être disponibles via le PATH du système Windows. Lisez la FAQ intitulée "Comment ajouter mon dossier PHP à mon PATH WIndows" pour plus d'informations. Le fait de copier les bibliothèques DLL depuis le dossier PHP dans le dossier système Windows fonctionne également (car le dossier système est par défaut dans le PATH système), mais cette méthode n'est pas recommandée. Cette extension nécessite que les fichiers suivants se trouvent dans le PATH : libeay32.dll et ssleay32.dll
Les versions antérieures à PHP 4.3.0 nécessitent la bibliothèque libsasl.dll.
Pour pouvoir utiliser les bibliothèques Oracle LDAP, un environnement Oracle propre doit être défini.
Configuration à l'exécution
Le comportement de ces fonctions est affecté par la configuration dans le fichier php.ini.
Nom | Par défaut | Modifiable | Historique |
---|---|---|---|
ldap.max_links | "-1" | PHP_INI_SYSTEM |
Types de ressources
La plupart des fonctions LDAP opère sur des ressources retournées par les fonctions LDAP (e.g. ldap_connect() retourne un identifiant de lien LDAP positif requis par plusieurs fonctions LDAP).
Constantes pré-définies
Ces constantes sont définies par cette extension, et ne sont disponibles que si cette extension a été compilée avec PHP, ou bien chargée au moment de l'exécution.
- LDAP_DEREF_NEVER (entier)
- LDAP_DEREF_SEARCHING (entier)
- LDAP_DEREF_FINDING (entier)
- LDAP_DEREF_ALWAYS (entier)
- LDAP_OPT_DEREF (entier)
- LDAP_OPT_SIZELIMIT (entier)
- LDAP_OPT_TIMELIMIT (entier)
- LDAP_OPT_PROTOCOL_VERSION (entier)
- LDAP_OPT_ERROR_NUMBER (entier)
- LDAP_OPT_REFERRALS (entier)
- LDAP_OPT_RESTART (entier)
- LDAP_OPT_HOST_NAME (entier)
- LDAP_OPT_ERROR_STRING (entier)
- LDAP_OPT_MATCHED_DN (entier)
- LDAP_OPT_SERVER_CONTROLS (entier)
- LDAP_OPT_CLIENT_CONTROLS (entier)
- LDAP_OPT_DEBUG_LEVEL (entier)
- GSLC_SSL_NO_AUTH (entier)
- GSLC_SSL_ONEWAY_AUTH (entier)
- GSLC_SSL_TWOWAY_AUTH (entier)
Exemples
Lit les informations sur toutes les entrées dont le nom commence par "S" sur le serveur de dossier, puis affiche le nom et l'adresse email.
Example#1 Recherche avec LDAP
<?php
// La séquence de base avec LDAP est
// connexion, liaison, recherche, interprétation du résultat
// déconnexion
echo '<h3>requête de test de LDAP</h3>';
echo 'Connexion ...';
$ds=ldap_connect("localhost"); // doit être un serveur LDAP valide !
echo 'Le résultat de connexion est ' . $ds . '<br />';
if ($ds) {
echo 'Liaison ...';
$r=ldap_bind($ds); // connexion anonyme, typique
// pour un accès en lecture seule.
echo 'Le résultat de connexion est ' . $r . '<br />';
echo 'Recherchons (sn=S*) ...';
// Recherche par nom
$sr=ldap_search($ds,"o=My Company, c=US", "sn=S*");
echo 'Le résultat de la recherche est ' . $sr . '<br />';
echo 'Le nombre d\'entrées retournées est ' . ldap_count_entries($ds,$sr)
. '<br />';
echo 'Lecture des entrées ...<br />';
$info = ldap_get_entries($ds, $sr);
echo 'Données pour ' . $info["count"] . ' entrées:<br />';
for ($i=0; $i<$info["count"]; $i++) {
echo 'dn est : ' . $info[$i]["dn"] . '<br />';
echo 'premiere entree cn : ' . $info[$i]["cn"][0] . '<br />';
echo 'premier email : ' . $info[$i]["mail"][0] . '<br />';
}
echo 'Fermeture de la connexion';
ldap_close($ds);
} else {
echo '<h4>Impossible de se connecter au serveur LDAP.</h4>';
}
?>
Utiliser les fonctions LDAP de PHP
Avant d'utiliser les fonctions LDAP, vous devez connaître
-
Le nom ou l'adresse du serveur de dossiers que vous voudrez utiliser
-
Le "base dn" du serveur (la partie du dossier monde qui est disponible sur ce serveur, ce qui peut être "o=Ma Compagnie,c=FR")
-
Le mot de passe éventuel d'accès au serveur (de nombreux serveurs fournissent un accès anonyme en lecture, mais requièrent des mots de passe pour tout le reste).
La séquence LDAP typique que vous exécuterez sera la suivante :
ldap_connect() // établit une connexion au serveur | ldap_bind() // connexion anonyme ou identifiée | réalisation de commandes comme des recherches ou des modifications, puis affichage du résultat. | ldap_close() // déconnexion
Table of Contents
- ldap_8859_to_t61 — Convertit les caractères 8859 en caractères t61
- ldap_add — Ajoute une entrée dans un dossier LDAP
- ldap_bind — Authentification au serveur LDAP
- ldap_close — Alias de ldap_unbind
- ldap_compare — Compare une entrée avec des valeurs d'attributs
- ldap_connect — Connection à un serveur LDAP
- ldap_count_entries — Compte le nombre d'entrées après une recherche
- ldap_delete — Efface une entrée dans un dossier
- ldap_dn2ufn — Convertit un DN en format UFN (User Friendly Naming)
- 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 — Sépare les différents composants d'un DN
- ldap_first_attribute — Retourne le premier attribut
- ldap_first_entry — Retourne la première entrée
- ldap_first_reference — Retourne la première référence
- ldap_free_result — Libère la mémoire du résultat
- ldap_get_attributes — Lit les attributs d'une entrée
- ldap_get_dn — Lit le DN d'une entrée
- ldap_get_entries — Lit toutes les entrées du résultat
- ldap_get_option — Lit/écrit la valeur courante d'une option
- ldap_get_values_len — Lit toutes les valeurs binaires d'une entrée
- ldap_get_values — Lit toutes les valeurs d'une entrée LDAP
- ldap_list — Recherche dans un niveau
- ldap_mod_add — Ajoute un attribut à l'entrée courante
- ldap_mod_del — Efface un attribut à l'entrée courante
- ldap_mod_replace — Remplace un attribut dans l'entrée courante
- ldap_modify — Modifie une entrée LDAP
- ldap_next_attribute — Lit l'attribut suivant
- ldap_next_entry — Lit la prochaine entrée
- ldap_next_reference — Lit la référence suivante
- ldap_parse_reference — Extrait les informations d'une référence d'entrée
- ldap_parse_result — Extrait des informations d'un résultat
- ldap_read — Lit une entrée
- ldap_rename — Modifie le nom d'une entrée
- ldap_sasl_bind — Authentification au serveur LDAP en utilisant SASL
- ldap_search — Recherche sur le serveur LDAP
- ldap_set_option — Modifie la valeur d'une option LDAP
- ldap_set_rebind_proc — Configure une fonction de retour pour refaire des liaisons lors de recherche de référants
- ldap_sort — Trie les entrées d'un résultat LDAP
- ldap_start_tls — Démarre TLS
- ldap_t61_to_8859 — Convertit les caractères t6 en caractères 8859
- ldap_unbind — Déconnecte d'un serveur LDAP