diff --git a/trunk/includes/addons/LSaddons.samba.php b/trunk/includes/addons/LSaddons.samba.php index dcefbfeb..43283203 100644 --- a/trunk/includes/addons/LSaddons.samba.php +++ b/trunk/includes/addons/LSaddons.samba.php @@ -138,7 +138,9 @@ return; } - $uidNumber = $ldapObject -> attrs[ LS_SAMBA_UIDNUMBER_ATTR ] -> getValue() * 2 + LS_SAMBA_SID_BASE_USER; + $uidnumber_attr_val = $ldapObject -> attrs[ LS_SAMBA_UIDNUMBER_ATTR ] -> getValue(); + $uidnumber_attr_val = $uidnumber_attr_val[0]; + $uidNumber = $uidnumber_attr_val * 2 + LS_SAMBA_SID_BASE_USER; $sambaSID = LS_SAMBA_DOMAIN_SID . '-' . $uidNumber; return ($sambaSID); diff --git a/trunk/includes/class/class.LSldap.php b/trunk/includes/class/class.LSldap.php index d950da45..71ba65a8 100644 --- a/trunk/includes/class/class.LSldap.php +++ b/trunk/includes/class/class.LSldap.php @@ -175,20 +175,35 @@ class LSldap { * @param[in] $object_type string Type de l'objet Ldap * @param[in] $dn string DN de l'entré Ldap * - * @retval ldapentry Un objet ldapentry (PEAR::Net_LDAP2) + * @retval ldapentry|array Un objet ldapentry (PEAR::Net_LDAP2) + * ou un tableau (si c'est une nouvelle entrée): + * Array ( + * 'entry' => ldapentry, + * 'new' => true + * ) */ function getEntry($object_type,$dn) { if(isset($GLOBALS['LSobjects'][$object_type])){ $obj_conf=$GLOBALS['LSobjects'][$object_type]; $entry = $this -> cnx -> getEntry($dn); if (Net_LDAP2::isError($entry)) { - $newentry = new Net_LDAP2_Entry(&$this -> cnx); - $newentry -> dn($dn); - $newentry -> add(array('objectclass' => $obj_conf['objectclass'])); - foreach($obj_conf['attrs'] as $attr_name => $attr_conf) { - $newentry->add(array($attr_name => $attr_conf['default_value'])); + //$newentry = new Net_LDAP2_Entry(&$this -> cnx); + //$newentry -> dn($dn); + //$newentry -> add(array('objectclass' => $obj_conf['objectclass'])); + //foreach($obj_conf['attrs'] as $attr_name => $attr_conf) { + // $newentry->add(array($attr_name => $attr_conf['default_value'])); + //} + $attributes = array( + 'objectclass' => $obj_conf['objectclass'] + ); + foreach($obj_conf['attrs'] as $attr_name => $attr_conf) { + if( isset($attr_conf['default_value']) ) { + $attributes[$attr_name]=$attr_conf['default_value']; + } } - return $newentry; + $newentry = Net_LDAP2_Entry::createFresh($dn,$attributes); + + return array('entry' => $newentry,'new' => true); } else { return $entry; @@ -216,7 +231,16 @@ class LSldap { function update($object_type,$dn,$change) { debug($change); $dropAttr=array(); - if($entry=$this -> getEntry($object_type,$dn)) { + $entry=$this -> getEntry($object_type,$dn); + if (is_array($entry)) { + $new = $entry['new']; + $entry = $entry['entry']; + } + else { + $new = false; + } + + if($entry) { foreach($change as $attrName => $attrVal) { $drop = true; if (is_array($attrVal)) { @@ -238,20 +262,26 @@ class LSldap { } } $entry -> replace($changeData); - debug('change : '.print_r($changeData,true)); - debug('drop : '.print_r($dropAttr,true)); + debug('change :
'.print_r($changeData,true).'
'); + debug('drop :
'.print_r($dropAttr,true).'
'); - $ret = $entry -> update(); - if (!empty($dropAttr)) { - foreach($dropAttr as $attr) { - $entry -> delete($attr); - } - } + if ($new) { + $ret = $this -> cnx -> add($entry); + } + else { + $ret = $entry -> update(); + } + if (Net_LDAP2::isError($ret)) { $GLOBALS['LSerror'] -> addErrorCode(5,$dn); debug('NetLdap-Error : '.$ret->getMessage()); } else { + if (!empty($dropAttr)) { + foreach($dropAttr as $attr) { + $entry -> delete($attr); + } + } return true; } }