X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Ffilterentry.c;h=a6528b2877bc4a11841dc6aa5c258c9ee51d6aa9;hb=749404b83fa8dac94c75dc39dce8e5d80cda9a7f;hp=3aa261751f9fb1d2cd2e4d561a1ab97cbace5b68;hpb=2ec25ef8810f15f5aa13ec47b593a18cb96fcbdf;p=openldap diff --git a/servers/slapd/filterentry.c b/servers/slapd/filterentry.c index 3aa261751f..a6528b2877 100644 --- a/servers/slapd/filterentry.c +++ b/servers/slapd/filterentry.c @@ -1,22 +1,20 @@ /* filterentry.c - apply a filter to an entry */ +#include "portable.h" + #include -#include -#include -#include -#include -#include "slap.h" -extern Attribute *attr_find(); -extern char *first_word(); -extern char *next_word(); -extern char *phonetic(); +#include +#include +#include + +#include "slap.h" -static int test_filter_list(); -static int test_substring_filter(); -static int test_ava_filter(); -static int test_approx_filter(); -static int test_presence_filter(); +static int test_filter_list(Backend *be, Connection *conn, Operation *op, Entry *e, Filter *flist, int ftype); +static int test_substring_filter(Backend *be, Connection *conn, Operation *op, Entry *e, Filter *f); +static int test_ava_filter(Backend *be, Connection *conn, Operation *op, Entry *e, Ava *ava, int type); +static int test_approx_filter(Backend *be, Connection *conn, Operation *op, Entry *e, Ava *ava); +static int test_presence_filter(Backend *be, Connection *conn, Operation *op, Entry *e, char *type); /* * test_filter - test a filter against a single entry. @@ -90,7 +88,7 @@ test_filter( break; default: - Debug( LDAP_DEBUG_ANY, " unknown filter type %d\n", + Debug( LDAP_DEBUG_ANY, " unknown filter type %lu\n", f->f_choice, 0, 0 ); rc = -1; } @@ -112,8 +110,9 @@ test_ava_filter( int i, rc; Attribute *a; - if ( be != NULL && ! access_allowed( be, conn, op, e, ava->ava_type, - &ava->ava_value, op->o_dn, ACL_SEARCH ) ) { + if ( be != NULL && ! access_allowed( be, conn, op, e, + ava->ava_type, &ava->ava_value, ACL_SEARCH ) ) + { return( -2 ); } @@ -136,13 +135,13 @@ test_ava_filter( break; case LDAP_FILTER_GE: - if ( rc > 0 ) { + if ( rc >= 0 ) { return( 0 ); } break; case LDAP_FILTER_LE: - if ( rc < 0 ) { + if ( rc <= 0 ) { return( 0 ); } break; @@ -161,8 +160,9 @@ test_presence_filter( char *type ) { - if ( be != NULL && ! access_allowed( be, conn, op, e, type, NULL, - op->o_dn, ACL_SEARCH ) ) { + if ( be != NULL && ! access_allowed( be, conn, op, e, + type, NULL, ACL_SEARCH ) ) + { return( -2 ); } @@ -182,8 +182,9 @@ test_approx_filter( int i, rc, match; Attribute *a; - if ( be != NULL && ! access_allowed( be, conn, op, e, ava->ava_type, - NULL, op->o_dn, ACL_SEARCH ) ) { + if ( be != NULL && ! access_allowed( be, conn, op, e, + ava->ava_type, NULL, ACL_SEARCH ) ) + { return( -2 ); } @@ -318,8 +319,9 @@ test_substring_filter( Debug( LDAP_DEBUG_FILTER, "begin test_substring_filter\n", 0, 0, 0 ); - if ( be != NULL && ! access_allowed( be, conn, op, e, f->f_sub_type, - NULL, op->o_dn, ACL_SEARCH ) ) { + if ( be != NULL && ! access_allowed( be, conn, op, e, + f->f_sub_type, NULL, ACL_SEARCH ) ) + { return( -2 ); }