--- 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 {