Cette classe PHP nous servira pour le différente opération à effectuer sur le serveur LDAP.
⇒ Contient le nom du fichier de configuration
⇒ Retourne le fichier ldapConf en array
⇒ Établie la connexion au serveur LDAP et retour le flux stream
⇒ Détruit la connexion stream au serveur LDAP
⇒ Hash le mot de passe passwd
⇒ Met à jour le mot de passe passwd d'un utilisateur user.
⇒ Authentifie l'utilisateur user avec son mot de passe passwd
⇒ Retourne Un tableau contenant les information concernant l'utilisateur user
[ldap.conf] host = "ldap.mdl29" port = "389" basedn = "ou=Users,dc=mdl29,dc=net" binddn = "cn=admin,dc=mdl29,dc=net" bindpw = "xxxxxxx" userAttr = "uid"
<?php require_once "Net/LDAP2.php"; class ldap{ const ldapConf = "ldap.conf"; private static function getConf(){ //Retourne le contenue du fichier de configuration en arrray return parse_ini_file(self::ldapConf); } public static function passwdHash($passwd){ //Retourne $passwd haché return "{SHA}".base64_encode(pack("H*",sha1($passwd))); } private static function connect(){ //On se connecte, en prenant comme argument le contenu du fichier ldap.conf $stream = Net_LDAP2::connect(self::getConf()); //On verifie qu'il n'y ai pas d'erreur if (PEAR::isError($stream)) { //Si oui, on le dit die("Impossible de se connecter au serveur LDAP: ".$ldap->getMessage()); //On retourne une valeur négative return false; //On quitte la fonction exit; }else{ //Si tout ce passe bien, on retourne la variable d'accès au LDAP return $stream; } } private static function unConnect($stream){ //Se déconnecte du LDAP $stream->done(); //Retourne une valeur positive return true; } public static function updatePasswd($user, $passwd){ //On se connecte au LDAP $stream = self::connect(); //On definie le dn de l'utilisateur $dn = $conf["userAttr"]."=".$user.",".$conf["basedn"]; //On récupère juste le password de l'utilisateur $user =& $stream->getEntry($dn, array("userPassword")); //On met a jour localement $user->replace( array( "userPassword" => self::passwdHash($passwd) //On hache le mot de passe ) ); //Puis on met a jour notre LDAP $user->update(); //On verifie qu'il n'y ai pas d'erreur if(PEAR::isError($user)){ //Si oui on se déconnecte self::unConnect($ldap); //On le dit die("Impossible de mettre le mot de passe ajour dans le serveur LDAP: ".$user->getMessage()); //On retourne une valeur négative return false; //On quitte la fonction exit; }else{ //Si tout c'est bien possé, on retourne une valeur possitive return true; //Enfin, on ferme la connexion self::unConnect($ldap); } } public static function userBind($user,$passwd){ //On se connecte au LDAP $stream = self::connect(); //On récupère la configuration $conf = self::getConf(); //On definie le dn de l'utilisateur $dn = $conf["userAttr"]."=".$user.",".$conf["basedn"]; //On voie si l'utilisateur existe if($stream->dnExists($dn)){ //Si oui, on récupère son mot de passe dans le LDAP $user =& $stream->getEntry($dn, array("userPassword")); //On le compare avec celui envoyé en argument a la fonction if($user->getValue("userPassword","single") == self::passwdHash($passwd)){ //Si c'est bon, on se déconnecte du LDAP self::unConnect($stream); //On, retourne une valeur positive return true; }else{ //Sinon, on se deconnecte self::unConnect($stream); //On retourne une valeur négative return false; } }else{ //Si l'utilisateur n'existe pas, on se déconnecte du LDAP self::unConnect($stream); //On retourne une valeur négative return false; } } public static function getUserInfo($user){ //On se connecte au LDAP $stream = self::connect(); //On récupère la configuration $conf = self::getConf(); //On definie le dn de l'utilisateur $dn = $conf["userAttr"]."=".$user.",".$conf["basedn"]; //On voie si l'utilisateur existe if($stream->dnExists($dn)){ //Si oui, on récupère les informations le concernant dans le LDAP $user =& $stream->getEntry($dn, array("cn", "mail", "sn", "displayName", "givenName","initials")); //On retourne un tableau avec les infos return array( "cn" => $user->getValue("cn","single"), "mail" => $user->getValue("mail","single"), "sn" => $user->getValue("sn","single"), "displayName" => $user->getValue("displayName","single"), "givenName" => $user->getValue("givenName","single"), "initials" => $user->getValue("initials","single") ); //On se deconnecte du serveur LDAP self::unConnect($stream); }else{ //Si l'utilisateur n'existe pas, on se déconnecte du LDAP self::unConnect($stream); //On retourne une valeur négative return false; } } } ?>