From: Pierangelo Masarati Date: Mon, 1 Oct 2001 22:12:23 +0000 (+0000) Subject: fix candidate selection based on scope X-Git-Tag: LDBM_PRE_GIANT_RWLOCK~1023 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=1c010c59a19f5d2a8acfd591f69cc7f975709174;p=openldap fix candidate selection based on scope --- diff --git a/servers/slapd/back-meta/search.c b/servers/slapd/back-meta/search.c index 92c0b8fa54..f861fb6499 100644 --- a/servers/slapd/back-meta/search.c +++ b/servers/slapd/back-meta/search.c @@ -225,13 +225,26 @@ meta_back_search( case LDAP_SCOPE_SUBTREE: /* * make the target suffix the new base + * FIXME: this is very forgiving, because + * illegal bases may be turned into + * the suffix of the target. */ - realbase = li->targets[ i ]->suffix; + if ( dn_issuffix( li->targets[ i ]->suffix, + nbase ) ) { + realbase = li->targets[ i ]->suffix; + } else { + /* + * this target is no longer candidate + */ + lsc[ 0 ]->candidate = META_NOT_CANDIDATE; + continue; + } break; case LDAP_SCOPE_ONELEVEL: if ( is_one_level_rdn( li->targets[ i ]->suffix, - suffixlen-nbaselen-1) ) { + suffixlen-nbaselen-1) + && dn_issuffix( li->targets[ i ]->suffix, nbase ) ) { /* * if there is exactly one level, * make the target suffix the new @@ -248,10 +261,6 @@ meta_back_search( */ lsc[ 0 ]->candidate = META_NOT_CANDIDATE; continue; - /* - rc = meta_back_op_result(lc, op); - goto finish; - */ } }