====== Classe LDAP pour la plateforme ====== Cette classe PHP nous servira pour le différente opération à effectuer sur le serveur LDAP. \\ * la librairie php LDAP: php5-ldap * le framework PHP PEAR et sa librairie NET_LDAP2 \\ * [[[Braveo:Changelog.LDAPCLASS | Changelog]] \\ === Constantes === * //const// ldap::ldapConf = "ldap.conf" => Contient le nom du fichier de configuration === Méthodes === == Privées == * //array// ldap::**getConf**() => Retourne le fichier **ldapConf** en //array// * //stream// ldap::**connect**() => Établie la connexion au serveur LDAP et retour le flux //stream// * //boolean// ldap::**unConnect**(//stream// **stream**) => Détruit la connexion **stream** au serveur LDAP == Publiques == * //string// ldap::**passwdHash**(//string// **passwd**) => Hash le mot de passe **passwd** * //boolean// ldap::**updatePasswd**(//string// **user**, //string// **passwd**) => Met à jour le mot de passe **passwd** d'un utilisateur **user**. * //boolean// ldap::**userBind**(//string// **user**, //string// **passwd**) => Authentifie l'utilisateur **user** avec son mot de passe **passwd** * //array// ldap::**getUserInfo**(//string// **user**) => Retourne Un tableau contenant les information concernant l'utilisateur **user** === Le fichier de configuration ldap.conf: === [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" === La classe ldap.class.php: === 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; } } } ?>