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."'";
}