From 99b80cd414fd73af73dfa07be202fd32e9bc498d Mon Sep 17 00:00:00 2001
From: Matthew Swift <matthew.swift@forgerock.com>
Date: Wed, 25 Nov 2015 12:45:54 +0000
Subject: [PATCH] OPENDJ-2404: add back support for modify DN operations which just change case

---
 opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/EntryContainer.java               |    5 ++++-
 opendj-server-legacy/src/test/java/org/opends/server/backends/pluggable/PluggableBackendImplTestCase.java |   18 ++++++++++++++++++
 2 files changed, 22 insertions(+), 1 deletions(-)

diff --git a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/EntryContainer.java b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/EntryContainer.java
index 895b0ed..d67bf45 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/EntryContainer.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/EntryContainer.java
@@ -2023,7 +2023,10 @@
                                            getMatchedDN(txn, newSuperiorDN),
                                            null);
             }
-            if (dn2id.get(txn, newTargetDN) != null)
+
+            // Check that an entry with the new name does not already exist, but take care to handle the case where
+            // the user is renaming the entry with an equivalent name, e.g. "cn=matt" to "cn=Matt".
+            if (!oldTargetDN.equals(newTargetDN) && dn2id.get(txn, newTargetDN) != null)
             {
               throw new DirectoryException(ResultCode.ENTRY_ALREADY_EXISTS,
                                            ERR_MODIFYDN_ALREADY_EXISTS.get(newTargetDN));
diff --git a/opendj-server-legacy/src/test/java/org/opends/server/backends/pluggable/PluggableBackendImplTestCase.java b/opendj-server-legacy/src/test/java/org/opends/server/backends/pluggable/PluggableBackendImplTestCase.java
index 7782617..3fe8ba3 100644
--- a/opendj-server-legacy/src/test/java/org/opends/server/backends/pluggable/PluggableBackendImplTestCase.java
+++ b/opendj-server-legacy/src/test/java/org/opends/server/backends/pluggable/PluggableBackendImplTestCase.java
@@ -692,6 +692,24 @@
     assertEquals(dbEntry.getName(), prevDN, "Original entry has not been renamed");
   }
 
+  @Test(description = "OPENDJ-2404")
+  public void testRenameEntrySameDNDifferentCase() throws Exception
+  {
+    DN prevDN = DN.valueOf("uid=user.0,ou=People," + testBaseDN);
+    DN newDN = DN.valueOf("uid=USER.0,ou=People," + testBaseDN);
+    Entry renameEntry = backend.getEntry(prevDN).duplicate(false);
+
+    renameEntry.setDN(newDN);
+    backend.renameEntry(prevDN, renameEntry, null);
+    Entry dbEntry = backend.getEntry(newDN);
+    assertEquals(dbEntry.getName().rdn().toString(), "uid=USER.0");
+
+    renameEntry.setDN(prevDN);
+    backend.renameEntry(newDN, renameEntry, null);
+    dbEntry = backend.getEntry(prevDN);
+    assertEquals(dbEntry.getName().rdn().toString(), "uid=user.0");
+  }
+
   @Test
   public void testDeleteEntry() throws Exception
   {

--
Gitblit v1.10.0