X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Ffilterentry.c;h=586db3f9b4ccebdfc79c8d0b26e7d93786e3e867;hb=9c5fe98a79afc5303a1e82a93fd759532f289d27;hp=386ea48a15c8155f768beead60fa3606237dd545;hpb=ece7452b05fcbbb14823e113b683365a59f81f05;p=openldap diff --git a/servers/slapd/filterentry.c b/servers/slapd/filterentry.c index 386ea48a15..586db3f9b4 100644 --- a/servers/slapd/filterentry.c +++ b/servers/slapd/filterentry.c @@ -1,8 +1,27 @@ /* filterentry.c - apply a filter to an entry */ /* $OpenLDAP$ */ -/* - * Copyright 1998-2003 The OpenLDAP Foundation, All Rights Reserved. - * COPYING RESTRICTIONS APPLY, see COPYRIGHT file +/* This work is part of OpenLDAP Software . + * + * Copyright 1998-2003 The OpenLDAP Foundation. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted only as authorized by the OpenLDAP + * Public License. + * + * A copy of this license is available in the file LICENSE in the + * top-level directory of the distribution or, alternatively, at + * . + */ +/* Portions Copyright (c) 1995 Regents of the University of Michigan. + * All rights reserved. + * + * Redistribution and use in source and binary forms are permitted + * provided that this notice is preserved and that due credit is given + * to the University of Michigan at Ann Arbor. The name of the University + * may not be used to endorse or promote products derived from this + * software without specific prior written permission. This software + * is provided ``as is'' without express or implied warranty. */ #include "portable.h" @@ -196,6 +215,7 @@ static int test_mra_filter( MatchingRuleAssertion *mra ) { Attribute *a; + void *memctx = op ? op->o_tmpmemctx : NULL; if ( mra->ma_desc ) { /* @@ -217,12 +237,13 @@ static int test_mra_filter( /* If ma_rule is not the same as the attribute's * normal rule, then we can't use the a_nvals. */ - if (mra->ma_rule == a->a_desc->ad_type->sat_equality) + if (mra->ma_rule == a->a_desc->ad_type->sat_equality) { bv = a->a_nvals; - else + } else { bv = a->a_vals; - for ( ; bv->bv_val != NULL; bv++ ) - { + } + + for ( ; bv->bv_val != NULL; bv++ ) { int ret; int rc; const char *text; @@ -257,7 +278,7 @@ static int test_mra_filter( /* normalize for equality */ rc = asserted_value_validate_normalize( a->a_desc, mra->ma_rule, SLAP_MR_EXT|SLAP_MR_VALUE_OF_ASSERTION_SYNTAX, - &mra->ma_value, &value, &text, op->o_tmpmemctx ); + &mra->ma_value, &value, &text, memctx ); if ( rc != LDAP_SUCCESS ) { continue; } @@ -299,7 +320,7 @@ static int test_mra_filter( int rc; /* parse and pretty the dn */ - rc = dnPrettyDN( NULL, &e->e_name, &dn, op->o_tmpmemctx ); + rc = dnPrettyDN( NULL, &e->e_name, &dn, memctx ); if ( rc != LDAP_SUCCESS ) { return LDAP_INVALID_SYNTAX; } @@ -337,7 +358,7 @@ static int test_mra_filter( rc = asserted_value_validate_normalize( ad, mra->ma_rule, SLAP_MR_EXT|SLAP_MR_VALUE_OF_ASSERTION_SYNTAX, - &mra->ma_value, &value, &text, op->o_tmpmemctx ); + &mra->ma_value, &value, &text, memctx ); if ( rc != LDAP_SUCCESS ) { continue; } @@ -354,12 +375,12 @@ static int test_mra_filter( bv, &value, &text ); if( rc != LDAP_SUCCESS ) { - ldap_dnfree_x( dn, op->o_tmpmemctx ); + ldap_dnfree_x( dn, memctx ); return rc; } if ( ret == 0 ) { - ldap_dnfree_x( dn, op->o_tmpmemctx ); + ldap_dnfree_x( dn, memctx ); return LDAP_COMPARE_TRUE; } } @@ -453,7 +474,7 @@ test_ava_filter( } if ( ava->aa_desc == slap_schema.si_ad_hasSubordinates - && op->o_bd && op->o_bd->be_has_subordinates ) { + && op && op->o_bd && op->o_bd->be_has_subordinates ) { int hasSubordinates; struct berval hs; @@ -467,12 +488,10 @@ test_ava_filter( } if ( hasSubordinates == LDAP_COMPARE_TRUE ) { - hs.bv_val = "TRUE"; - hs.bv_len = sizeof( "TRUE" ) - 1; + hs = slap_true_bv; } else if ( hasSubordinates == LDAP_COMPARE_FALSE ) { - hs.bv_val = "FALSE"; - hs.bv_len = sizeof( "FALSE" ) - 1; + hs = slap_false_bv; } else { return LDAP_OTHER; @@ -513,7 +532,7 @@ test_presence_filter( * is boolean-valued; I think we may live with this * simplification by now */ - if ( op->o_bd && op->o_bd->be_has_subordinates ) { + if ( op && op->o_bd && op->o_bd->be_has_subordinates ) { return LDAP_COMPARE_TRUE; }