Ajout attribut ldap sid.

On fait fonctionner la recup d'un suer depuis LDAP
This commit is contained in:
Laurent Destailleur 2006-11-26 00:24:10 +00:00
parent 46a875111f
commit ba8a4f8402
10 changed files with 267 additions and 227 deletions

View File

@ -62,6 +62,7 @@ if ($_GET["action"] == 'setvalue' && $user->admin)
if (! dolibarr_set_const($db, 'LDAP_FIELD_MOBILE',$_POST["fieldmobile"])) $error++; if (! dolibarr_set_const($db, 'LDAP_FIELD_MOBILE',$_POST["fieldmobile"])) $error++;
if (! dolibarr_set_const($db, 'LDAP_FIELD_FAX',$_POST["fieldfax"])) $error++; if (! dolibarr_set_const($db, 'LDAP_FIELD_FAX',$_POST["fieldfax"])) $error++;
if (! dolibarr_set_const($db, 'LDAP_FIELD_DESCRIPTION',$_POST["fielddescription"])) $error++; if (! dolibarr_set_const($db, 'LDAP_FIELD_DESCRIPTION',$_POST["fielddescription"])) $error++;
if (! dolibarr_set_const($db, 'LDAP_FIELD_SID',$_POST["fieldsid"])) $error++;
if ($error) if ($error)
{ {
@ -209,6 +210,14 @@ print '</td><td>'.$langs->trans("LDAPFieldDescriptionExample").'</td>';
print '<td align="right"><input type="radio" name="key" value="'.$conf->global->LDAP_FIELD_DESCRIPTION.'"'.($conf->global->LDAP_KEY_GROUPS==$conf->global->LDAP_FIELD_DESCRIPTION?' checked="true"':'')."></td>"; print '<td align="right"><input type="radio" name="key" value="'.$conf->global->LDAP_FIELD_DESCRIPTION.'"'.($conf->global->LDAP_KEY_GROUPS==$conf->global->LDAP_FIELD_DESCRIPTION?' checked="true"':'')."></td>";
print '</tr>'; print '</tr>';
// Sid
$var=!$var;
print '<tr '.$bc[$var].'><td>'.$langs->trans("LDAPFieldSid").'</td><td>';
print '<input size="25" type="text" name="fieldsid" value="'.$conf->global->LDAP_FIELD_SID.'">';
print '</td><td>'.$langs->trans("LDAPFieldSidExample").'</td>';
print '<td align="right"><input type="radio" name="key" value="'.$conf->global->LDAP_FIELD_SID.'"'.($conf->global->LDAP_KEY_GROUPS==$conf->global->LDAP_FIELD_SID?' checked="true"':'')."></td>";
print '</tr>';
$var=!$var; $var=!$var;
print '<tr '.$bc[$var].'><td colspan="4" align="center"><input type="submit" class="button" value="'.$langs->trans("Modify").'"></td></tr>'; print '<tr '.$bc[$var].'><td colspan="4" align="center"><input type="submit" class="button" value="'.$langs->trans("Modify").'"></td></tr>';
print '</table>'; print '</table>';

View File

@ -105,7 +105,7 @@ class InterfaceLdap
if ($action == 'USER_CREATE') if ($action == 'USER_CREATE')
{ {
dolibarr_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id); dolibarr_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
if ($conf->ldap->enabled && $conf->global->LDAP_SYNCHRO_ACTIVE) if ($conf->ldap->enabled && $conf->global->LDAP_SYNCHRO_ACTIVE == 'dolibarr2ldap')
{ {
$ldap=new Ldap(); $ldap=new Ldap();
$ldap->connect_bind(); $ldap->connect_bind();
@ -119,7 +119,7 @@ class InterfaceLdap
elseif ($action == 'USER_MODIFY') elseif ($action == 'USER_MODIFY')
{ {
dolibarr_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id); dolibarr_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
if ($conf->ldap->enabled && $conf->global->LDAP_SYNCHRO_ACTIVE) if ($conf->ldap->enabled && $conf->global->LDAP_SYNCHRO_ACTIVE == 'dolibarr2ldap')
{ {
$ldap=new Ldap(); $ldap=new Ldap();
$ldap->connect_bind(); $ldap->connect_bind();
@ -141,7 +141,7 @@ class InterfaceLdap
elseif ($action == 'USER_DELETE') elseif ($action == 'USER_DELETE')
{ {
dolibarr_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id); dolibarr_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
if ($conf->ldap->enabled && $conf->global->LDAP_SYNCHRO_ACTIVE) if ($conf->ldap->enabled && $conf->global->LDAP_SYNCHRO_ACTIVE == 'dolibarr2ldap')
{ {
$ldap=new Ldap(); $ldap=new Ldap();
$ldap->connect_bind(); $ldap->connect_bind();
@ -156,7 +156,7 @@ class InterfaceLdap
// Groupes // Groupes
elseif ($action == 'GROUP_CREATE') elseif ($action == 'GROUP_CREATE')
{ {
if ($conf->ldap->enabled && $conf->global->LDAP_SYNCHRO_ACTIVE) if ($conf->ldap->enabled && $conf->global->LDAP_SYNCHRO_ACTIVE == 'dolibarr2ldap')
{ {
$ldap=new Ldap(); $ldap=new Ldap();
$ldap->connect_bind(); $ldap->connect_bind();
@ -169,7 +169,7 @@ class InterfaceLdap
} }
elseif ($action == 'GROUP_MODIFY') elseif ($action == 'GROUP_MODIFY')
{ {
if ($conf->ldap->enabled && $conf->global->LDAP_SYNCHRO_ACTIVE) if ($conf->ldap->enabled && $conf->global->LDAP_SYNCHRO_ACTIVE == 'dolibarr2ldap')
{ {
$ldap=new Ldap(); $ldap=new Ldap();
$ldap->connect_bind(); $ldap->connect_bind();
@ -182,7 +182,7 @@ class InterfaceLdap
} }
elseif ($action == 'GROUP_DELETE') elseif ($action == 'GROUP_DELETE')
{ {
if ($conf->ldap->enabled && $conf->global->LDAP_SYNCHRO_ACTIVE) if ($conf->ldap->enabled && $conf->global->LDAP_SYNCHRO_ACTIVE == 'dolibarr2ldap')
{ {
$ldap=new Ldap(); $ldap=new Ldap();
$ldap->connect_bind(); $ldap->connect_bind();

View File

@ -584,6 +584,8 @@ LDAPFieldTown=Town
LDAPFieldTownExample=Example : l LDAPFieldTownExample=Example : l
LDAPFieldDescription=Description LDAPFieldDescription=Description
LDAPFieldDescriptionExample=Example : description LDAPFieldDescriptionExample=Example : description
LDAPFieldSid=SID
LDAPFieldSidExample=Example : objectsid
LDAPParametersAreStillHardCoded=LDAP parametres are still hardcoded (in contact class) LDAPParametersAreStillHardCoded=LDAP parametres are still hardcoded (in contact class)
LDAPSetupNotComplete=LDAP setup not complete (go on others tabs) LDAPSetupNotComplete=LDAP setup not complete (go on others tabs)
LDAPNoUserOrPasswordProvidedAccessIsReadOnly=No administrator or password provided. LDAP access will be anonymous and in read only mode. LDAPNoUserOrPasswordProvidedAccessIsReadOnly=No administrator or password provided. LDAP access will be anonymous and in read only mode.

View File

@ -13,4 +13,7 @@ LDAPAttributes=LDAP attributes
LDAPCard=LDAP card LDAPCard=LDAP card
LDAPRecordNotFound=Record not found in LDAP database LDAPRecordNotFound=Record not found in LDAP database
LDAPUsers=Users in LDAP database LDAPUsers=Users in LDAP database
LDAPGroups=Groups in LDAP database LDAPGroups=Groups in LDAP database
SynchronizeDolibarr2Ldap=Synchronize user (Dolibarr -> LDAP)
UserSynchronized=User synchronized
ForceSynchronize=Force synchronizing Dolibarr -> LDAP

View File

@ -584,6 +584,8 @@ LDAPFieldTown=Ville
LDAPFieldTownExample=Exemple : l LDAPFieldTownExample=Exemple : l
LDAPFieldDescription=Description LDAPFieldDescription=Description
LDAPFieldDescriptionExample=Exemple : description LDAPFieldDescriptionExample=Exemple : description
LDAPFieldSid=SID
LDAPFieldSidExample=Exemple : objectsid
LDAPParametersAreStillHardCoded=Les parametres LDAP sont codés en dur (dans classe contact) LDAPParametersAreStillHardCoded=Les parametres LDAP sont codés en dur (dans classe contact)
LDAPSetupNotComplete=Configuration LDAP incomplète (à compléter sur les autres onglets) LDAPSetupNotComplete=Configuration LDAP incomplète (à compléter sur les autres onglets)
LDAPNoUserOrPasswordProvidedAccessIsReadOnly=Administrateur ou mot de passe non renseigné. Les accès LDAP seront donc anonymes et en lecture seule. LDAPNoUserOrPasswordProvidedAccessIsReadOnly=Administrateur ou mot de passe non renseigné. Les accès LDAP seront donc anonymes et en lecture seule.

View File

@ -14,3 +14,6 @@ LDAPCard=Fiche LDAP
LDAPRecordNotFound=Enregistrement non trouvé dans la base LDAP LDAPRecordNotFound=Enregistrement non trouvé dans la base LDAP
LDAPUsers=Utilisateurs en base LDAP LDAPUsers=Utilisateurs en base LDAP
LDAPGroups=Groupes en base LDAP LDAPGroups=Groupes en base LDAP
SynchronizeDolibarr2Ldap=Synchroniser utilisateur (Dolibarr -> LDAP)
UserSynchronized=Utilisateur synchronisé
ForceSynchronize=Forcer synchro Dolibarr -> LDAP

View File

@ -390,13 +390,11 @@ class Ldap
return -3; return -3;
} }
//if (! $conf->ldap->enabled || ! $conf->global->LDAP_SYNCHRO_ACTIVE) return 0; if (! $olddn) $olddn=$dn;
if (! $olddn) $olddn = $dn;
// On supprime et on insère
dolibarr_syslog("Ldap.class::update dn=".$dn." olddn=".$olddn); dolibarr_syslog("Ldap.class::update dn=".$dn." olddn=".$olddn);
// On supprime et on insère
$result = $this->delete($olddn); $result = $this->delete($olddn);
$result = $this->add($dn, $info, $user); $result = $this->add($dn, $info, $user);
if ($result <= 0) if ($result <= 0)
@ -593,18 +591,15 @@ class Ldap
{ {
global $conf; global $conf;
// Encode en UTF8
if ($conf->global->LDAP_SERVER_TYPE != 'activedirectory')
{
$dn=utf8_encode($dn);
foreach($info as $key => $val)
{
if (! is_array($val)) $info[$key]=utf8_encode($val);
}
}
dolibarr_syslog("Ldap.class::add dn=".$dn." info=".join(',',$info)); dolibarr_syslog("Ldap.class::add dn=".$dn." info=".join(',',$info));
// Encode en UTF8
$dn=$this->ldap_utf8_encode($dn);
foreach($info as $key => $val)
{
if (! is_array($val)) $info[$key]=$this->ldap_utf8_encode($val);
}
//print_r($info); //print_r($info);
$result=@ldap_add($this->connection, $dn, $info); $result=@ldap_add($this->connection, $dn, $info);
@ -621,14 +616,11 @@ class Ldap
{ {
global $conf; global $conf;
// Encode en UTF8
if ($conf->global->LDAP_SERVER_TYPE != 'activedirectory')
{
$dn=utf8_encode($dn);
}
dolibarr_syslog("Ldap.class::delete Delete LDAP entry dn=".$dn); dolibarr_syslog("Ldap.class::delete Delete LDAP entry dn=".$dn);
// Encode en UTF8
$dn=$this->ldap_utf8_encode($dn);
$result=@ldap_delete($this->connection, $dn); $result=@ldap_delete($this->connection, $dn);
if ($result) return 1; if ($result) return 1;
@ -680,53 +672,43 @@ class Ldap
* username. The search criteria is a standard LDAP query - * returns all * username. The search criteria is a standard LDAP query - * returns all
* users. The $attributeArray variable contains the required user detail field names * users. The $attributeArray variable contains the required user detail field names
*/ */
function getUsers($search, $attributeArray) function getUsers($search, $userDn, $useridentifier, $attributeArray)
{ {
$userslist=array(); $userslist=array();
dolibarr_syslog("Ldap.class::getUsers search=".$search." userDn=".$userDn." useridentifier=".$useridentifier." attributeArray=".$attributeArray);
// Perform the search and get the entry handles // if the directory is AD, then bind first with the search user first
// if the directory is AD, then bind first with the search user first
if ($this->serverType == "activedirectory") { if ($this->serverType == "activedirectory") {
$this->authBind($this->searchUser, $this->searchPassword); $this->authBind($this->searchUser, $this->searchPassword);
} }
$filter = '('.$this->filter.'('.$this->getUserIdentifier().'='.$search.'))'; $filter = '('.$useridentifier.'='.$search.')';
//print "zzz".$filter; $this->result = @ldap_search($this->connection, $userDn, $filter);
$this->result = @ldap_search( $this->connection, $this->people, $filter);
if (!$this->result) if (!$this->result)
{ {
$this->ldapErrorCode = ldap_errno( $this->connection); $this->error = ldap_errno($this->connection)." ".ldap_error($this->connection);
$this->ldapErrorText = ldap_error( $this->connection); return -1;
} }
$info = @ldap_get_entries( $this->connection, $this->result); $info = @ldap_get_entries($this->connection, $this->result);
//print_r($info);
for( $i = 0; $i < $info["count"]; $i++) for ($i = 0; $i < $info["count"]; $i++)
{ {
// Get the username, and create an array indexed by it... $recordid=$this->ldap_utf8_decode($info[$i][$useridentifier][0]);
// Modify these as you see fit. if ($recordid)
$uname = $info[$i][$this->getUserIdentifier()][0]; {
//print "Found record with key $useridentifier=".$recordid."<br>\n";
// add to the array for each attribute in my list $userslist[$recordid][$useridentifier]=$recordid;
for ( $j = 0; $j < count( $attributeArray); $j++)
{ // Add to the array for each attribute in my list
if (strtolower($attributeArray[$j]) == "dn") for ($j = 0; $j < count($attributeArray); $j++)
{ {
$userslist["$uname"]["$attributeArray[$j]"] = $info[$i][strtolower($attributeArray[$j])]; //print " Param ".$attributeArray[$j]."=".$info[$i][$attributeArray[$j]][0]."<br>\n";
} $userslist[$recordid][$attributeArray[$j]] = $this->ldap_utf8_decode($info[$i][$attributeArray[$j]][0]);
else if (strtolower($attributeArray[$j]) == "objectsid") }
{ }
$objectsid = $this->getObjectSid($uname);
$userslist["$uname"]["$attributeArray[$j]"] = $objectsid;
//$userslist["$uname"]["$attributeArray[$j]"] = $objectsid[0];
}
else
{
$userslist["$uname"]["$attributeArray[$j]"] = $info[$i][strtolower($attributeArray[$j])][0];
}
}
} }
asort($userslist); asort($userslist);
@ -736,6 +718,7 @@ class Ldap
/** /**
* Récupère le SID de l'utilisateur * Récupère le SID de l'utilisateur
* ldapuser. le login de l'utilisateur * ldapuser. le login de l'utilisateur
* \deprecated
*/ */
function getObjectSid($ldapUser) function getObjectSid($ldapUser)
{ {
@ -753,6 +736,7 @@ class Ldap
/** /**
* Converts a little-endian hex-number to one, that 'hexdec' can convert * Converts a little-endian hex-number to one, that 'hexdec' can convert
* \deprecated
*/ */
function littleEndian($hex) { function littleEndian($hex) {
for ($x=strlen($hex)-2; $x >= 0; $x=$x-2) { for ($x=strlen($hex)-2; $x >= 0; $x=$x-2) {
@ -763,6 +747,7 @@ class Ldap
/** /**
* Returns the textual SID * Returns the textual SID
* \deprecated
*/ */
function binSIDtoText($binsid) { function binSIDtoText($binsid) {
$hex_sid=bin2hex($binsid); $hex_sid=bin2hex($binsid);
@ -779,34 +764,30 @@ class Ldap
/** /**
* \brief Fonction de recherche avec filtre * \brief Fonction de recherche avec filtre
* \param checkDn DN de recherche
* \param filter filtre de recherche (ex: sn=nom_personne)
* \remarks this->connection doit etre défini donc la methode bind ou authbind doit avoir deja été appelée * \remarks this->connection doit etre défini donc la methode bind ou authbind doit avoir deja été appelée
* \param checkDn DN de recherche (Ex: ou=users,cn=my-domain,cn=com)
* \param filter Filtre de recherche (ex: (sn=nom_personne) )
* \return array Tableau des reponses
*/ */
function search($checkDn, $filter) function search($checkDn, $filter)
{ {
// Perform the search and get the entry handles
if ($this->serverType != "activedirectory")
{
$checkDn=utf8_decode($checkDn);
}
dolibarr_syslog("Ldap.class::search checkDn=".$checkDn." filter=".$filter); dolibarr_syslog("Ldap.class::search checkDn=".$checkDn." filter=".$filter);
$checkDn=$this->ldap_utf8_encode($checkDn);
$filter=$this->ldap_utf8_encode($filter);
// if the directory is AD, then bind first with the search user first // if the directory is AD, then bind first with the search user first
if ($this->serverType == "activedirectory") { if ($this->serverType == "activedirectory") {
$this->authBind($this->searchUser, $this->searchPassword); $this->authBind($this->searchUser, $this->searchPassword);
} }
$this->result = @ldap_search($this->connection, $checkDn, $filter); $this->result = @ldap_search($this->connection, $checkDn, $filter);
$result = @ldap_get_entries($this->connection, $this->result); $result = @ldap_get_entries($this->connection, $this->result);
if (! $result)
if (!$result)
{ {
$this->ldapErrorCode = ldap_errno( $this->connection); $this->error = ldap_errno($this->connection)." ".ldap_error($this->connection);
$this->ldapErrorText = ldap_error( $this->connection); return -1;
} }
else else
{ {
@ -820,8 +801,8 @@ class Ldap
* \brief récupère les attributs de l'utilisateur * \brief récupère les attributs de l'utilisateur
* \param $user : utilisateur ldap * \param $user : utilisateur ldap
*/ */
function fetch( $user) { function fetch($user)
{
// Perform the search and get the entry handles // Perform the search and get the entry handles
// if the directory is AD, then bind first with the search user first // if the directory is AD, then bind first with the search user first
@ -832,27 +813,26 @@ class Ldap
$filter = '('.$this->filter.'('.$userIdentifier.'='.$user.'))'; $filter = '('.$this->filter.'('.$userIdentifier.'='.$user.'))';
$this->result = @ldap_search( $this->connection, $this->people, $filter); $this->result = @ldap_search($this->connection, $this->people, $filter);
$result = @ldap_get_entries( $this->connection, $this->result); $result = @ldap_get_entries( $this->connection, $this->result);
if (!$result) if (! $result)
{ {
$this->ldapErrorCode = ldap_errno( $this->connection); $this->error = ldap_errno($this->connection)." ".ldap_error($this->connection);
$this->ldapErrorText = ldap_error( $this->connection);
} }
else else
{ {
$this->name = utf8_decode($result[0][$this->attr_name][0]); $this->name = $this->ldap_utf8_decode($result[0][$this->attr_name][0]);
$this->firstname = utf8_decode($result[0][$this->attr_firstname][0]); $this->firstname = $this->ldap_utf8_decode($result[0][$this->attr_firstname][0]);
$this->login = utf8_decode($result[0][$userIdentifier][0]); $this->login = $this->ldap_utf8_decode($result[0][$userIdentifier][0]);
$this->phone = utf8_decode($result[0][$this->attr_phone][0]); $this->phone = $this->ldap_utf8_decode($result[0][$this->attr_phone][0]);
$this->fax = utf8_decode($result[0][$this->attr_fax][0]); $this->fax = $this->ldap_utf8_decode($result[0][$this->attr_fax][0]);
$this->mail = utf8_decode($result[0][$this->attr_mail][0]); $this->mail = $this->ldap_utf8_decode($result[0][$this->attr_mail][0]);
$this->mobile = utf8_decode($result[0][$this->attr_mobile][0]); $this->mobile = $this->ldap_utf8_decode($result[0][$this->attr_mobile][0]);
$this->uacf = $this->parseUACF(utf8_decode($result[0]["useraccountcontrol"][0])); $this->uacf = $this->parseUACF($this->ldap_utf8_decode($result[0]["useraccountcontrol"][0]));
$this->pwdlastset = utf8_decode($result[0]["pwdlastset"][0]); $this->pwdlastset = $this->ldap_utf8_decode($result[0]["pwdlastset"][0]);
ldap_free_result($this->result); ldap_free_result($this->result);
} }
@ -1004,5 +984,31 @@ class Ldap
return($retval); return($retval);
} }
} // End of class
/*
* \brief Encode in UTF8 or not
* \param string String to decode
* \return string String decoded
*/
function ldap_utf8_encode($string)
{
if ($this->serverType != "activedirectory") return utf8_encode($string);
else return($string);
}
/*
* \brief Decode in UTF8 or not
* \param string String to decode
* \return string String decoded
*/
function ldap_utf8_decode($string)
{
if ($this->serverType != "activedirectory") return utf8_decode($string);
else return($string);
}
}
?> ?>

View File

@ -808,6 +808,7 @@ class User
// Nettoyage parametres // Nettoyage parametres
$this->nom=trim($this->nom); $this->nom=trim($this->nom);
$this->prenom=trim($this->prenom); $this->prenom=trim($this->prenom);
$this->fullname=trim($this->prenom." ".$this->nom);
$this->login=trim($this->login); $this->login=trim($this->login);
$this->pass=trim($this->pass); $this->pass=trim($this->pass);
$this->email=trim($this->email); $this->email=trim($this->email);

View File

@ -116,43 +116,6 @@ if ($_POST["action"] == 'confirm_delete' && $_POST["confirm"] == "yes")
} }
} }
// Reactive un compte ldap
if ($conf->ldap->enabled && $_GET["action"] == 'reactivate' && $candisableuser)
{
if ($_GET["id"] <> $user->id)
{
$userid = $_GET["id"];
$reactiveuser = new User($db, $userid);
$reactiveuser->fetch();
$ldap = new Ldap();
if ($ldap->connect())
{
$checkDn = $conf->global->LDAP_USER_DN;
$filter = $conf->global->LDAP_FIELD_NAME.'=*';
$user_sid = $reactiveuser->ldap_sid;
$entries = $ldap->search($checkDn, $filter);
$identifier = $ldap->getUserIdentifier();
for ($i = 0; $i < $entries["count"] ; $i++) {
$objectsid = $ldap->getObjectSid($entries[$i][$identifier][0]);
if ($user_sid == $objectsid){
$reactiveuser->login = $entries[$i][$identifier][0];
}
}
$reactiveuser->update();
Header("Location: fiche.php?id=$userid");
exit;
}
else
{
print $ldap->ldapErrorCode." - ".$ldap->ldapErrorText;
}
$ldap->close();
}
}
// Action ajout user // Action ajout user
if ($_POST["action"] == 'add' && $canadduser) if ($_POST["action"] == 'add' && $canadduser)
{ {
@ -303,7 +266,7 @@ if ($_POST["action"] == 'update' && ! $_POST["cancel"] && $caneditfield)
$db->commit(); $db->commit();
} else } else
{ {
$db->rollback; $db->rollback();
} }
} }
@ -344,6 +307,47 @@ if ((($_POST["action"] == 'confirm_password' && $_POST["confirm"] == 'yes')
} }
} }
// Action initialisation donnees depuis record LDAP
if ($_POST["action"] == 'adduserldap')
{
$selecteduser = $_POST['users'];
$justthese = array(
$conf->global->LDAP_FIELD_NAME,
$conf->global->LDAP_FIELD_FIRSTNAME,
$conf->global->LDAP_FIELD_LOGIN_SAMBA,
$conf->global->LDAP_FIELD_MAIL,
$conf->global->LDAP_FIELD_PHONE,
$conf->global->LDAP_FIELD_FAX,
$conf->global->LDAP_FIELD_MOBILE,
$conf->global->LDAP_FIELD_SID);
$ldap = new Ldap();
$result = $ldap->connect_bind();
if ($result >= 0)
{
$ldapusers = $ldap->getUsers($selecteduser, $conf->global->LDAP_USER_DN, $conf->global->LDAP_KEY_USERS, $justthese);
if (is_array($ldapusers))
{
foreach ($ldapusers as $key => $attribute)
{
$ldap_nom = $attribute[$conf->global->LDAP_FIELD_NAME];
$ldap_prenom = $attribute[$conf->global->LDAP_FIELD_NAME];
$ldap_login = $attribute[$conf->global->LDAP_FIELD_LOGIN_SAMBA];
$ldap_phone = $attribute[$conf->global->LDAP_FIELD_LOGIN_PHONE];
$ldap_fax = $attribute[$conf->global->LDAP_FIELD_LOGIN_FAX];
$ldap_mobile = $attribute[$conf->global->LDAP_FIELD_LOGIN_MOBILE];
$ldap_mail = $attribute[$conf->global->LDAP_FIELD_LOGIN_MAIL];
$ldap_sid = $attribute[$conf->global->LDAP_FIELD_LOGIN_SID];
}
}
}
else
{
$message='<div class="error">'.$ldap->error.'</div>';
}
}
/* /*
@ -371,58 +375,46 @@ if (($action == 'create') || ($action == 'adduserldap'))
if ($message) { print $message.'<br>'; } if ($message) { print $message.'<br>'; }
/*
* Affiche formulaire d'ajout d'un compte depuis LDAP
* si on est en synchro LDAP vers Dolibarr
*/
if ($conf->ldap->enabled && $conf->global->LDAP_SYNCHRO_ACTIVE == 'ldap2dolibarr') if ($conf->ldap->enabled && $conf->global->LDAP_SYNCHRO_ACTIVE == 'ldap2dolibarr')
{ {
$fullname = $conf->global->LDAP_FIELD_FULLNAME; /*
$name = $conf->global->LDAP_FIELD_NAME; * Affiche formulaire d'ajout d'un compte depuis LDAP
$firstname = $conf->global->LDAP_FIELD_FIRSTNAME; * si on est en synchro LDAP vers Dolibarr
$login = $conf->global->LDAP_FIELD_LOGIN_SAMBA; */
$mail = $conf->global->LDAP_FIELD_MAIL;
$phone = $conf->global->LDAP_FIELD_PHONE;
$fax = $conf->global->LDAP_FIELD_FAX;
$mobile = $conf->global->LDAP_FIELD_MOBILE;
$SID = "objectsid";
print "\n\n<!-- Form liste LDAP debut -->\n";
print '<table width="100%" class="border"><tr><td>';
$ldap = new Ldap(); $ldap = new Ldap();
$result = $ldap->connect_bind();
if ($ldap->connect()) if ($result >= 0)
{ {
$bind=''; $justthese=array($conf->global->LDAP_KEY_USERS,
if ($conf->global->LDAP_ADMIN_DN && $conf->global->LDAP_ADMIN_PASS) $conf->global->LDAP_FIELD_FULLNAME,
{ $conf->global->LDAP_FIELD_NAME,
dolibarr_syslog("user/fiche.php authBind user=".$conf->global->LDAP_ADMIN_DN,LOG_DEBUG); $conf->global->LDAP_FIELD_FIRSTNAME,
$bind=$ldap->authBind($conf->global->LDAP_ADMIN_DN,$conf->global->LDAP_ADMIN_PASS); $conf->global->LDAP_FIELD_LOGIN_SAMBA);
}
else
{
dolibarr_syslog("user/fiche.php bind",LOG_DEBUG);
$bind=$ldap->bind();
}
if ($bind)
{
$justthese = array($fullname, $name, $firstname, $login);
$ldapusers = $ldap->getUsers('*', $justthese);
//print "eee".$justthese." r ".$ldapusers;
//print_r($justthese);
$ldapusers = $ldap->getUsers('*', $conf->global->LDAP_USER_DN, $conf->global->LDAP_KEY_USERS, $justthese);
if (is_array($ldapusers))
{
$liste=array();
foreach ($ldapusers as $key => $ldapuser) foreach ($ldapusers as $key => $ldapuser)
{ {
if ($ldapuser[$login]) $record='';
foreach ($justthese as $value)
{ {
if ($ldapuser[$name] != "") $liste[$ldapuser[$login]] = trim($ldapuser[$name]." ".$ldapuser[$firstname]); if ($value)
else if ($ldapuser[$fullname] != "") $liste[$ldapuser[$login]] = $ldapuser[$fullname]; {
$record.=$value."=".$ldapuser[$value]." ";
}
} }
$liste[$key] = $record;
} }
print '<form name="add_user_ldap" action="'.$_SERVER["PHP_SELF"].'" method="post">'; print '<form name="add_user_ldap" action="'.$_SERVER["PHP_SELF"].'" method="post">';
print '<table><tr><td>'; print '<table class="noborder"><tr><td>';
print $langs->trans("LDAPUsers"); print $langs->trans("LDAPUsers");
print '</td>'; print '</td>';
print '<td>'; print '<td>';
@ -432,51 +424,20 @@ if (($action == 'create') || ($action == 'adduserldap'))
print '<input type="submit" class="button" value="'.$langs->trans('Add').'">'; print '<input type="submit" class="button" value="'.$langs->trans('Add').'">';
print '</td></tr></table>'; print '</td></tr></table>';
print '</form>'; print '</form>';
print "<br>"; }
else
// Action (a mettre dans actions) {
if ($action == 'adduserldap') $message='<div class="error">'.$ldap->error.'</div>';
{
$selecteduser = $_POST['users'];
$justthese = array( $login,
$name,
$firstname,
$mail,
$phone,
$fax,
$mobile,
$SID);
$selectedUser = $ldap->getUsers($selecteduser, $justthese);
if ($selectedUser)
{
foreach ($selectedUser as $key => $attribute)
{
$ldap_nom = utf8_decode($attribute[$name]?$attribute[$name]:'');
$ldap_prenom = utf8_decode($attribute[$firstname]?$attribute[$firstname]:'');
$ldap_login = utf8_decode($attribute[$login]?$attribute[$login]:'');
$ldap_phone = utf8_decode($attribute[$phone]?$attribute[$phone]:'');
$ldap_fax = utf8_decode($attribute[$fax]?$attribute[$fax]:'');
$ldap_mobile = utf8_decode($attribute[$mobile]?$attribute[$mobile]:'');
$ldap_mail = utf8_decode($attribute[$mail]?$attribute[$mail]:'');
$ldap_SID = $attribute[$SID];
//$ldap_SID = bin2hex($attribute[$SID]);
}
}
}
} }
} }
else else
{ {
print $ldap->ldapErrorCode; $message='<div class="error">'.$ldap->error.'</div>';
print $ldap->ldapErrorText;
}
if (! $ldap->close())
{
print $ldap->ldapErrorCode;
print $ldap->ldapErrorText;
} }
print "</td></tr></table>";
print "\n<!-- Form liste LDAP fin -->\n\n";
print '<br>';
} }
print '<form action="fiche.php" method="post" name="createuser">'; print '<form action="fiche.php" method="post" name="createuser">';
@ -667,6 +628,7 @@ else
$fuser->fetch(); $fuser->fetch();
// Connexion ldap // Connexion ldap
// pour recuperer passDoNotExpire et userChangePassNextLogon
if ($conf->ldap->enabled && $fuser->ldap_sid) if ($conf->ldap->enabled && $fuser->ldap_sid)
{ {
$ldap = new Ldap(); $ldap = new Ldap();
@ -676,21 +638,21 @@ else
$entries = $ldap->fetch($fuser->login); $entries = $ldap->fetch($fuser->login);
if (! $entries) if (! $entries)
{ {
$message .= $ldap->ldapErrorCode." - ".$ldap->ldapErrorText; $message .= $ldap->error;
} }
}
//On vérifie les options du compte //On vérifie les options du compte
foreach ($ldap->uacf as $key => $statut) foreach ($ldap->uacf as $key => $statut)
{ {
if ($key == 65536) if ($key == 65536)
{ {
$passDoNotExpire = $langs->trans("LdapUacf_".$statut); $passDoNotExpire = $langs->trans("LdapUacf_".$statut);
} }
} }
if ($ldap->pwdlastset == 0 && $ldap->pwdlastset != "") if ($ldap->pwdlastset == 0 && $ldap->pwdlastset != "")
{ {
$userChangePassNextLogon = $langs->trans("UserMustChangePassNextLogon"); $userChangePassNextLogon = $langs->trans("UserMustChangePassNextLogon");
}
} }
} }

View File

@ -45,6 +45,41 @@ if ($user->societe_id > 0)
$socid = $user->societe_id; $socid = $user->societe_id;
} }
$fuser = new User($db, $_GET["id"]);
$fuser->fetch();
$fuser->getrights();
/*
* Actions
*/
if ($_GET["action"] == 'dolibarr2ldap')
{
$message="";
$db->begin();
$ldap=new Ldap();
$ldap->connect_bind();
$info=$fuser->_load_ldap_info();
$dn=$fuser->_load_ldap_dn($info);
$ret=$ldap->update($dn,$info,$user); // Marche en creation LDAP et mise a jour
if ($ret >= 0)
{
$message.='<div class="ok">'.$langs->trans("UserSynchronized").'</div>';
$db->commit();
}
else
{
$message.='<div class="error">'.$ldap->error.'</div>';
$db->rollback();
}
}
/* /*
* Affichage page * Affichage page
@ -54,10 +89,6 @@ llxHeader();
$form = new Form($db); $form = new Form($db);
$fuser = new User($db, $_GET["id"]);
$fuser->fetch();
$fuser->getrights();
/* /*
* Affichage onglets * Affichage onglets
@ -117,12 +148,29 @@ print '</table>';
print '</div>'; print '</div>';
print '<br>';
if ($message) { print $message; }
/*
* Barre d'actions
*/
print '<div class="tabsAction">';
if ($conf->global->LDAP_SYNCHRO_ACTIVE == 'dolibarr2ldap')
{
print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?id='.$fuser->id.'&amp;action=dolibarr2ldap">'.$langs->trans("ForceSynchronize").'</a>';
}
print "</div>\n";
print "<br>\n";
print_titre($langs->trans("LDAPInformationsForThisUser"));
// Affichage attributs LDAP // Affichage attributs LDAP
print_titre($langs->trans("LDAPInformationsForThisUser"));
print '<table width="100%" class="noborder">'; print '<table width="100%" class="noborder">';
print '<tr class="liste_titre">'; print '<tr class="liste_titre">';
@ -139,7 +187,11 @@ if ($result > 0)
$dn=$fuser->_load_ldap_dn($info,1); $dn=$fuser->_load_ldap_dn($info,1);
$search = "(".$fuser->_load_ldap_dn($info,2).")"; $search = "(".$fuser->_load_ldap_dn($info,2).")";
$result=$ldap->search($dn,$search); $result=$ldap->search($dn,$search);
if ($result < 0)
{
dolibarr_print_error($db,$ldap->error);
}
// Affichage arbre // Affichage arbre
if (sizeof($result)) if (sizeof($result))
{ {