From 0afc6a81aac0e89d733fedc413c65889fcd1a2df Mon Sep 17 00:00:00 2001
From: matthew_swift <matthew_swift@localhost>
Date: Fri, 19 Jun 2009 11:26:17 +0000
Subject: [PATCH] Fix broken ldapSubentry filter detection and re-enable translateRubEntryTest.

---
 opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/PersistentServerStateTest.java |    2 
 opendj-sdk/opends/src/server/org/opends/server/core/SearchOperationBasis.java                                            |   67 +++++++++++++++++----------------
 2 files changed, 35 insertions(+), 34 deletions(-)

diff --git a/opendj-sdk/opends/src/server/org/opends/server/core/SearchOperationBasis.java b/opendj-sdk/opends/src/server/org/opends/server/core/SearchOperationBasis.java
index 118cfa0..e85f50e 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/core/SearchOperationBasis.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/core/SearchOperationBasis.java
@@ -1464,43 +1464,44 @@
    */
   private void checkFilterForLDAPSubEntry(SearchFilter filter, int depth)
   {
+    // Paranoid check to avoid recursion deep enough to provoke
+    // the stack overflow. This should never happen because if
+    // a given filter is too nested SearchFilter exception gets
+    // raised long before this method is invoked.
+    if (depth >= MAX_NESTED_FILTER_DEPTH)
+    {
+      if (debugEnabled())
+      {
+        TRACER.debugError("Exceeded maximum filter depth");
+      }
+      return;
+    }
+
     switch (filter.getFilterType())
     {
-      case EQUALITY:
-      case AND:
-      case OR:
-        for (SearchFilter f : filter.getFilterComponents())
+    case EQUALITY:
+      if (filter.getAttributeType().isObjectClassType())
+      {
+        AttributeValue v = filter.getAssertionValue();
+        if (toLowerCase(v.getValue().toString()).equals("ldapsubentry"))
         {
-          if (f.getFilterType() == FilterType.EQUALITY)
-          {
-            if (f.getAttributeType().isObjectClassType())
-            {
-              AttributeValue v = f.getAssertionValue();
-              if (toLowerCase(v.getValue().toString(
-                  )).equals("ldapsubentry"))
-              {
-                setReturnLDAPSubentries(true);
-                return;
-              }
-            }
-          }
-          else
-          {
-            // Paranoid check to avoid recursion deep enough to provoke
-            // the stack overflow. This should never happen because if
-            // a given filter is too nested SearchFilter exception gets
-            // raised long before this method is invoked.
-            if (depth >= MAX_NESTED_FILTER_DEPTH)
-            {
-              if (debugEnabled())
-              {
-                TRACER.debugError("Exceeded maximum filter depth");
-              }
-              return;
-            }
-            checkFilterForLDAPSubEntry(f, depth + 1);
-          }
+          setReturnLDAPSubentries(true);
         }
+      }
+      break;
+    case AND:
+    case OR:
+      for (SearchFilter f : filter.getFilterComponents())
+      {
+        checkFilterForLDAPSubEntry(f, depth + 1);
+
+        if (isReturnLDAPSubentries())
+        {
+          // No point in continuing.
+          break;
+        }
+      }
+      break;
     }
   }
 }
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/PersistentServerStateTest.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/PersistentServerStateTest.java
index c1dde0c..b5fbf97 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/PersistentServerStateTest.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/PersistentServerStateTest.java
@@ -119,7 +119,7 @@
    * @throws  Exception  If an unexpected problem occurs.
    */
   @SuppressWarnings("unchecked")
-  @Test(enabled = false)
+  @Test
   public void translateRuvEntryTest()
          throws Exception
   {

--
Gitblit v1.10.0