--- servers/slapd/filter.c 2004/01/01 18:16:33 1.115.2.3 +++ servers/slapd/filter.c 2004/02/23 10:45:19 1.120 @@ -1,5 +1,5 @@ /* filter.c - routines for parsing and dealing with filters */ -/* $OpenLDAP: pkg/ldap/servers/slapd/filter.c,v 1.115.2.2 2003/12/01 00:58:34 kurt Exp $ */ +/* $OpenLDAP: pkg/ldap/servers/slapd/filter.c,v 1.119 2004/01/11 21:52:07 ando Exp $ */ /* This work is part of OpenLDAP Software . * * Copyright 1998-2004 The OpenLDAP Foundation. @@ -201,6 +201,18 @@ get_filter( if( err != LDAP_SUCCESS ) { /* unrecognized attribute description or other error */ +#ifdef NEW_LOGGING + LDAP_LOG( FILTER, ERR, + "get_filter: conn %d unknown attribute " + "type=%s (%d)\n", + op->o_connid, type.bv_val, err ); +#else + Debug( LDAP_DEBUG_ANY, + "get_filter: conn %d unknown attribute " + "type=%s (%d)\n", + op->o_connid, type.bv_val, err ); +#endif + f.f_choice = SLAPD_FILTER_COMPUTED; f.f_result = LDAP_COMPARE_FALSE; err = LDAP_SUCCESS; @@ -401,6 +413,7 @@ get_ssa( SubstringsAssertion ssa; *text = "error decoding filter"; + *out = NULL; #ifdef NEW_LOGGING LDAP_LOG( FILTER, ENTRY, @@ -422,6 +435,16 @@ get_ssa( rc = slap_bv2ad( &desc, &ssa.sa_desc, text ); if( rc != LDAP_SUCCESS ) { +#ifdef NEW_LOGGING + LDAP_LOG( FILTER, ERR, + "get_ssa: conn %d d unknown attribute type=%s (%d)\n", + op->o_connid, desc.bv_val, rc ); +#else + Debug( LDAP_DEBUG_ANY, + "get_ssa: conn %d unknown attribute type=%s (%d)\n", + op->o_connid, desc.bv_val, rc ); +#endif + /* skip over the rest of this filter */ for ( tag = ber_first_element( ber, &len, &last ); tag != LBER_DEFAULT; @@ -589,7 +612,7 @@ return_error: Debug( LDAP_DEBUG_FILTER, "end get_ssa\n", 0, 0, 0 ); #endif - return LDAP_SUCCESS; + return rc /* LDAP_SUCCESS */ ; } void @@ -666,10 +689,15 @@ filter_free( Filter *f ) void filter2bv_x( Operation *op, Filter *f, struct berval *fstr ) { - int i; - Filter *p; - struct berval tmp; - ber_len_t len; + int i; + Filter *p; + struct berval tmp, + ber_bvfalse = BER_BVC( "(?=false)" ), + ber_bvtrue = BER_BVC( "(?=true)" ), + ber_bvundefined = BER_BVC( "(?=undefined)" ), + ber_bverror = BER_BVC( "(?=error)" ), + ber_bvunknown = BER_BVC( "(?=unknown)" ); + ber_len_t len; if ( f == NULL ) { ber_str2bv_x( "No filter!", sizeof("No filter!")-1, 1, fstr, op->o_tmpmemctx ); @@ -849,21 +877,29 @@ filter2bv_x( Operation *op, Filter *f, s } break; case SLAPD_FILTER_COMPUTED: - ber_str2bv_x( - f->f_result == LDAP_COMPARE_FALSE ? "(?=false)" : - f->f_result == LDAP_COMPARE_TRUE ? "(?=true)" : - f->f_result == SLAPD_COMPARE_UNDEFINED ? "(?=undefined)" : - "(?=error)", - f->f_result == LDAP_COMPARE_FALSE ? sizeof("(?=false)")-1 : - f->f_result == LDAP_COMPARE_TRUE ? sizeof("(?=true)")-1 : - f->f_result == SLAPD_COMPARE_UNDEFINED ? sizeof("(?=undefined)")-1 : - sizeof("(?=error)")-1, - 1, fstr, op->o_tmpmemctx ); - break; + switch ( f->f_result ) { + case LDAP_COMPARE_FALSE: + tmp = ber_bvfalse; + break; + case LDAP_COMPARE_TRUE: + tmp = ber_bvtrue; + break; + + case SLAPD_COMPARE_UNDEFINED: + tmp = ber_bvundefined; + break; + + default: + tmp = ber_bverror; + break; + } + + ber_dupbv_x( fstr, &tmp, op->o_tmpmemctx ); + break; + default: - ber_str2bv_x( "(?=unknown)", sizeof("(?=unknown)")-1, - 1, fstr, op->o_tmpmemctx ); + ber_dupbv_x( fstr, &ber_bvunknown, op->o_tmpmemctx ); break; } } @@ -1017,6 +1053,18 @@ get_simple_vrFilter( if( err != LDAP_SUCCESS ) { /* unrecognized attribute description or other error */ +#ifdef NEW_LOGGING + LDAP_LOG( FILTER, ERR, + "get_simple_vrFilter: conn %d unknown " + "attribute type=%s (%d)\n", + op->o_connid, type.bv_val, err ); +#else + Debug( LDAP_DEBUG_ANY, + "get_simple_vrFilter: conn %d unknown " + "attribute type=%s (%d)\n", + op->o_connid, type.bv_val, err ); +#endif + vrf.vrf_choice = SLAPD_FILTER_COMPUTED; vrf.vrf_result = LDAP_COMPARE_FALSE; err = LDAP_SUCCESS;