Added functions in LDAP class for manage attributes in entry
This commit is contained in:
parent
b2afe06d71
commit
9badafe497
@ -622,159 +622,6 @@ class Ldap
|
||||
if ($result) return 1;
|
||||
return -1;
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Add a LDAP attribute in entry
|
||||
* \param dn DN entry key
|
||||
* \param info Attributes array
|
||||
* \param user Objet user that create
|
||||
* \return int <0 if KO, >0 if OK
|
||||
* \remarks Ldap object connect and bind must have been done
|
||||
*/
|
||||
function add_attribute($dn, $info, $user)
|
||||
{
|
||||
global $conf;
|
||||
|
||||
dol_syslog("Ldap::add_attribute dn=".$dn." info=".join(',',$info));
|
||||
|
||||
// Check parameters
|
||||
if (! $this->connection)
|
||||
{
|
||||
$this->error="NotConnected";
|
||||
return -2;
|
||||
}
|
||||
if (! $this->bind)
|
||||
{
|
||||
$this->error="NotConnected";
|
||||
return -3;
|
||||
}
|
||||
|
||||
// Encode to LDAP page code
|
||||
$dn=$this->convFromOutputCharset($dn,$this->ldapcharset);
|
||||
foreach($info as $key => $val)
|
||||
{
|
||||
if (! is_array($val)) $info[$key]=$this->convFromOutputCharset($val,$this->ldapcharset);
|
||||
}
|
||||
|
||||
$this->dump($dn,$info);
|
||||
|
||||
//print_r($info);
|
||||
$result=@ldap_mod_add($this->connection, $dn, $info);
|
||||
|
||||
if ($result)
|
||||
{
|
||||
dol_syslog("Ldap::add_attribute successfull", LOG_DEBUG);
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->error=@ldap_error($this->connection);
|
||||
dol_syslog("Ldap::add_attribute failed: ".$this->error, LOG_ERR);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Replace a LDAP attribute in entry
|
||||
* \param dn DN entry key
|
||||
* \param info Attributes array
|
||||
* \param user Objet user that create
|
||||
* \return int <0 if KO, >0 if OK
|
||||
* \remarks Ldap object connect and bind must have been done
|
||||
*/
|
||||
function replace_attribute($dn, $info, $user)
|
||||
{
|
||||
global $conf;
|
||||
|
||||
dol_syslog("Ldap::replace_attribute dn=".$dn." info=".join(',',$info));
|
||||
|
||||
// Check parameters
|
||||
if (! $this->connection)
|
||||
{
|
||||
$this->error="NotConnected";
|
||||
return -2;
|
||||
}
|
||||
if (! $this->bind)
|
||||
{
|
||||
$this->error="NotConnected";
|
||||
return -3;
|
||||
}
|
||||
|
||||
// Encode to LDAP page code
|
||||
$dn=$this->convFromOutputCharset($dn,$this->ldapcharset);
|
||||
foreach($info as $key => $val)
|
||||
{
|
||||
if (! is_array($val)) $info[$key]=$this->convFromOutputCharset($val,$this->ldapcharset);
|
||||
}
|
||||
|
||||
$this->dump($dn,$info);
|
||||
|
||||
//print_r($info);
|
||||
$result=@ldap_mod_replace($this->connection, $dn, $info);
|
||||
|
||||
if ($result)
|
||||
{
|
||||
dol_syslog("Ldap::replace_attribute successfull", LOG_DEBUG);
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->error=@ldap_error($this->connection);
|
||||
dol_syslog("Ldap::replace_attribute failed: ".$this->error, LOG_ERR);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Delete a LDAP attribute in entry
|
||||
* \param dn DN entry key
|
||||
* \param info Attributes array
|
||||
* \param user Objet user that create
|
||||
* \return int <0 if KO, >0 if OK
|
||||
* \remarks Ldap object connect and bind must have been done
|
||||
*/
|
||||
function delete_attribute($dn, $info, $user)
|
||||
{
|
||||
global $conf;
|
||||
|
||||
dol_syslog("Ldap::delete_attribute dn=".$dn." info=".join(',',$info));
|
||||
|
||||
// Check parameters
|
||||
if (! $this->connection)
|
||||
{
|
||||
$this->error="NotConnected";
|
||||
return -2;
|
||||
}
|
||||
if (! $this->bind)
|
||||
{
|
||||
$this->error="NotConnected";
|
||||
return -3;
|
||||
}
|
||||
|
||||
// Encode to LDAP page code
|
||||
$dn=$this->convFromOutputCharset($dn,$this->ldapcharset);
|
||||
foreach($info as $key => $val)
|
||||
{
|
||||
if (! is_array($val)) $info[$key]=$this->convFromOutputCharset($val,$this->ldapcharset);
|
||||
}
|
||||
|
||||
$this->dump($dn,$info);
|
||||
|
||||
//print_r($info);
|
||||
$result=@ldap_mod_del($this->connection, $dn, $info);
|
||||
|
||||
if ($result)
|
||||
{
|
||||
dol_syslog("Ldap::delete_attribute successfull", LOG_DEBUG);
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->error=@ldap_error($this->connection);
|
||||
dol_syslog("Ldap::delete_attribute failed: ".$this->error, LOG_ERR);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Build a LDAP message
|
||||
@ -850,10 +697,207 @@ class Ldap
|
||||
|
||||
|
||||
// 2.4 Attribute methods -----------------------------------------------------
|
||||
|
||||
/**
|
||||
* \brief Add a LDAP attribute in entry
|
||||
* \param dn DN entry key
|
||||
* \param info Attributes array
|
||||
* \param user Objet user that create
|
||||
* \return int <0 if KO, >0 if OK
|
||||
* \remarks Ldap object connect and bind must have been done
|
||||
*/
|
||||
function addAttribute($dn, $info, $user)
|
||||
{
|
||||
global $conf;
|
||||
|
||||
dol_syslog("Ldap::addAttribute dn=".$dn." info=".join(',',$info));
|
||||
|
||||
// Check parameters
|
||||
if (! $this->connection)
|
||||
{
|
||||
$this->error="NotConnected";
|
||||
return -2;
|
||||
}
|
||||
if (! $this->bind)
|
||||
{
|
||||
$this->error="NotConnected";
|
||||
return -3;
|
||||
}
|
||||
|
||||
// Encode to LDAP page code
|
||||
$dn=$this->convFromOutputCharset($dn,$this->ldapcharset);
|
||||
foreach($info as $key => $val)
|
||||
{
|
||||
if (! is_array($val)) $info[$key]=$this->convFromOutputCharset($val,$this->ldapcharset);
|
||||
}
|
||||
|
||||
$this->dump($dn,$info);
|
||||
|
||||
//print_r($info);
|
||||
$result=@ldap_mod_add($this->connection, $dn, $info);
|
||||
|
||||
if ($result)
|
||||
{
|
||||
dol_syslog("Ldap::add_attribute successfull", LOG_DEBUG);
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->error=@ldap_error($this->connection);
|
||||
dol_syslog("Ldap::add_attribute failed: ".$this->error, LOG_ERR);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Update a LDAP attribute in entry
|
||||
* \param dn DN entry key
|
||||
* \param info Attributes array
|
||||
* \param user Objet user that create
|
||||
* \return int <0 if KO, >0 if OK
|
||||
* \remarks Ldap object connect and bind must have been done
|
||||
*/
|
||||
function updateAttribute($dn, $info, $user)
|
||||
{
|
||||
global $conf;
|
||||
|
||||
dol_syslog("Ldap::updateAttribute dn=".$dn." info=".join(',',$info));
|
||||
|
||||
// Check parameters
|
||||
if (! $this->connection)
|
||||
{
|
||||
$this->error="NotConnected";
|
||||
return -2;
|
||||
}
|
||||
if (! $this->bind)
|
||||
{
|
||||
$this->error="NotConnected";
|
||||
return -3;
|
||||
}
|
||||
|
||||
// Encode to LDAP page code
|
||||
$dn=$this->convFromOutputCharset($dn,$this->ldapcharset);
|
||||
foreach($info as $key => $val)
|
||||
{
|
||||
if (! is_array($val)) $info[$key]=$this->convFromOutputCharset($val,$this->ldapcharset);
|
||||
}
|
||||
|
||||
$this->dump($dn,$info);
|
||||
|
||||
//print_r($info);
|
||||
$result=@ldap_mod_replace($this->connection, $dn, $info);
|
||||
|
||||
if ($result)
|
||||
{
|
||||
dol_syslog("Ldap::updateAttribute successfull", LOG_DEBUG);
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->error=@ldap_error($this->connection);
|
||||
dol_syslog("Ldap::updateAttribute failed: ".$this->error, LOG_ERR);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Delete a LDAP attribute in entry
|
||||
* \param dn DN entry key
|
||||
* \param info Attributes array
|
||||
* \param user Objet user that create
|
||||
* \return int <0 if KO, >0 if OK
|
||||
* \remarks Ldap object connect and bind must have been done
|
||||
*/
|
||||
function deleteAttribute($dn, $info, $user)
|
||||
{
|
||||
global $conf;
|
||||
|
||||
dol_syslog("Ldap::deleteAttribute dn=".$dn." info=".join(',',$info));
|
||||
|
||||
// Check parameters
|
||||
if (! $this->connection)
|
||||
{
|
||||
$this->error="NotConnected";
|
||||
return -2;
|
||||
}
|
||||
if (! $this->bind)
|
||||
{
|
||||
$this->error="NotConnected";
|
||||
return -3;
|
||||
}
|
||||
|
||||
// Encode to LDAP page code
|
||||
$dn=$this->convFromOutputCharset($dn,$this->ldapcharset);
|
||||
foreach($info as $key => $val)
|
||||
{
|
||||
if (! is_array($val)) $info[$key]=$this->convFromOutputCharset($val,$this->ldapcharset);
|
||||
}
|
||||
|
||||
$this->dump($dn,$info);
|
||||
|
||||
//print_r($info);
|
||||
$result=@ldap_mod_del($this->connection, $dn, $info);
|
||||
|
||||
if ($result)
|
||||
{
|
||||
dol_syslog("Ldap::deleteAttribute successfull", LOG_DEBUG);
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->error=@ldap_error($this->connection);
|
||||
dol_syslog("Ldap::deleteAttribute failed: ".$this->error, LOG_ERR);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an array containing attributes and values for first record
|
||||
*/
|
||||
function getAttribute($dn,$filter)
|
||||
{
|
||||
print $dn.'<br>';
|
||||
|
||||
// Check parameters
|
||||
if (! $this->connection)
|
||||
{
|
||||
$this->error="NotConnected";
|
||||
return -2;
|
||||
}
|
||||
if (! $this->bind)
|
||||
{
|
||||
$this->error="NotConnected";
|
||||
return -3;
|
||||
}
|
||||
|
||||
$search = ldap_search($this->connection,$dn,$filter);
|
||||
|
||||
// Only one entry should ever be returned
|
||||
$entry = ldap_first_entry($this->connection, $search);
|
||||
|
||||
if (!$entry)
|
||||
{
|
||||
$this->ldapErrorCode = -1;
|
||||
$this->ldapErrorText = "Couldn't find entry";
|
||||
return false; // Couldn't find entry...
|
||||
}
|
||||
|
||||
// Get values
|
||||
if (! $values = ldap_get_attributes( $this->connection, $entry))
|
||||
{
|
||||
$this->ldapErrorCode = ldap_errno( $this->connection);
|
||||
$this->ldapErrorText = ldap_error( $this->connection);
|
||||
return false; // No matching attributes
|
||||
}
|
||||
|
||||
// Return an array containing the attributes.
|
||||
return $values;
|
||||
}
|
||||
|
||||
/**
|
||||
* 2.4.1 : Returns an array containing values for an attribute and for first record matching filterrecord
|
||||
*/
|
||||
function getAttribute($filterrecord,$attribute)
|
||||
* Returns an array containing values for an attribute and for first record matching filterrecord
|
||||
*/
|
||||
function getAttributeValues($filterrecord,$attribute)
|
||||
{
|
||||
$attributes[0] = $attribute;
|
||||
|
||||
@ -885,12 +929,11 @@ class Ldap
|
||||
return $values;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* \brief Returns an array containing a details of elements
|
||||
* \param $search Valeur champ cl<EFBFBD> recherch<EFBFBD>, sinon '*' pour tous.
|
||||
* \param $search Valeur champ cle recherche, sinon '*' pour tous.
|
||||
* \param $userDn DN (Ex: ou=adherents,ou=people,dc=parinux,dc=org)
|
||||
* \param $useridentifier Nom du champ cl<EFBFBD> (Ex: uid)
|
||||
* \param $useridentifier Nom du champ cle (Ex: uid)
|
||||
* \param $attributeArray Array of fields required (Ex: sn,userPassword)
|
||||
* \param $activefilter 1=utilise le champ this->filter comme filtre
|
||||
* \return array Array of [id_record][ldap_field]=value
|
||||
@ -946,7 +989,7 @@ class Ldap
|
||||
|
||||
$info = @ldap_get_entries($this->connection, $this->result);
|
||||
|
||||
// Warning: Dans info, les noms d'attributs sont en minuscule meme si pass<EFBFBD>
|
||||
// Warning: Dans info, les noms d'attributs sont en minuscule meme si passe
|
||||
// a ldap_search en majuscule !!!
|
||||
//print_r($info);
|
||||
|
||||
@ -964,7 +1007,7 @@ class Ldap
|
||||
$keyattributelower=strtolower($attributeArray[$j]);
|
||||
//print " Param ".$attributeArray[$j]."=".$info[$i][$keyattributelower][0]."<br>\n";
|
||||
|
||||
//permet de r<EFBFBD>cup<EFBFBD>rer le SID avec Active Directory
|
||||
//permet de recuperer le SID avec Active Directory
|
||||
if ($this->serverType == "activedirectory" && $keyattributelower == "objectsid")
|
||||
{
|
||||
$objectsid = $this->getObjectSid($recordid);
|
||||
@ -995,7 +1038,7 @@ class Ldap
|
||||
|
||||
|
||||
/**
|
||||
* R<EFBFBD>cup<EFBFBD>re le SID de l'utilisateur
|
||||
* Recupere le SID de l'utilisateur
|
||||
* ldapuser. le login de l'utilisateur
|
||||
* Indispensable pour Active Directory
|
||||
*/
|
||||
@ -1071,11 +1114,11 @@ class Ldap
|
||||
|
||||
/**
|
||||
* \brief Fonction de recherche avec filtre
|
||||
* \remarks this->connection doit etre d<EFBFBD>fini donc la methode bind ou bindauth doit avoir deja <EFBFBD>t<EFBFBD> appel<EFBFBD>e
|
||||
* \remarks this->connection doit etre defini donc la methode bind ou bindauth doit avoir deja ete appelee
|
||||
* \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 (cl<EFBFBD> en minuscule-valeur)
|
||||
* \remarks Ne pas utiliser pour recherche d'une liste donn<EFBFBD>e de propri<EFBFBD>t<EFBFBD>s
|
||||
* \return array Tableau des reponses (cle en minuscule-valeur)
|
||||
* \remarks Ne pas utiliser pour recherche d'une liste donnee de proprietes
|
||||
* car conflit majuscule-minuscule. A n'utiliser que pour les pages
|
||||
* 'Fiche LDAP' qui affiche champ lisibles par defaut.
|
||||
*/
|
||||
@ -1108,8 +1151,8 @@ class Ldap
|
||||
|
||||
|
||||
/**
|
||||
* \brief R<EFBFBD>cup<EFBFBD>re les attributs de l'utilisateur
|
||||
* \param $user Utilisateur ldap <EFBFBD> lire
|
||||
* \brief Recupere les attributs de l'utilisateur
|
||||
* \param $user Utilisateur ldap a lire
|
||||
* \return int >0 if ok, <0 if ko
|
||||
*/
|
||||
function fetch($user)
|
||||
@ -1146,7 +1189,7 @@ class Ldap
|
||||
|
||||
if (!$result)
|
||||
{
|
||||
// Si pas de r<EFBFBD>sultat on cherche dans le domaine
|
||||
// Si pas de resultat on cherche dans le domaine
|
||||
$searchDN = $this->domain;
|
||||
$i++;
|
||||
}
|
||||
@ -1233,10 +1276,10 @@ class Ldap
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief UserAccountControl Flgs to more human understandable form...
|
||||
*
|
||||
*/
|
||||
/**
|
||||
* \brief UserAccountControl Flgs to more human understandable form...
|
||||
*
|
||||
*/
|
||||
function parseUACF($uacf) {
|
||||
//All flags array
|
||||
$flags = array( "TRUSTED_TO_AUTH_FOR_DELEGATION" => 16777216,
|
||||
@ -1274,10 +1317,10 @@ class Ldap
|
||||
return($retval);
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief SamAccountType value to text
|
||||
*
|
||||
*/
|
||||
/**
|
||||
* \brief SamAccountType value to text
|
||||
*
|
||||
*/
|
||||
function parseSAT($samtype) {
|
||||
$stypes = array( 805306368 => "NORMAL_ACCOUNT",
|
||||
805306369 => "WORKSTATION_TRUST",
|
||||
@ -1299,10 +1342,10 @@ class Ldap
|
||||
return($retval);
|
||||
}
|
||||
|
||||
/**
|
||||
* \Parse GroupType value to text
|
||||
*
|
||||
*/
|
||||
/**
|
||||
* \Parse GroupType value to text
|
||||
*
|
||||
*/
|
||||
function parseGT($grouptype) {
|
||||
$gtypes = array( -2147483643 => "SECURITY_BUILTIN_LOCAL_GROUP",
|
||||
-2147483644 => "SECURITY_DOMAIN_LOCAL_GROUP",
|
||||
@ -1324,7 +1367,7 @@ class Ldap
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
/**
|
||||
* \brief Convertit le temps ActiveDirectory en Unix timestamp
|
||||
* \param string AD time to convert
|
||||
* \return string Unix timestamp
|
||||
|
||||
Loading…
Reference in New Issue
Block a user