LDAP.classe.php

Cette classe PHP nous servira pour le différente opération à effectuer sur le serveur LDAP.

<?php
/******************************************************************************/
/*                                                                            */
/*     _  _ ____ _ ____ ____ _  _    ___  _  _    _    _ ___  ____ ____       */
/*     |\/| |__| | [__  |  | |\ |    |  \ |  |    |    | |__] |__/ |___       */
/*     |  | |  | | ___] |__| | \|    |__/ |__|    |___ | |__] |  \ |___       */
/*                                                                            */
/******************************************************************************/
/*                                                                            */
/* Titre          : Classe LDAP                                               */
/*                                                                            */
/* URL            : http://mdl29.net                                          */
/* Auteur :       : Arnaud                                                    */
/* Date édition   : Février 2010                                              */
/*                                                                            */
/* Licence         : GNU General Public License                               */
/******************************************************************************/
 
class LDAP
{
	// Adresse du serveur LDAP
	private $serveur;
 
	// Port du serveur 
	private $port;
 
	// Base Dn pour l'interrogation du ldap
	private $basedndn;
 
	// Base Dn de connexion pour les modifications au niveau du ldap 
	private $rootdn;
 
	// Mot de passe du LDAP
	private  $rootpwd;
 
	// Attribut de connexion
	private $connexion;
 
	// Attribut d'identification
	private $identification;
 
        // Attribut profil utilisateur 
        private $info_user;
 
 
 
 
 
	// Définition du constructeur
	 public function __construct($serveur,$port,$basedn,$rootdn,$rootpwd)
	  {       
 
		// Vérification des variables
		if (empty ($serveur) || empty ($port) || empty ($basedn)  || empty ($rootdn)  || empty ($rootpwd)  ){
			exit;
		}
		else {
			// Initialisation des attributs
			$this->serveur =  $serveur; 
                        $this->port    =  $port;
                        $this->basedn  =  $basedn;
                        $this->rootdn  =  $rootdn;
			$this->rootpwd =  $rootpwd;
 
		}
	}  // fin de la méthode
 
 
	// Méthode de connexion
	public function Connexion()
	{
		// Connexion au LDAP
		$this->connexion = @ldap_connect($this->serveur,$this->port);
 
		ldap_set_option($this->connexion, LDAP_OPT_PROTOCOL_VERSION, 3);  // version du protocole : 3
 
		// Vérification de la connexion
		if (!$this->connexion)	
		{
			// si erreur 
			return false;
		} 
		else 
		{
			return true;
	     	}
	}
 
	// Méthode Identification()
	public function Identification ()
	{
		// Identification sur le serveur 
		$ident = @ldap_bind($this->connexion, $this->rootdn, $this->rootpwd);
 
                //Vérification de la connexion
		if ($ident) 
		{
			$this->identification = $ident;
			return true;
	    	} 
		else 
		{
			return false;   // Echec d'identification
	    	}
    	}
 
 
 
 
	/* Méthode qui retourne true si un utilisateur est enregistré dans le ldap
   	sinon elle renvoie false   */
 
	public function Verif_utilisateur($utilisateur)
	{	
                $champ_recherche = "uid=$utilisateur";
 
		$search = ldap_search($this->connexion, $this->basedn, $champ_recherche);  
		if ($search != false ) 
                 {
                    $info = ldap_get_entries($this->connexion, $search); 
 
                   if ( $info["count"] == 1 )
 
                    {  
                       $this->info_user = $info;
                       return true;
                    }
                }
	        else {
 
     	    return false;
         }
 
      } // fin de la Méthode
 
 
	/* Méthode qui récupère les informations  utilisateur 
   	sinon elle renvoie false   */
 
	public function Informations_utilisateur($utilisateur)
	{
	            // si l'utilisateur existe 
 
                   if ($this->Verif_utilisateur($utilisateur))
                    { 
                    $profil = array (
		    'identifiant' =>  $this->info_user[0]["cn"][0],
		    'nom' => $this->info_user[0]["sn"][0],
		    'prenom' => $this->info_user[0]["givenname"][0],
                    'pwd' => "",
                    'mail' => $this->info_user[0]["mail"][0],
		    'mail_contact' => $this->info_user[0]["mailalternateaddress"][0],
		    'blog' => $this->info_user[0]["labeleduri"][0],
			'chimere' => $this->info_user[0]["labeleduri"][1],
		    'date_creation' => $this->info_user[0]["accountstatus"][0]);
 
                    return $profil;   // on retourne un tableau
                   }
                  else {
 
     	        return false;
                       }
 
      } // fin de la Méthode
 
 
 
 
	/* Méthode qui renvoie le nombre d'inscrits dans le ldap */
 
	public function Nombre_utilisateurs()
	{
             $champ_recherche = "uid=*";
 
             $search = ldap_search($this->connexion, $this->basedn, $champ_recherche);  
             if ($search != false )
		{
                  $nombre = ldap_count_entries($this->connexion, $search); 
 
                 if ($nombre != false ) 
                   { return $nombre;  
                   }
               }
 
          return false;
        } // fin de la Méthode
 
 
 // Méthode qui vérifie le mot de passe d'un utilisateur
 
   public function Verifier_mot_de_passe($utilisateur,$pwd)
    {
 
       // on vérifie si le mot de passe est bon
       if (@ldap_bind($this->connexion,"uid=".$utilisateur.",".$this->basedn,$pwd))
 
           {  
            // @ldap_bind($this->connexion, $this->rootdn, $this->rootpwd); 
             return  true;
           }
 
 
             return false;
 
    }
 
 
 // Méthode qui permet de changer son mot de passe
 
  public function Modifier_mot_de_passe($utilisateur,$ancien_pwd,$nouveau_pwd)
     {  
 
        if ( $this->Verifier_mot_de_passe($utilisateur,$ancien_pwd) || $ancien_pwd===true ) // $ancien_pwd vaut true si l'utilisateur a oublié son pwd et est autorisé à le changer
            {
             // si le mot de passe actuel est valide, on peut le changer
             if($ancien_pwd===true){ $this->Identification();} //A cause du bind qui bug sinon
             $entry['userPassword']=utf8_encode('{SHA}'.base64_encode(pack('H*',sha1($nouveau_pwd))));
 
             // on ajoute le nouveau mot de passe dans le ldap
            if (@ldap_modify($this->connexion,utf8_encode("uid=".$utilisateur.",".$this->basedn),$entry))
 
 
             return  true;
          }
         return false;       
 
     }
 
 
     public function Ajouter_url_blog($utilisateur, $url_blog)
     {
 
       $entry['labeledURI']=utf8_encode($url_blog);
 
       // on modifie l'attribut dans le ldap
     if (ldap_modify($this->connexion,utf8_encode("uid=".$utilisateur.",".$this->basedn),$entry))
          {
            return true;
          }
 
      return false;
  }
 
 
 
      // Ajout d'un utilisateur dans le ldap avec uid = cn
 
     public function Ajout_membre($prenom, $nom, $identifiant, $motdepasse, $mail, $url_blog)
      {    
		$espace = " ";
		$nom_prenom = $prenom . $espace . $nom;     // concaténation
		$les_initials = $prenom[0].$nom[0];        // On crée les initials 
		$mdl29 = "@mdl29.net";
		$adr_mail = $identifiant.$mdl29;
 
		$entry['cn']=utf8_encode($identifiant);
		$entry['displayName']=utf8_encode($nom_prenom);
		$entry['givenName']=utf8_encode($prenom);
		$entry['initials']=utf8_encode($les_initials);
		$entry['labeledURI']=utf8_encode($url_blog);
		$entry['mail']=utf8_encode($adr_mail);
		$entry['mailhost']=utf8_encode("mail.mdl29.net");
		$entry['mailAlternateAddress']=utf8_encode($mail);
		$entry['preferredlanguage']=utf8_encode("fr, en-gb;q=0.8, en;q=0.7");
		$entry['ObjectClass'][1]=utf8_encode("person");
		$entry['ObjectClass'][2]=utf8_encode("organizationalPerson");
		$entry['ObjectClass'][3]=utf8_encode("inetOrgPerson");
		$entry['ObjectClass'][0]=utf8_encode("top");
		$entry['ObjectClass'][4]=utf8_encode("qmailUser");
		$entry['sn']=utf8_encode($nom);
		$entry['uid']=utf8_encode($identifiant);
		$entry['userPassword']=utf8_encode('{SHA}'.base64_encode(pack('H*',sha1($motdepasse))));
                $entry['accountstatus']=utf8_encode(strftime(" %d/%m/%y "));
 
             	// on ajoute le compte dans le ldap
              	$res=@ldap_add($this->connexion,utf8_encode("uid=".$identifiant.",".$this->basedn),$entry); 
              	return $res;
        }   
 
   // on passe en paramètre $attribut qui est un tableau
   public function Modifier_profil($utilisateur, $attribut) {
 
 
 
    // on modifie le prénom
    if (array_key_exists('prenom', $attribut))
      { 
        $entry['givenName']=utf8_encode($attribut['prenom']);
      }
 
 
    // on modifie le nom
    if (array_key_exists('nom', $attribut))
      { 
 
        $entry['sn']=utf8_encode($attribut['nom']);  
      }
 
   // on modifie le displayname
  if (array_key_exists('nom_prenom', $attribut))
       { 
        $entry['displayName']=utf8_encode($attribut['nom_prenom']);    
       }
 
 
    // on modifie les initials
  if (array_key_exists('initials', $attribut))
       { 
        $entry['initials']=utf8_encode($attribut['initials']);    
       }
 
 
     // on modifie l'email de contact
 
  if (array_key_exists('mail_contact', $attribut))
      { 
        $entry['mailAlternateAddress']=utf8_encode($attribut['mail_contact']);   
       }
 
   // url du blog et chimere
  if (array_key_exists('blog', $attribut) || array_key_exists('chimere', $attribut))
      { 
        $entry['labeledURI']=Array(	(array_key_exists('blog', $attribut)) ? utf8_encode($attribut['blog']) : $_SESSION['profil_utilisateur']['blog'] ,
        				(array_key_exists('chimere', $attribut)) ? utf8_encode($attribut['chimere']) :  $_SESSION['profil_utilisateur']['chimere']
        			);
       }
 
   if (@ldap_modify($this->connexion,utf8_encode("uid=".$utilisateur.",".$this->basedn),$entry))
          { 
            return true;
          }
 
   return false;
 
   } // fin méthode
 
 
 
 
      	// Méthode Deconnexion()
 
	 public function Deconnexion(){
 
		// Déconnexion du serveur
		$deconnexion = @ldap_unbind($this->connexion);
		if(!$deconnexion)
		@ldap_close($this->connexion);
	} //fin de déconnexion
 
 } //fin de la classe
?>