From 19898792d82508306ccfdedbd5482068b4f7767e Mon Sep 17 00:00:00 2001
From: Valery Kharseko <vharseko@3a-systems.ru>
Date: Thu, 17 Oct 2024 07:32:58 +0000
Subject: [PATCH] [#90, #432] FIX delete entries in overlapping backends (#434)

---
 opendj-server-legacy/src/main/java/org/opends/server/workflowelement/localbackend/LocalBackendDeleteOperation.java |    5 +++--
 opendj-server-legacy/src/test/java/org/openidentityplatform/opendj/OverlappingBackendTestSuite.java                |   22 ++++++++++++++++++++++
 2 files changed, 25 insertions(+), 2 deletions(-)

diff --git a/opendj-server-legacy/src/main/java/org/opends/server/workflowelement/localbackend/LocalBackendDeleteOperation.java b/opendj-server-legacy/src/main/java/org/opends/server/workflowelement/localbackend/LocalBackendDeleteOperation.java
index 2da5e02..7fb633e 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/workflowelement/localbackend/LocalBackendDeleteOperation.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/workflowelement/localbackend/LocalBackendDeleteOperation.java
@@ -13,6 +13,7 @@
  *
  * Copyright 2008-2009 Sun Microsystems, Inc.
  * Portions Copyright 2011-2016 ForgeRock AS.
+ * Portions Copyright 2022-2024 3A Systems, LLC.
  */
 package org.opends.server.workflowelement.localbackend;
 
@@ -281,8 +282,8 @@
       {
     	  if (dn.isInScopeOf(entryDN, SearchScope.WHOLE_SUBTREE)) {
     		  setResultCodeAndMessageNoInfoDisclosure(entry,ResultCode.NOT_ALLOWED_ON_NONLEAF, ERR_DELETE_HAS_SUB_BACKEND.get(entryDN, dn));
-    	  }
-        return;
+              return;
+  	      }
       }
 
       // Actually perform the delete.
diff --git a/opendj-server-legacy/src/test/java/org/openidentityplatform/opendj/OverlappingBackendTestSuite.java b/opendj-server-legacy/src/test/java/org/openidentityplatform/opendj/OverlappingBackendTestSuite.java
index 4294802..61c3a3c 100644
--- a/opendj-server-legacy/src/test/java/org/openidentityplatform/opendj/OverlappingBackendTestSuite.java
+++ b/opendj-server-legacy/src/test/java/org/openidentityplatform/opendj/OverlappingBackendTestSuite.java
@@ -30,6 +30,7 @@
 import java.util.Set;
 
 import static org.assertj.core.api.Assertions.assertThat;
+import static org.testng.Assert.assertEquals;
 
 @Test(sequential = true)
 public class OverlappingBackendTestSuite extends DirectoryServerTestCase {
@@ -125,5 +126,26 @@
         hasUserRoot(search("o=test"));
         hasUserRoot2(search("o=test"));
         hasUserRoot2(search("ou=eus,o=test"));
+
+        int resultCode = TestCaseUtils.applyModifications(true,
+                "dn: uid=user.1,o=test,ou=es,o=test",
+                "changetype: modify",
+                "add: description",
+                "description: user.1");
+        assertEquals(resultCode, 0);
+
+        resultCode = TestCaseUtils.applyModifications(true,
+                "dn: uid=user.2,o=test,ou=eus,o=test",
+                "changetype: modify",
+                "add: description",
+                "description: user.2");
+        assertEquals(resultCode, 0);
+
+        hasUserRoot(search("o=test"));
+        hasUserRoot2(search("o=test"));
+        hasUserRoot2(search("ou=eus,o=test"));
+
+        TestCaseUtils.deleteEntry(DN.valueOf("uid=user.1,o=test,ou=es,o=test"));
+        TestCaseUtils.deleteEntry(DN.valueOf("uid=user.2,o=test,ou=eus,o=test"));
       }
 }

--
Gitblit v1.10.0