From 351cf063fb5777dfb052151e08aa3885d5df81b7 Mon Sep 17 00:00:00 2001 From: Roland Gruber Date: Sun, 6 Oct 2013 14:51:17 +0000 Subject: [PATCH] fix for rename operations --- lam/lib/modules.inc | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/lam/lib/modules.inc b/lam/lib/modules.inc index 3de54cec..72f08957 100644 --- a/lam/lib/modules.inc +++ b/lam/lib/modules.inc @@ -1778,8 +1778,20 @@ class accountContainer { if (strtolower($this->finalDN) != strtolower($this->dn_orig)) { // move existing DN if ($this->dn_orig!='') { + $removeOldRDN = false; + if (isset($attributes[$this->finalDN]['modify'])) { + $attributes[$this->finalDN]['modify'] = array_change_key_case($attributes[$this->finalDN]['modify'], CASE_LOWER); + } + $rdnAttr = strtolower(extractRDNAttribute($this->finalDN)); + if (isset($attributes[$this->finalDN]['modify'][$rdnAttr]) + && (sizeof($attributes[$this->finalDN]['modify'][$rdnAttr]) == 1) + && ($attributes[$this->finalDN]['modify'][$rdnAttr][0] == extractRDNValue($this->finalDN))) { + // remove old RDN if attribute is single valued + $removeOldRDN = true; + unset($attributes[$this->finalDN]['modify'][$this->getRDN($this->finalDN)]); + } logNewMessage(LOG_DEBUG, 'Rename ' . $this->dn_orig . ' to ' . $this->finalDN); - $success = ldap_rename($_SESSION['ldap']->server(), $this->dn_orig, $this->getRDN($this->finalDN), $this->getParentDN($this->finalDN), false); + $success = ldap_rename($_SESSION['ldap']->server(), $this->dn_orig, $this->getRDN($this->finalDN), $this->getParentDN($this->finalDN), $removeOldRDN); if ($success) { logNewMessage(LOG_NOTICE, '[' . $ldapUser .'] Renamed DN ' . $this->dn_orig . " to " . $this->finalDN); }