From: Kurt Zeilenga Date: Sat, 23 Jun 2001 03:40:57 +0000 (+0000) Subject: Import filter three value logic fixes X-Git-Tag: OPENLDAP_REL_ENG_2_0_12~47 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=46f731429ee5e3aca5ff6872fd0243008a897b94;p=thirdparty%2Fopenldap.git Import filter three value logic fixes --- diff --git a/servers/slapd/filterentry.c b/servers/slapd/filterentry.c index 551f21c3d7..6c310a0e7d 100644 --- a/servers/slapd/filterentry.c +++ b/servers/slapd/filterentry.c @@ -113,6 +113,9 @@ test_filter( Debug( LDAP_DEBUG_FILTER, " NOT\n", 0, 0, 0 ); rc = test_filter( be, conn, op, e, f->f_not ); + /* Flip true to false and false to true + * but leave Undefined alone. + */ switch( rc ) { case LDAP_COMPARE_TRUE: rc = LDAP_COMPARE_FALSE; @@ -260,7 +263,7 @@ test_filter_and( ) { Filter *f; - int rtn = LDAP_COMPARE_TRUE; + int rtn = LDAP_COMPARE_TRUE; /* True if empty */ Debug( LDAP_DEBUG_FILTER, "=> test_filter_and\n", 0, 0, 0 ); @@ -268,10 +271,13 @@ test_filter_and( int rc = test_filter( be, conn, op, e, f ); if ( rc == LDAP_COMPARE_FALSE ) { - rtn = LDAP_COMPARE_FALSE; + /* filter is False */ + rtn = rc; break; } + if ( rc != LDAP_COMPARE_TRUE ) { + /* filter is Undefined unless later elements are False */ rtn = rc; } } @@ -290,7 +296,7 @@ test_filter_or( ) { Filter *f; - int rtn = LDAP_COMPARE_FALSE; + int rtn = LDAP_COMPARE_FALSE; /* False if empty */ Debug( LDAP_DEBUG_FILTER, "=> test_filter_or\n", 0, 0, 0 ); @@ -298,10 +304,13 @@ test_filter_or( int rc = test_filter( be, conn, op, e, f ); if ( rc == LDAP_COMPARE_TRUE ) { - rtn = LDAP_COMPARE_TRUE; + /* filter is True */ + rtn = rc; break; } - if ( rc != LDAP_COMPARE_TRUE ) { + + if ( rc != LDAP_COMPARE_FALSE ) { + /* filter is Undefined unless later elements are True */ rtn = rc; } }