From: Kurt Zeilenga Date: Wed, 7 Nov 2001 01:26:59 +0000 (+0000) Subject: Import not filter indexing fix as well as LE/GE present filter optimization X-Git-Tag: OPENLDAP_REL_ENG_2_0_19~25 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0970abefe8aa7b077aa18281df5c734681b84129;p=thirdparty%2Fopenldap.git Import not filter indexing fix as well as LE/GE present filter optimization --- diff --git a/servers/slapd/back-ldbm/filterindex.c b/servers/slapd/back-ldbm/filterindex.c index 0695b0a883..8f71ddfef5 100644 --- a/servers/slapd/back-ldbm/filterindex.c +++ b/servers/slapd/back-ldbm/filterindex.c @@ -36,7 +36,7 @@ filter_candidates( Filter *f ) { - ID_BLOCK *result, *tmp1, *tmp2; + ID_BLOCK *result; Debug( LDAP_DEBUG_TRACE, "=> filter_candidates\n", 0, 0, 0 ); @@ -86,12 +86,12 @@ filter_candidates( case LDAP_FILTER_GE: Debug( LDAP_DEBUG_FILTER, "\tGE\n", 0, 0, 0 ); - result = idl_allids( be ); + result = presence_candidates( be, f->f_desc ); break; case LDAP_FILTER_LE: Debug( LDAP_DEBUG_FILTER, "\tLE\n", 0, 0, 0 ); - result = idl_allids( be ); + result = presence_candidates( be, f->f_desc ); break; case LDAP_FILTER_AND: @@ -106,11 +106,13 @@ filter_candidates( case LDAP_FILTER_NOT: Debug( LDAP_DEBUG_FILTER, "\tNOT\n", 0, 0, 0 ); - tmp1 = idl_allids( be ); - tmp2 = filter_candidates( be, f->f_not ); - result = idl_notin( be, tmp1, tmp2 ); - idl_free( tmp2 ); - idl_free( tmp1 ); + /* + * As candidates lists may contain entries which do + * not match the assertion, negation of the inner candidate + * list could result in matching entries be excluded from + * the returned candidate list. + */ + result = idl_allids( be ); break; }