OLDAPHP : Module LDAP PHP orienté object

Téléchargements



État du développement: 
Beta

C'est une API PHP5 qui encapsule entièrement le module LDAP de PHP afin de faciliter son utilisation.

Architecture du module

Voici le diagramme de classe de ce module :

Pour commencer, il n'est pas nécessaire de comprendre l'architecture interne du module, mais plutôt comment l'utiliser, ou plus exactement les parties du module qui vvous seront utiles (le reste étant utilisé de façon interne).

Utilisation du module

Connexion à l'annuaire LDAP

Pour se connecter il faudra utiliser la classe LDAP.

Manipulation de l'arbre

Si vous n'êtes pas familiarisé avec le fonctionnement de l'annuaire LDAP, je vous invite à consulter cette page.

L'annuaire LDAP est sous la forme d'une arborescence composé de nœuds. Chacun d'eux seront manipulés avec la classe LDAPNode. à la construction d'un objet LDAP, on peut spécifier une base par défaut et donc considérer cet objet comme un nœud.

Chaque lecture, recherche, etc. donne un résultat :

Chaque résultat contient un certain nombre de nœuds qui contiennent des attributs.

Exemples d'utilisation

Ce premier exemple génère une sortie similaire à la commande slapcat

<?php
echo "<pre>";
try{
	require_once ("config.php");
	function __autoload($className){
		require_once ("api/$className.php");
	}
	global $settings;
	$ldap = new LDAP($settings['ldap.url'], $settings['ldap.base']);
	$ldap->bind($settings['ldap.userdn'], $settings['ldap.passwd']);
	$result = $ldap->find();
	foreach($result as $dn => $entry){ // Pour chaque entrée
		echo "dn: $dn\n";
		foreach($entry as $attr => $values){ // pour chaque attribut
			foreach($values as $value){// pour chaque valeur
				echo "$attr: $value\n";
			}
		}
		echo "\n";
	}
}catch(Exception $e){
	echo $e->getMessage()."\n".$e->getTraceAsString();
}
echo "</pre>";
?>

Ce deuxième exemple Illustre la manipulation d'un "distinguished name"

<?php
echo "<pre>";
try{
	require_once ("config.php");
	function __autoload($className){
		require_once ("api/$className.php");
	}
	global $settings;
	/*
	 * Affichera :
	 * 'uid' => "toto"
	 * 'o' => "titi"
	 * 'dc' => "tutu tonton"
	 */
	foreach(LDAP::splitDn("uid= toto, o = titi, dc=tutu tonton ") as $type => $name){
		echo "'$type' => \"$name\"\n";
	}
	// Affichera : "o=titi, dc=tutu tonton"
	echo LDAP::sliceDn("uid= toto, o = titi, dc=tutu tonton ", 1);
}catch(Exception $e){
	echo $e->getMessage()."\n".$e->getTraceAsString();
}
echo "</pre>";
?>

Ce troisième exemple illustre la manipulation d'un annuaire LDAP

<?php
echo "<pre>";
try{
	require_once ("config.php");
	function __autoload($className){
		require_once ("api/$className.php");
	}
	global $settings;
 
	// connexion à l'annuaire
	$ldap = new LDAP($settings['ldap.url'], $settings['ldap.base']);
	$ldap->bind($settings['ldap.userdn'], $settings['ldap.passwd']);
 
	// cherche l'utilisateur toto
	// équivalent à $ldap->searchEntries($settings['ldap.base'],"(uid=toto)");
	$result = $ldap->find("(uid=toto)");
	// affiche Nombre d'entrées : 1
	echo "Nombre d'entrées : " . count($result) . "\n";
	try{
		// renvoie le premier entrée trouvée sinon renvoie une exception et sort de ce bloc
		$node = $result->getFirstNode();
		echo "effacement de l'entrée toto existante...\n";
		// efface l'entrée dans le ldap
		$node->remove();
		/*
		 * une quelconque tentative de lecture ou modification de l'objet lèvera une exception
		 * et affichera : Erreur:: This Entity is deleted
		 */
		$node['userPassword'] = "test";
	}catch(Exception $e){
		echo "Erreur:: ".$e->getMessage()."\n";
	}
 
	// ajoute l'entrée toto
	$ldap->addNode("uid=toto,".$settings['ldap.base'],array(
				'objectClass' => array("account","simpleSecurityObject"),
				'uid' => "toto",
				'userPassword' => "tutu"));
 
	// recherche de nouveau l'entrée toto
	$result = $ldap->find("(uid=toto)");
	// récupère la première entrée
	$node = $result->getFirstNode();
	/*
	 * affiche : Type d'enregistrement de l'utilisateur toto : account, simpleSecurityObject
	 * la méthode appelée est LDAPAttribute::__toString() qui affiche toules les valeurs
	 * à la suite séparées pas dees virgules
	 */
	echo "Type d'enregistrement de l'utilisateur toto : $node[objectClass]\n";
	/*
	 * modifie l'attribut userPassword de l'entrée toto avec le mot de passe tutu, mais crypté cette fois-ci
	 */ 
	$node['userPassword'] = LDAP::hashPasswd('tutu',LDAP::SSHA);
	/*
	 * la ligne suivante affichera : Mot de passe de l'utilisateur toto : toutou
	 */
	echo "Mot de passe de l'utilisateur toto : $node[userPassword]\n";
	/*
	 * vérifiont que l'entrée du LDAP est bien mise à jour :
	 */
	$result = $ldap->find("(uid=toto)");
	$node = $result->getFirstNode();
	/*
	 * la ligne suivante affichera : Mot de passe de l'utilisateur toto : toutou
	 */
	echo "Mot de passe de l'utilisateur toto : $node[userPassword]\n";
	/*
	 * C'est gagné
	 */
}catch(Exception $e){
	echo $e->getMessage()."\n".$e->getTraceAsString();
}
echo "</pre>";
?>

Fichier(s) attaché(s)Taille
oldaphp.png2.08 Ko
oldaphp_result.png733 octets