Api ldap poo php5 (encapsulation de l'api ldap de php)

Description

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

L'API est composée des classes suivantes :
LDAP : Objet principal (connexion, ajout, modification, lecture, recherche, suppression, etc...)
LDAPResult : résultat renvoyé par lecture/recherche/liste (liste des entrées)
LDAPEntry : une entrées (contenant les attributs)
LDAPEntryIterator : itérateur d'entrée
LDAPException : Exception

L'exemple d'utilusation génère une sortie similaire à la commande slapcat

================================================================================
Edit:26/11/2009

l'api est hébergée à l'adresse http://svn.openihs.org/oldaphp/
Adresse de la version en développement : http://svn.openihs.org/oldaphp/trunk/
Adresse de la dernière version stable : http://svn.openihs.org/oldaphp/tags/0.9.0/

ATTENTION: j'ai supprimé l'archive zip car elle n'est pas à jour. Pour vous procurer une version suivez un lien au choix ci-dessus.

La dernière version gelée à ce jour est la version 0.9.0. Je suis en train de poursuivre son développement avec des amélioration mangeures. J'ai aussi prévu de faire une doc en français avec plus d'exemples.

Pour suivre la suite du développement, je vous invite à consulter régulièrement cette page : http://openihs.org/node/28

================================================================================
Edit:13/12/2009

ça y est la version 1.0.0 beta 2 est disponible et si vous avez aimé la version précédente, vous allez certainement beaucoup plus apprécier la dernière !

alors, rendez-vous sur la page du projet : http://oldaphp.openihs.org/

Source / Exemple :


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>"; ?>

Conclusion :


L'api est fraîchement codé n'est pas encore testée de fond en comble. Si vous avez des suggestions, n'hésitez pas...

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.