From d2cc4a088155e275583bed1d70014289869d47da Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Fri, 1 Jun 2007 20:15:30 +0000 Subject: [PATCH] =?UTF-8?q?D=E9but=20ajout=20synchro=20ldap2dolibarr=20=E0?= =?UTF-8?q?=20la=20connexion?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- htdocs/main.inc.php | 48 ++++++++++++++++++++++++++++++++++++++----- htdocs/user.class.php | 8 +++++++- 2 files changed, 50 insertions(+), 6 deletions(-) diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php index 276da5e7bdc..183a97f2091 100644 --- a/htdocs/main.inc.php +++ b/htdocs/main.inc.php @@ -304,7 +304,7 @@ if (! session_id() || ! isset($_SESSION["dol_login"])) // Fin code pour compatiblité // Si synchro ldap2dolibarr on récupère les attributs de l'utilisateur - // afin de les synchroniser à sa connexion + // afin de les synchroniser à chaque connexion if ($conf->global->LDAP_SYNCHRO_ACTIVE == 'ldap2dolibarr') { $attrArray = array(); // récupération de tous les attributs de l'utilisateur @@ -357,8 +357,39 @@ if (! session_id() || ! isset($_SESSION["dol_login"])) } } - // Charge l'objet user depuis son login - $result=$user->fetch($login); + // Charge l'objet user depuis son login ou son sid + if ($conf->ldap->enabled && $conf->global->LDAP_SYNCHRO_ACTIVE == 'ldap2dolibarr' && is_array($attributs)) + { + require_once(DOL_DOCUMENT_ROOT."/lib/ldap.class.php"); + $ldap=new Ldap(); + $result=$ldap->connect_bind(); + if ($result > 0) + { + //on récupère le sid + $user->search_sid = $ldap->getObjectSid($attributs[$ldapuserattr][0]); + if ($ldapdebug) print "DEBUG: search_sid = ".$user->search_sid."
\n"; + $result=$user->fetch(); + } + else + { + session_destroy(); + dolibarr_syslog('Synchro LDAP KO'); + if ($ldapdebug) print "DEBUG: Error connect_bind = ".$ldap->error."
\n"; + + // On repart sur page accueil + session_name($sessionname); + session_start(); + $langs->load('admin'); + $_SESSION["loginmesg"]=$langs->trans("LDAPSynchroKO"); + header('Location: '.DOL_URL_ROOT.'/index.php'); + exit; + } + } + else + { + $result=$user->fetch($login); + } + if ($result <= 0) { session_destroy(); @@ -378,9 +409,9 @@ else // On est déjà en session qui a sauvegardé login // Remarks: On ne sauvegarde pas objet user car pose pb dans certains cas mal idnetifiés $login=$_SESSION["dol_login"]; - dolibarr_syslog("This is an already user logged session. _SESSION['dol_login']=".$login); + dolibarr_syslog("This is an already user logged session. _SESSION['dol_login']=".$login); $user->fetch($login); - $login=$user->login; + $login=$user->login; } // Est-ce une nouvelle session @@ -390,6 +421,13 @@ if (! isset($_SESSION["dol_login"])) $_SESSION["dol_login"]=$user->login; dolibarr_syslog("This is a new started user session. _SESSION['dol_login']=".$_SESSION["dol_login"].' Session id='.session_id()); $user->update_last_login_date(); + + // Mise à jour ldap2dolibarr + if ($conf->ldap->enabled && $conf->global->LDAP_SYNCHRO_ACTIVE == 'ldap2dolibarr' && is_array($attributs)) + { + //$result = $user->update_ldap2dolibarr($attributs); + } + } diff --git a/htdocs/user.class.php b/htdocs/user.class.php index 21a998d918f..f246b666312 100644 --- a/htdocs/user.class.php +++ b/htdocs/user.class.php @@ -50,6 +50,7 @@ class User var $id; var $ldap_sid; + var $search_sid; var $fullname; var $nom; var $prenom; @@ -128,7 +129,12 @@ class User $sql.= " ".$this->db->pdate("u.datelastlogin")." as datel,"; $sql.= " ".$this->db->pdate("u.datepreviouslogin")." as datep"; $sql.= " FROM ".MAIN_DB_PREFIX."user as u"; - if ($login) + if ($conf->ldap->enabled && $conf->global->LDAP_SYNCHRO_ACTIVE == 'ldap2dolibarr' && $this->search_sid != '') + { + // permet une recherche du user par son SID ActiveDirectory ou Samba + $sql .= " WHERE u.ldap_sid = '".$this->search_sid."'"; + } + else if ($login) { $sql .= " WHERE u.login = '".$login."'"; }