From 2931966ea590683d995753b7d47ab0a9ad901190 Mon Sep 17 00:00:00 2001 From: Howard Chu Date: Tue, 29 Apr 2003 05:58:28 +0000 Subject: [PATCH] Fix computed TRUE/FALSE filters --- servers/slapd/filter.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) 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: -- 2.39.5