From eedeadf17da804ce183262a37c4b7de38222d274 Mon Sep 17 00:00:00 2001
From: Howard Chu <hyc@openldap.org>
Date: Fri, 17 May 2013 09:15:36 -0700
Subject: [PATCH] ITS#7577 more alias deref checks

---
 servers/slapd/back-mdb/dn2id.c  | 8 ++++++++
 servers/slapd/back-mdb/search.c | 2 +-
 2 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/servers/slapd/back-mdb/dn2id.c b/servers/slapd/back-mdb/dn2id.c
index 64c5634e24..22187b957a 100644
--- a/servers/slapd/back-mdb/dn2id.c
+++ b/servers/slapd/back-mdb/dn2id.c
@@ -714,6 +714,14 @@ mdb_idscopes(
 	}
 
 	id = isc->id;
+
+	/* Catch entries from deref'd aliases */
+	x = mdb_id2l_search( isc->scopes, id );
+	if ( x <= isc->scopes[0].mid && isc->scopes[x].mid == id ) {
+		isc->nscope = x;
+		return MDB_SUCCESS;
+	}
+
 	while (id) {
 		if ( !rc ) {
 			key.mv_data = &id;
diff --git a/servers/slapd/back-mdb/search.c b/servers/slapd/back-mdb/search.c
index 0b2057202b..24f3ee4cbc 100644
--- a/servers/slapd/back-mdb/search.c
+++ b/servers/slapd/back-mdb/search.c
@@ -858,7 +858,7 @@ notfound:
 			int i;
 
 			/* child of base, just append RDNs to base->e_name */
-			if ( nsubs < ncand || isc.nscope == 1 ) {
+			if ( nsubs < ncand || isc.scopes[isc.nscope].mid == base->e_id ) {
 				pdn = base->e_name;
 				pndn = base->e_nname;
 			} else {
-- 
GitLab