From: Howard Chu Date: Tue, 29 Apr 2003 05:58:28 +0000 (+0000) Subject: Fix computed TRUE/FALSE filters X-Git-Tag: OPENLDAP_REL_ENG_2_2_0ALPHA~231 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=2931966ea590683d995753b7d47ab0a9ad901190;p=openldap Fix computed TRUE/FALSE filters --- diff --git a/servers/slapd/filter.c b/servers/slapd/filter.c index 34fa6b9f69..38f99a7f61 100644 --- a/servers/slapd/filter.c +++ b/servers/slapd/filter.c @@ -212,6 +212,10 @@ get_filter( if ( err != LDAP_SUCCESS ) { break; } + if ( f.f_and == NULL ) { + f.f_choice = SLAPD_FILTER_COMPUTED; + f.f_result = LDAP_COMPARE_TRUE; + } /* no assert - list could be empty */ break; @@ -226,6 +230,10 @@ get_filter( if ( err != LDAP_SUCCESS ) { break; } + if ( f.f_or == NULL ) { + f.f_choice = SLAPD_FILTER_COMPUTED; + f.f_result = LDAP_COMPARE_FALSE; + } /* no assert - list could be empty */ break; @@ -243,6 +251,21 @@ get_filter( } assert( f.f_not != NULL ); + if ( f.f_not->f_choice == SLAPD_FILTER_COMPUTED ) { + if ( f.f_not->f_result == LDAP_COMPARE_TRUE ) { + op->o_tmpfree( f.f_not, op->o_tmpmemctx ); + f.f_not = NULL; + f.f_choice = SLAPD_FILTER_COMPUTED; + f.f_result = LDAP_COMPARE_FALSE; + } else if ( f.f_not->f_result == LDAP_COMPARE_FALSE ) { + op->o_tmpfree( f.f_not, op->o_tmpmemctx ); + f.f_not = NULL; + f.f_choice = SLAPD_FILTER_COMPUTED; + f.f_result = LDAP_COMPARE_TRUE; + } + /* Leave UNDEFINED alone */ + } + break; case LDAP_FILTER_EXT: