--- servers/slapd/filter.c 2005/01/20 17:01:08 1.115.2.8
+++ servers/slapd/filter.c 2003/09/29 12:09:31 1.116
@@ -1,27 +1,8 @@
/* filter.c - routines for parsing and dealing with filters */
-/* $OpenLDAP: pkg/ldap/servers/slapd/filter.c,v 1.115.2.7 2004/05/21 02:11:38 kurt Exp $ */
-/* This work is part of OpenLDAP Software .
- *
- * Copyright 1998-2005 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.
+/* $OpenLDAP: pkg/ldap/servers/slapd/filter.c,v 1.115 2003/04/29 18:40:26 hyc Exp $ */
+/*
+ * Copyright 1998-2003 The OpenLDAP Foundation, All Rights Reserved.
+ * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
*/
#include "portable.h"
@@ -201,18 +182,6 @@ 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;
@@ -413,7 +382,6 @@ get_ssa(
SubstringsAssertion ssa;
*text = "error decoding filter";
- *out = NULL;
#ifdef NEW_LOGGING
LDAP_LOG( FILTER, ENTRY,
@@ -435,16 +403,6 @@ 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;
@@ -612,7 +570,7 @@ return_error:
Debug( LDAP_DEBUG_FILTER, "end get_ssa\n", 0, 0, 0 );
#endif
- return rc /* LDAP_SUCCESS */ ;
+ return LDAP_SUCCESS;
}
void
@@ -689,20 +647,13 @@ filter_free( Filter *f )
void
filter2bv_x( Operation *op, Filter *f, struct berval *fstr )
{
- int i;
- Filter *p;
- struct berval tmp;
- static struct berval
- 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_bvnone = BER_BVC( "(?=none)" );
- ber_len_t len;
+ int i;
+ Filter *p;
+ struct berval tmp;
+ ber_len_t len;
if ( f == NULL ) {
- ber_dupbv_x( fstr, &ber_bvnone, op->o_tmpmemctx );
+ ber_str2bv_x( "No filter!", sizeof("No filter!")-1, 1, fstr, op->o_tmpmemctx );
return;
}
@@ -776,8 +727,7 @@ filter2bv_x( Operation *op, Filter *f, s
filter_escape_value_x( &f->f_sub_initial, &tmp, op->o_tmpmemctx );
fstr->bv_len += tmp.bv_len;
- fstr->bv_val = op->o_tmprealloc( fstr->bv_val, fstr->bv_len + 1,
- op->o_tmpmemctx );
+ fstr->bv_val = op->o_tmprealloc( fstr->bv_val, fstr->bv_len + 1, op->o_tmpmemctx );
snprintf( &fstr->bv_val[len-2], tmp.bv_len+3,
/* "(attr=" */ "%s*)",
@@ -789,12 +739,10 @@ filter2bv_x( Operation *op, Filter *f, s
if ( f->f_sub_any != NULL ) {
for ( i = 0; f->f_sub_any[i].bv_val != NULL; i++ ) {
len = fstr->bv_len;
- filter_escape_value_x( &f->f_sub_any[i],
- &tmp, op->o_tmpmemctx );
+ filter_escape_value_x( &f->f_sub_any[i], &tmp, op->o_tmpmemctx );
fstr->bv_len += tmp.bv_len + 1;
- fstr->bv_val = op->o_tmprealloc( fstr->bv_val, fstr->bv_len + 1,
- op->o_tmpmemctx );
+ fstr->bv_val = op->o_tmprealloc( fstr->bv_val, fstr->bv_len + 1, op->o_tmpmemctx );
snprintf( &fstr->bv_val[len-1], tmp.bv_len+3,
/* "(attr=[init]*[any*]" */ "%s*)",
@@ -809,8 +757,7 @@ filter2bv_x( Operation *op, Filter *f, s
filter_escape_value_x( &f->f_sub_final, &tmp, op->o_tmpmemctx );
fstr->bv_len += tmp.bv_len;
- fstr->bv_val = op->o_tmprealloc( fstr->bv_val, fstr->bv_len + 1,
- op->o_tmpmemctx );
+ fstr->bv_val = op->o_tmprealloc( fstr->bv_val, fstr->bv_len + 1, op->o_tmpmemctx );
snprintf( &fstr->bv_val[len-1], tmp.bv_len+3,
/* "(attr=[init*][any*]" */ "%s)",
@@ -846,8 +793,7 @@ filter2bv_x( Operation *op, Filter *f, s
filter2bv_x( op, p, &tmp );
fstr->bv_len += tmp.bv_len;
- fstr->bv_val = op->o_tmprealloc( fstr->bv_val, fstr->bv_len + 1,
- op->o_tmpmemctx );
+ fstr->bv_val = op->o_tmprealloc( fstr->bv_val, fstr->bv_len + 1, op->o_tmpmemctx );
snprintf( &fstr->bv_val[len-1], tmp.bv_len + 2,
/*"("*/ "%s)", tmp.bv_val );
@@ -858,55 +804,47 @@ filter2bv_x( Operation *op, Filter *f, s
break;
case LDAP_FILTER_EXT: {
- struct berval ad;
- filter_escape_value_x( &f->f_mr_value, &tmp, op->o_tmpmemctx );
+ struct berval ad;
+ filter_escape_value_x( &f->f_mr_value, &tmp, op->o_tmpmemctx );
- if ( f->f_mr_desc ) {
- ad = f->f_mr_desc->ad_cname;
- } else {
- ad.bv_len = 0;
- ad.bv_val = "";
- }
+ if ( f->f_mr_desc ) {
+ ad = f->f_mr_desc->ad_cname;
+ } else {
+ ad.bv_len = 0;
+ ad.bv_val = "";
+ }
- fstr->bv_len = ad.bv_len +
- ( f->f_mr_dnattrs ? sizeof(":dn")-1 : 0 ) +
- ( f->f_mr_rule_text.bv_len ? f->f_mr_rule_text.bv_len+1 : 0 ) +
- tmp.bv_len + ( sizeof("(:=)") - 1 );
- fstr->bv_val = op->o_tmpalloc( fstr->bv_len + 1, op->o_tmpmemctx );
-
- snprintf( fstr->bv_val, fstr->bv_len + 1, "(%s%s%s%s:=%s)",
- ad.bv_val,
- f->f_mr_dnattrs ? ":dn" : "",
- f->f_mr_rule_text.bv_len ? ":" : "",
- f->f_mr_rule_text.bv_len ? f->f_mr_rule_text.bv_val : "",
- tmp.bv_val );
- ber_memfree_x( tmp.bv_val, op->o_tmpmemctx );
+ fstr->bv_len = ad.bv_len +
+ ( f->f_mr_dnattrs ? sizeof(":dn")-1 : 0 ) +
+ ( f->f_mr_rule_text.bv_len ? f->f_mr_rule_text.bv_len+1 : 0 ) +
+ tmp.bv_len + ( sizeof("(:=)") - 1 );
+ fstr->bv_val = op->o_tmpalloc( fstr->bv_len + 1, op->o_tmpmemctx );
+
+ snprintf( fstr->bv_val, fstr->bv_len + 1, "(%s%s%s%s:=%s)",
+ ad.bv_val,
+ f->f_mr_dnattrs ? ":dn" : "",
+ f->f_mr_rule_text.bv_len ? ":" : "",
+ f->f_mr_rule_text.bv_len ? f->f_mr_rule_text.bv_val : "",
+ tmp.bv_val );
+ ber_memfree_x( tmp.bv_val, op->o_tmpmemctx );
} break;
case SLAPD_FILTER_COMPUTED:
- 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 );
+ 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;
-
+
default:
- ber_dupbv_x( fstr, &ber_bvunknown, op->o_tmpmemctx );
+ ber_str2bv_x( "(?=unknown)", sizeof("(?=unknown)")-1,
+ 1, fstr, op->o_tmpmemctx );
break;
}
}
@@ -1060,18 +998,6 @@ 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;
@@ -1268,8 +1194,8 @@ vrFilter_free( Operation *op, ValuesRetu
default:
#ifdef NEW_LOGGING
- LDAP_LOG( FILTER, ERR, "filter_free: unknown filter type %lu\n",
- vrf->vrf_choice, 0, 0 );
+ LDAP_LOG( FILTER, ERR,
+ "filter_free: unknown filter type %lu\n", vrf->vrf_choice, 0, 0 );
#else
Debug( LDAP_DEBUG_ANY, "filter_free: unknown filter type=%lu\n",
vrf->vrf_choice, 0, 0 );
@@ -1305,8 +1231,7 @@ vrFilter2bv( Operation *op, ValuesReturn
simple_vrFilter2bv( op, p, &tmp );
fstr->bv_len += tmp.bv_len;
- fstr->bv_val = op->o_tmprealloc( fstr->bv_val, fstr->bv_len + 1,
- op->o_tmpmemctx );
+ fstr->bv_val = op->o_tmprealloc( fstr->bv_val, fstr->bv_len + 1, op->o_tmpmemctx );
snprintf( &fstr->bv_val[len-1], tmp.bv_len + 2,
/*"("*/ "%s)", tmp.bv_val );
@@ -1322,8 +1247,7 @@ simple_vrFilter2bv( Operation *op, Value
ber_len_t len;
if ( vrf == NULL ) {
- ber_str2bv_x( "No filter!", sizeof("No filter!")-1, 1, fstr,
- op->o_tmpmemctx );
+ ber_str2bv_x( "No filter!", sizeof("No filter!")-1, 1, fstr, op->o_tmpmemctx );
return;
}
@@ -1397,8 +1321,7 @@ simple_vrFilter2bv( Operation *op, Value
filter_escape_value_x( &vrf->vrf_sub_initial, &tmp, op->o_tmpmemctx );
fstr->bv_len += tmp.bv_len;
- fstr->bv_val = op->o_tmprealloc( fstr->bv_val, fstr->bv_len + 1,
- op->o_tmpmemctx );
+ fstr->bv_val = op->o_tmprealloc( fstr->bv_val, fstr->bv_len + 1, op->o_tmpmemctx );
snprintf( &fstr->bv_val[len-2], tmp.bv_len+3,
/* "(attr=" */ "%s*)",
@@ -1411,12 +1334,10 @@ simple_vrFilter2bv( Operation *op, Value
int i;
for ( i = 0; vrf->vrf_sub_any[i].bv_val != NULL; i++ ) {
len = fstr->bv_len;
- filter_escape_value_x( &vrf->vrf_sub_any[i], &tmp,
- op->o_tmpmemctx );
+ filter_escape_value_x( &vrf->vrf_sub_any[i], &tmp, op->o_tmpmemctx );
fstr->bv_len += tmp.bv_len + 1;
- fstr->bv_val = op->o_tmprealloc( fstr->bv_val,
- fstr->bv_len + 1, op->o_tmpmemctx );
+ fstr->bv_val = op->o_tmprealloc( fstr->bv_val, fstr->bv_len + 1, op->o_tmpmemctx );
snprintf( &fstr->bv_val[len-1], tmp.bv_len+3,
/* "(attr=[init]*[any*]" */ "%s*)",
@@ -1431,8 +1352,7 @@ simple_vrFilter2bv( Operation *op, Value
filter_escape_value_x( &vrf->vrf_sub_final, &tmp, op->o_tmpmemctx );
fstr->bv_len += tmp.bv_len;
- fstr->bv_val = op->o_tmprealloc( fstr->bv_val, fstr->bv_len + 1,
- op->o_tmpmemctx );
+ fstr->bv_val = op->o_tmprealloc( fstr->bv_val, fstr->bv_len + 1, op->o_tmpmemctx );
snprintf( &fstr->bv_val[len-1], tmp.bv_len+3,
/* "(attr=[init*][any*]" */ "%s)",
@@ -1465,8 +1385,7 @@ simple_vrFilter2bv( Operation *op, Value
fstr->bv_len = ad.bv_len +
( vrf->vrf_mr_dnattrs ? sizeof(":dn")-1 : 0 ) +
- ( vrf->vrf_mr_rule_text.bv_len
- ? vrf->vrf_mr_rule_text.bv_len+1 : 0 ) +
+ ( vrf->vrf_mr_rule_text.bv_len ? vrf->vrf_mr_rule_text.bv_len+1 : 0 ) +
tmp.bv_len + ( sizeof("(:=)") - 1 );
fstr->bv_val = op->o_tmpalloc( fstr->bv_len + 1, op->o_tmpmemctx );
@@ -1484,12 +1403,12 @@ simple_vrFilter2bv( Operation *op, Value
ber_str2bv_x(
vrf->vrf_result == LDAP_COMPARE_FALSE ? "(?=false)" :
vrf->vrf_result == LDAP_COMPARE_TRUE ? "(?=true)" :
- vrf->vrf_result == SLAPD_COMPARE_UNDEFINED
- ? "(?=undefined)" : "(?=error)",
+ vrf->vrf_result == SLAPD_COMPARE_UNDEFINED ? "(?=undefined)" :
+ "(?=error)",
vrf->vrf_result == LDAP_COMPARE_FALSE ? sizeof("(?=false)")-1 :
vrf->vrf_result == LDAP_COMPARE_TRUE ? sizeof("(?=true)")-1 :
- vrf->vrf_result == SLAPD_COMPARE_UNDEFINED
- ? sizeof("(?=undefined)")-1 : sizeof("(?=error)")-1,
+ vrf->vrf_result == SLAPD_COMPARE_UNDEFINED ? sizeof("(?=undefined)")-1 :
+ sizeof("(?=error)")-1,
1, fstr, op->o_tmpmemctx );
break;