From 178e8824be562ee882211cfb0d1eff69b8d5657a Mon Sep 17 00:00:00 2001
From: matthew_swift <matthew_swift@localhost>
Date: Thu, 14 Feb 2008 00:18:10 +0000
Subject: [PATCH] Fix issues 2906 and 2909. Referrals not returned for non-base object searches where the base DN refers to a referral entry.

---
 opends/src/server/org/opends/server/backends/jeb/EntryContainer.java |   37 +++++++++++++++++++++++++++----------
 1 files changed, 27 insertions(+), 10 deletions(-)

diff --git a/opends/src/server/org/opends/server/backends/jeb/EntryContainer.java b/opends/src/server/org/opends/server/backends/jeb/EntryContainer.java
index 64757d7..e885246 100644
--- a/opends/src/server/org/opends/server/backends/jeb/EntryContainer.java
+++ b/opends/src/server/org/opends/server/backends/jeb/EntryContainer.java
@@ -906,8 +906,7 @@
       if (baseEntry == null)
       {
         // Check for referral entries above the base entry.
-        dn2uri.targetEntryReferrals(searchOperation.getBaseDN(),
-                                    searchOperation.getScope());
+        dn2uri.targetEntryReferrals(baseDN, searchScope);
 
         Message message = ERR_JEB_SEARCH_NO_SUCH_OBJECT.get(baseDN.toString());
         DN matchedDN = getMatchedDN(baseDN);
@@ -1182,8 +1181,7 @@
       if (baseEntry == null)
       {
         // Check for referral entries above the base entry.
-        dn2uri.targetEntryReferrals(searchOperation.getBaseDN(),
-                                    searchOperation.getScope());
+        dn2uri.targetEntryReferrals(baseDN, searchScope);
 
         Message message = ERR_JEB_SEARCH_NO_SUCH_OBJECT.get(baseDN.toString());
         DN matchedDN = getMatchedDN(baseDN);
@@ -1193,7 +1191,7 @@
 
       if (!manageDsaIT)
       {
-        dn2uri.checkTargetForReferral(baseEntry, searchOperation.getScope());
+        dn2uri.checkTargetForReferral(baseEntry, searchScope);
       }
 
       /*
@@ -1636,17 +1634,36 @@
     if (searchOperation.getEntriesSent() == 0 &&
          searchOperation.getReferencesSent() == 0)
     {
-      // Check for referral entries above the base entry.
-      dn2uri.targetEntryReferrals(searchOperation.getBaseDN(),
-                                  searchOperation.getScope());
-
-      if (!entryExists(baseDN))
+      // Fetch the base entry if it exists.
+      Entry baseEntry = null;
+      try
       {
+        baseEntry = getEntry(baseDN);
+      }
+      catch (Exception e)
+      {
+        if (debugEnabled())
+        {
+          TRACER.debugCaught(DebugLogLevel.ERROR, e);
+        }
+      }
+
+      // The base entry must exist for a successful result.
+      if (baseEntry == null)
+      {
+        // Check for referral entries above the base entry.
+        dn2uri.targetEntryReferrals(baseDN, searchScope);
+
         Message message = ERR_JEB_SEARCH_NO_SUCH_OBJECT.get(baseDN.toString());
         DN matchedDN = getMatchedDN(baseDN);
         throw new DirectoryException(ResultCode.NO_SUCH_OBJECT,
             message, matchedDN, null);
       }
+
+      if (!manageDsaIT)
+      {
+        dn2uri.checkTargetForReferral(baseEntry, searchScope);
+      }
     }
 
     if (pageRequest != null)

--
Gitblit v1.10.0