login [=false] * @param mot de passe [=false] * @param mode debug [=false] (true or false) * @return true si la connexion a reussie, false dans le cas contraire */ public function connect($login=false,$password=false){ putenv('LDAPTLS_REQCERT=never'); if($this->server==null || $this->port==null || $this->userRoot==null) throw new Exception('Paramêtres de connexion manquants'); $this->datasource = ldap_connect($this->server,$this->port); if (!$this->datasource) throw new Exception('Connexion échouée'); ldap_set_option($this->datasource,LDAP_OPT_PROTOCOL_VERSION,$this->protocolVersion); ldap_set_option($this->datasource, LDAP_OPT_REFERRALS, 0); if(@ldap_bind($this->datasource,$login,$password) ==false) throw new Exception('Identifiant ou mot de passe incorrect'); } /** * Récupere un samaccountname depuis un CN (conrtion des liaisons ad en liasons erp) * @param CN complet de la personne recherchée **/ public function userFromCn($cn){ $entries= $this->search($this->userRoot,"(distinguishedname=$cn)"); return $entries; } /** * Récupere un CN depuis le login * @param Login **/ public function cnFromLogin($login){ $entries= $this->search($this->userRoot,'(samAccountName='.$login.')'); return (isset($entries[0])) ? $entries[0]['dn'] : false; } /** * Récupere les groupes ancetres du groupe ciblés recusrivement et les ajoute a la liste passée en argument * @param liste des groupes à alimenter * @param CN du groupe concerné * @return */ function recursiveGroups(&$groups,$groupCN){ $entries = $this->search($this->groupRoot,"(member=".$groupCN.")"); if(count($entries)!=0 && $entries['count']!=0) { if(isset($entries[0])){ $groups[] = $entries[0]['name'][0]; $parentCN = $entries[0]['distinguishedname'][0]; $this->recursiveGroups($groups,$parentCN); } } } /** * Recherche des valeurs dans la base de données en fonction du filtre * @param Racine contexte de la recherche * @param Filtre contenant les éléments a rechercher * @return tableau contenant les objets correspondants a la recherche */ public function search($dn,$filtre){ $sr=ldap_search($this->datasource, $dn, $filtre); $info = ldap_get_entries($this->datasource, $sr); return $info; } /** * Récupere tous les utilisateurs du LDAP * @param Racine contexte de la recherche */ public function populate($dn){ return $this->search($dn,"(samAccountName=*)"); } public function get_domain_name($login){ $user = $this->search($this->userRoot,'(samAccountName='.$login.')'); return $user[0]['dn']; } public function set($dn,$entry,$value){ putenv('LDAPTLS_REQCERT=never'); if($value != ''){ $attributes[$entry][0] = $value; return ldap_modify($this->datasource,$dn,$attributes); }else{ $attributes[$entry] = array(); return ldap_mod_del($this->datasource,$dn,$attributes); } } public function change_password( $userDn , $newPassword ) { return ldap_mod_replace($this->datasource, $userDn , self::encrypt_password($newPassword)); } public static function encrypt_password( $newPassword ) { $newPassword = "\"" . $newPassword . "\""; $len = strlen( $newPassword ); $newPassw = ""; for ( $i = 0; $i < $len; $i++ ){ $newPassw .= "{$newPassword{$i}}\000"; } return array("unicodePwd" => $newPassw); } /** * Deconnexion du LDAP */ public function disconnect(){ if($this->datasource!=null){ @ldap_close($this->datasource); } } } ?>