mirror of https://github.com/OpenIdentityPlatform/OpenDJ.git

matthew_swift
14.18.2008 178e8824be562ee882211cfb0d1eff69b8d5657a
Fix issues 2906 and 2909. Referrals not returned for non-base object searches where the base DN refers to a referral entry.
1 files modified
37 ■■■■ changed files
opends/src/server/org/opends/server/backends/jeb/EntryContainer.java 37 ●●●● patch | view | raw | blame | history
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)