Chapter 55. L'annuaire LDAP avec PHP

Table of Contents

Utilisation de PHP avec LDAP
Les principales fonctions
Accès anonyme pour une recherche
Accès authentifié pour une recherche

Utilisation de PHP avec LDAP

Faites une sauvegarde de vos fichiers de configuration.

Vérifier que vos serveurs HTTP et LDAP fonctionnent.

Vérifier que votre serveur Annuaire est opérationnel.

Les principales fonctions

$conn=ldap_connect(hote[,port]) 

établir une connexion avec un serveur LDAP, retourne un entier positif en cas de succès, FALSE en cas d'erreur

$dn = "cn=admin, dc=foo, dc=org"; $mdp= "secret"
$cr=ldap_bind($conn, $dn, $mdp) //connexion authentifiée
$cr=ldap_bind($conn) //connexion anonyme

Retourne TRUE ou FALSE.

$result=ldap_search($conn,$dn,$filtre) 

Recherche sur le serveur LDAP avec le filtre $filtre et retourne un identifiant de résultat, ou bien FALSE en cas d'erreur.

$n=ldap_count_entries($conn, $result)

Retourne le nombre d'entrées trouvées ou FALSE en cas d'erreur.

$info=ldap_get_entries($conn, $result) 

Retourne un tableau associatif multi-dimensionnel ou FALSE en cas d'erreur. Structure du tableau associatif :

$info["count"] = nombre d'entrées dans le résultat
$info[0] : sous-tableau renfermant les infos de la première entrée
$info[n]["dn"] : dn de la n-ième entrée du résultat
$info[n]["count"] : nombre d'attributs de la n-ième entrée
$info[n][m] : m-ième attribut de la n-ième entrée

info[n]["attribut"]["count"] : nombre de valeur de cet attribut pour la n-ième entrée

$info[n]["attribut"][m] : m-ième valeur de l'attribut pour la n-ième entrée

$r=ldap_add($conn, $dn, $info)

$dn est l'identification complète de l'entrée à ajouter, et $info un tableau contenant les valeurs des attributs

ldap_modify($conn, $dn, $info)

modifie l'entrée identifiée par $dn, avec les valeurs fournies dans le tableau $info.

Accès anonyme pour une recherche

Le script ci-dessous permet d'exécuter une recherche. Testez ce script avec la commande "php4 ./LeNomDuScript", puis à partir d'une requête http (via mozilla ou konqueror par exemple)

<?
$baseDN = "dc=foo,dc=org";
$ldapServer = "localhost";
$ldapServerPort = 389;
$mdp="secret";
$dn = 'cn=manager,dc=foo,dc=org';

echo "Connexion au serveur <br />";
$conn=ldap_connect($ldapServer);

// on teste : le serveur LDAP est-il trouvé ?
if ($conn)
 echo "Le résultat de connexion est ".$conn ."<br />";
else
 die("connexion impossible au serveur LDAP");

/* 2ème étape : on effectue une liaison au serveur, ici de type "anonyme"
 * pour une recherche permise par un accès en lecture seule */

// On dit qu'on utilise LDAP V3, sinon la V2 par défaut est utilisé
// et le bind ne passe pas. 
if (ldap_set_option($conn, LDAP_OPT_PROTOCOL_VERSION, 3)) {
    echo "Utilisation de LDAPv3 \n";
 } else {
    echo "Impossible d'utiliser LDAP V3\n";
    exit;  }

$bindServerLDAP=ldap_bind($conn);



print ("Liaison au serveur : ". ldap_error($conn)."\n");
// en cas de succès de la liaison, renvoie Vrai
if ($bindServerLDAP)
  echo "Le résultat de connexion est $bindServerLDAP <br />";
else
  die("Liaison impossible au serveur ldap ...");

/* 3ème étape : on effectue une recherche anonyme, avec le dn de base,
par exemple, sur tous les noms commençant par B */

echo "Recherche suivant le filtre (sn=B*) <br />";
$query = "sn=B*";
$result=ldap_search($conn, $baseDN, $query);
echo "Le résultat de la recherche est $result <br />";

echo "Le nombre d'entrées retournées est "
echo ldap_count_entries($conn,$result)."<p />";
echo "Lecture de ces entrées ....<p />";
$info = ldap_get_entries($conn, $result);
echo "Données pour ".$info["count"]." entrées:<p />";

for ($i=0; $i < $info["count"]; $i++) {
        echo "dn est : ". $info[$i]["cn"] ."<br />";
        echo "premiere entree cn : ". $info[$i]["cn"][0] ."<br />";
        echo "premier email : ". $info[$i]["mail"][0] ."<p />";
}
/* 4ème étape : clôture de la session  */
echo "Fermeture de la connexion";
ldap_close($conn);
?>

Accès authentifié pour une recherche

Modifiez le script de façon à obtenir une connexion authentifiée (manager/secret) et retournez la valeur du "sn" de l'admin.

Construisez un formulaire html qui doit vous permettre de vous connecter en saisissant un compte utilisateur et un mot de passe sur l'annuaire LDAP via HTTP.

Adapter le script afin qu'il réalise l'authentification sur l'annuaire.

Vous retournerez les informations en cas de succés, un message d'erreur en cas d'échec.