--- servers/slapd/filter.c 2003/10/06 14:57:29 1.115.2.1
+++ servers/slapd/filter.c 2004/04/20 01:44:57 1.122
@@ -1,8 +1,27 @@
/* filter.c - routines for parsing and dealing with filters */
-/* $OpenLDAP: pkg/ldap/servers/slapd/filter.c,v 1.116 2003/09/29 12:09:31 hallvard Exp $ */
-/*
- * Copyright 1998-2003 The OpenLDAP Foundation, All Rights Reserved.
- * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
+/* $OpenLDAP: pkg/ldap/servers/slapd/filter.c,v 1.121 2004/03/09 06:08:04 ando Exp $ */
+/* This work is part of OpenLDAP Software .
+ *
+ * Copyright 1998-2004 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"
@@ -182,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;
@@ -382,6 +413,7 @@ get_ssa(
SubstringsAssertion ssa;
*text = "error decoding filter";
+ *out = NULL;
#ifdef NEW_LOGGING
LDAP_LOG( FILTER, ENTRY,
@@ -403,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;
@@ -485,7 +527,7 @@ get_ssa(
|| ssa.sa_any != NULL
|| ssa.sa_final.bv_val != NULL )
{
- sl_free( nvalue.bv_val, op->o_tmpmemctx );
+ slap_sl_free( nvalue.bv_val, op->o_tmpmemctx );
goto return_error;
}
@@ -502,7 +544,7 @@ get_ssa(
#endif
if ( ssa.sa_final.bv_val != NULL ) {
- sl_free( nvalue.bv_val, op->o_tmpmemctx );
+ slap_sl_free( nvalue.bv_val, op->o_tmpmemctx );
goto return_error;
}
@@ -519,7 +561,7 @@ get_ssa(
#endif
if ( ssa.sa_final.bv_val != NULL ) {
- sl_free( nvalue.bv_val, op->o_tmpmemctx );
+ slap_sl_free( nvalue.bv_val, op->o_tmpmemctx );
goto return_error;
}
@@ -538,7 +580,7 @@ get_ssa(
#endif
assert( 0 );
- sl_free( nvalue.bv_val, op->o_tmpmemctx );
+ slap_sl_free( nvalue.bv_val, op->o_tmpmemctx );
return_error:
#ifdef NEW_LOGGING
@@ -549,9 +591,9 @@ return_error:
Debug( LDAP_DEBUG_FILTER, " error=%ld\n",
(long) rc, 0, 0 );
#endif
- sl_free( ssa.sa_initial.bv_val, op->o_tmpmemctx );
+ slap_sl_free( ssa.sa_initial.bv_val, op->o_tmpmemctx );
ber_bvarray_free_x( ssa.sa_any, op->o_tmpmemctx );
- sl_free( ssa.sa_final.bv_val, op->o_tmpmemctx );
+ slap_sl_free( ssa.sa_final.bv_val, op->o_tmpmemctx );
return rc;
}
@@ -570,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
@@ -639,21 +681,28 @@ filter_free( Filter *f )
{
Operation op;
- op.o_tmpmemctx = sl_context( f );
- op.o_tmpmfuncs = &sl_mfuncs;
+ op.o_tmpmemctx = slap_sl_context( f );
+ op.o_tmpmfuncs = &slap_sl_mfuncs;
filter_free_x( &op, 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;
+ 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;
if ( f == NULL ) {
- ber_str2bv_x( "No filter!", sizeof("No filter!")-1, 1, fstr, op->o_tmpmemctx );
+ ber_dupbv_x( fstr, &ber_bvnone, op->o_tmpmemctx );
return;
}
@@ -830,21 +879,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;
}
}
@@ -870,7 +927,7 @@ filter_escape_value_x(
assert( out );
i = in->bv_len * 3 + 1;
- out->bv_val = ctx ? sl_malloc( i, ctx ) : ch_malloc( i );
+ out->bv_val = ctx ? slap_sl_malloc( i, ctx ) : ch_malloc( i );
out->bv_len = 0;
for( i=0; i < in->bv_len ; i++ ) {
@@ -998,6 +1055,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;