| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 | <?php/* @nom: ldap @auteur: Valentin CARRUESCO (valentincarruesco@yahoo.fr) @date de création: 31/05/2013 02:47:27 @description: Gestion des connexions aux annuaires ldap  */class ActiveDirectory{	public $server,$port,$login,$password,$userRoot,$groupRoot,$domain,$datasource,$protocolVersion;			/**	 * Se connecte a l'annuaire ldap en mode authentifié si login et mdp sont précisés,	 * en mode anonyme le cas échéant, possibilité d'activer le mode debug pour obtenir 	 * des echo etapes par etapes.	 * @param <String> login [=false]	 * @param <String> mot de passe [=false]	 * @param <String> mode debug [=false] (true or false)	 * @return <Boolean> 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 <Strong> 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 <String> 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 <String> liste des groupes à alimenter	 * @param <String> CN du groupe concerné	 * @return <void>	 */	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 <String> Racine contexte de la recherche	 * @param <String> Filtre contenant les éléments a rechercher	 * @return <Array> 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 <String> 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);		}	}		}?>
 |