From e83f035887e3a463568465673ae92f365788c2a5 Mon Sep 17 00:00:00 2001
From: alecpl <alec@alec.pl>
Date: Sat, 29 Aug 2009 14:41:17 -0400
Subject: [PATCH] - Fix LDAP contact update when RDN field is changed (#1485788)
---
program/include/rcube_ldap.php | 31 +++++++++++++++++++++----------
1 files changed, 21 insertions(+), 10 deletions(-)
diff --git a/program/include/rcube_ldap.php b/program/include/rcube_ldap.php
index 37edca7..b13e883 100644
--- a/program/include/rcube_ldap.php
+++ b/program/include/rcube_ldap.php
@@ -480,32 +480,43 @@
} // end if
} // end foreach
- // Update the entry as required.
$dn = base64_decode($id);
+
+ // Update the entry as required.
if (!empty($deletedata)) {
// Delete the fields.
- $res = ldap_mod_del($this->conn, $dn, $deletedata);
- if ($res === FALSE) {
+ if (!ldap_mod_del($this->conn, $dn, $deletedata))
return false;
- } // end if
} // end if
if (!empty($replacedata)) {
+ // Handle RDN change
+ if ($replacedata[$this->prop['LDAP_rdn']]) {
+ $newdn = $this->prop['LDAP_rdn'].'='.$replacedata[$this->prop['LDAP_rdn']].','.$this->prop['base_dn'];
+ if ($dn != $newdn) {
+ $newrdn = $this->prop['LDAP_rdn'].'='.$replacedata[$this->prop['LDAP_rdn']];
+ unset($replacedata[$this->prop['LDAP_rdn']]);
+ }
+ }
// Replace the fields.
- $res = ldap_mod_replace($this->conn, $dn, $replacedata);
- if ($res === FALSE) {
- return false;
+ if (!empty($replacedata)) {
+ if (!ldap_mod_replace($this->conn, $dn, $replacedata))
+ return false;
} // end if
} // end if
if (!empty($newdata)) {
// Add the fields.
- $res = ldap_mod_add($this->conn, $dn, $newdata);
- if ($res === FALSE) {
+ if (!ldap_mod_add($this->conn, $dn, $newdata))
return false;
- } // end if
} // end if
+ // Handle RDN change
+ if (!empty($newrdn)) {
+ if (@ldap_rename($this->conn, $dn, $newrdn, NULL, TRUE))
+ return base64_encode($newdn);
+ }
+
return true;
}
--
Gitblit v1.9.1