Bon l'idée est d'interroger le ldap à la connexion et si la personne existe dans le ldap de créer localement l'utilisateur. C'est d'ailleurs ce que propose la doc officiel dotclear
http://fr.dotclear.org/documentation/2.0/resources/authentication
pour cela nous allons redeclarer la class DcAuth dans le fichier dotclear/inc/config.php
// Ajout du la classe pour le ldap $__autoload['myDcAuth'] = dirname(__FILE__).'/class.auth.ldap.php'; define('DC_AUTH_CLASS','myDcAuth');
ensuite dans notre fichier dotclear/inc/class.auth.ldap.php
<? class myDcAuth extends dcAuth { # L'utilisateur n'a pas le droit de changer son mot de passe protected $allow_pass_change = true; # La méthode de vérification du mot de passe public function checkUser($user_id, $pwd=null, $user_key=null) { # Pas de mot de passe, on appelle la méthode parente. if ($pwd == '') { return parent::checkUser($user_id,null,$user_key); } # On démarre une transaction et on ouvre un curseur sur la # table utilisateur de Dotclear pour créer ou modifier # l'utilisateur. $this->con->begin(); $cur = $this->con->openCursor($this->user_table); # parmetre de configuration pour l'interface PHP pour administrer # notre annuaire LDAP $server = "X.X.X.X"; $port = "389"; $racine = "dc=XXX,dc=XXX"; #connection au serveur ldap $ds=@ldap_connect($server) or die("Could not connect to LDAP server."); ldap_set_option ($ds, LDAP_OPT_PROTOCOL_VERSION, 3); if (ldap_bind($ds,"uid=".$user_id.",ou=Users,dc=XXX,dc=XXX",$pwd)) { # On définit le mot de passe, il est inséré dans tous les cas. $cur->user_pwd = $pwd; # Si l'utilisateur existe, nous allons uniquement mettre à jour # son mot de passe dans la table utilisateur de Dotclear. if ($this->core->userExists($user_id)) { $this->sudo(array($this->core,'updUser'),$user_id,$cur); $this->con->commit(); } # Si l'utilisateur n'existe pas, nous allons le créer. # Afin qu'il puisse se connecter, il est nécessaire de lui donner # au moins une permission "admin" sur son blog . else { # Si l'utilisateur n'existe pas, nous allons le créer. # Afin qu'il puisse se connecter, il est nécessaire de lui donner # au moins une permission "usage" sur le blog "default". else { $sr=ldap_search($ds,$racine,"cn=$user_id",array( "dn", "cn", "sn", "mail", "givenName")); $info = ldap_get_entries($ds, $sr); #on recherche l'utilisateur dans le ldap pour recuperer toutes les informations $sr=ldap_search($ds,$racine,"cn=$user_id",array( "dn", "cn", "sn", "mail", "givenName")); $info = ldap_get_entries($ds, $sr); #si le ldap ne ramene qu'un seul utilisateur if ($info["count"] ==1) { $cur->user_id = $info[0]['cn'][0]; $cur->user_email = $info[0]['mail'][0]; $cur->user_name = $info[0]['givenName'][0]; $cur->user_firstname = $info[0]['sn'][0]; $cur->user_lang = 'fr'; $cur->user_tz = 'Europe/Paris'; $cur->user_default_blog = 'default'; $this->sudo(array($this->core,'addUser'),$cur); $this->sudo(array($this->core,'setUserBlogPermissions'),$user_id,$user_id,array('admin'=>true)); $this->con->commit(); } } # Les opérations précédentes se sont déroulées sans erreur, nous # pouvons maintenant appeler la méthode parente afin d'initialiser # l'utilisateur dans l'object $core->auth return parent::checkUser($user_id,$pwd); } # En cas d'erreur on annule la transaction et on renvoie "false" $this->con->rollback(); return false; } } ?>
et voila notre blog utilise le ldap