--- ldap.php 2009-10-07 16:16:38.000000000 +0000
+++ ldap.php.mod 2010-10-25 06:59:40.000000000 +0000
@@ -350,7 +350,7 @@
$filter = $this->_buildObjectclassFilter();
$oldres = @ldap_read($this->_ds, String::convertCharset($object_id, NLS::getCharset(), $this->_params['charset']), $filter, array_merge(array_keys($attributes), array('objectclass')));
$info = ldap_get_attributes($this->_ds, ldap_first_entry($this->_ds, $oldres));
-
+
if ($this->_params['version'] == 3 &&
String::lower(str_replace(array(',', '"'), array('\\2C', ''), $this->_makeKey($attributes))) !=
String::lower(str_replace(',', '\\2C', $object_id))) {
@@ -390,6 +390,10 @@
}
unset($attributes[$key]);
}
+ elseif (isset($attributes[$key])&&
+ $var[0] == $attributes[$key]) {
+ unset($attributes[$key]);
+ }
}
unset($attributes[String::lower($object_key)]);
@@ -397,10 +401,15 @@
$attributes = array_filter($attributes, array($this, '_emptyAttributeFilter'));
/* Modify objectclass if old one is outdated. */
+ $old_classes = array_map('strtolower',$info['objectclass']);
+ array_shift($old_classes);
$attributes['objectclass'] = array_unique(array_map('strtolower', array_merge($info['objectclass'], $this->_params['objectclass'])));
unset($attributes['objectclass']['count']);
$attributes['objectclass'] = array_values($attributes['objectclass']);
+ if((!array_diff($old_classes, $attributes['objectclass']))) {
+ unset($attributes['objectclass']);
+ }
if (!@ldap_modify($this->_ds, String::convertCharset($object_id, NLS::getCharset(), $this->_params['charset']), $attributes)) {
return PEAR::raiseError(sprintf(_("Modify failed: (%s) %s"), ldap_errno($this->_ds), ldap_error($this->_ds)));
} else {