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