version 1.136, 2006/12/25 22:30:45
|
version 1.137, 2006/12/26 03:51:08
|
Line 1
|
Line 1
|
/* filter.c - routines for parsing and dealing with filters */ |
/* filter.c - routines for parsing and dealing with filters */ |
/* $OpenLDAP: pkg/ldap/servers/slapd/filter.c,v 1.135 2006/09/09 14:23:02 ando Exp $ */ |
/* $OpenLDAP: pkg/ldap/servers/slapd/filter.c,v 1.136 2006/12/25 22:30:45 hyc Exp $ */ |
/* This work is part of OpenLDAP Software <http://www.openldap.org/>. |
/* This work is part of OpenLDAP Software <http://www.openldap.org/>. |
* |
* |
* Copyright 1998-2006 The OpenLDAP Foundation. |
* Copyright 1998-2006 The OpenLDAP Foundation. |
Line 167 get_filter(
|
Line 167 get_filter(
|
|
|
if( err != LDAP_SUCCESS ) { |
if( err != LDAP_SUCCESS ) { |
f.f_choice |= SLAPD_FILTER_UNDEFINED; |
f.f_choice |= SLAPD_FILTER_UNDEFINED; |
err = slap_bv2undef_ad( &type, &f.f_desc, text, SLAP_AD_PROXIED); |
err = slap_bv2undef_ad( &type, &f.f_desc, text, |
|
SLAP_AD_PROXIED|SLAP_AD_NOINSERT ); |
|
|
if ( err != LDAP_SUCCESS ) { |
if ( err != LDAP_SUCCESS ) { |
/* unrecognized attribute description or other error */ |
/* unrecognized attribute description or other error */ |
Debug( LDAP_DEBUG_ANY, |
Debug( LDAP_DEBUG_ANY, |
Line 176 get_filter(
|
Line 178 get_filter(
|
op->o_connid, type.bv_val, err ); |
op->o_connid, type.bv_val, err ); |
|
|
err = LDAP_SUCCESS; |
err = LDAP_SUCCESS; |
|
f.f_desc = slap_bv2tmp_ad( &type, op->o_tmpmemctx ); |
} |
} |
*text = NULL; |
*text = NULL; |
} |
} |
Line 344 get_ssa(
|
Line 347 get_ssa(
|
|
|
if( rc != LDAP_SUCCESS ) { |
if( rc != LDAP_SUCCESS ) { |
f->f_choice |= SLAPD_FILTER_UNDEFINED; |
f->f_choice |= SLAPD_FILTER_UNDEFINED; |
rc = slap_bv2undef_ad( &desc, &ssa.sa_desc, text, SLAP_AD_PROXIED); |
rc = slap_bv2undef_ad( &desc, &ssa.sa_desc, text, |
|
SLAP_AD_PROXIED|SLAP_AD_NOINSERT ); |
|
|
if( rc != LDAP_SUCCESS ) { |
if( rc != LDAP_SUCCESS ) { |
Debug( LDAP_DEBUG_ANY, |
Debug( LDAP_DEBUG_ANY, |
"get_ssa: conn %lu unknown attribute type=%s (%ld)\n", |
"get_ssa: conn %lu unknown attribute type=%s (%ld)\n", |
op->o_connid, desc.bv_val, (long) rc ); |
op->o_connid, desc.bv_val, (long) rc ); |
|
|
/* skip over the rest of this filter */ |
ssa.sa_desc = slap_bv2tmp_ad( &desc, op->o_tmpmemctx ); |
for ( tag = ber_first_element( ber, &len, &last ); |
|
tag != LBER_DEFAULT; |
|
tag = ber_next_element( ber, &len, last ) ) { |
|
ber_scanf( ber, "x" ); |
|
} |
|
return rc; |
|
} |
} |
} |
} |
|
|
Line 449 return_error:
|
Line 448 return_error:
|
(long) rc, 0, 0 ); |
(long) rc, 0, 0 ); |
slap_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 ); |
ber_bvarray_free_x( ssa.sa_any, op->o_tmpmemctx ); |
|
if ( ssa.sa_desc->ad_flags & SLAP_DESC_TEMPORARY ) |
|
op->o_tmpfree( ssa.sa_desc, op->o_tmpmemctx ); |
slap_sl_free( ssa.sa_final.bv_val, op->o_tmpmemctx ); |
slap_sl_free( ssa.sa_final.bv_val, op->o_tmpmemctx ); |
return rc; |
return rc; |
} |
} |
Line 495 filter_free_x( Operation *op, Filter *f
|
Line 496 filter_free_x( Operation *op, Filter *f
|
if ( f->f_sub_final.bv_val != NULL ) { |
if ( f->f_sub_final.bv_val != NULL ) { |
op->o_tmpfree( f->f_sub_final.bv_val, op->o_tmpmemctx ); |
op->o_tmpfree( f->f_sub_final.bv_val, op->o_tmpmemctx ); |
} |
} |
|
if ( f->f_sub->sa_desc->ad_flags & SLAP_DESC_TEMPORARY ) |
|
op->o_tmpfree( f->f_sub->sa_desc, op->o_tmpmemctx ); |
op->o_tmpfree( f->f_sub, op->o_tmpmemctx ); |
op->o_tmpfree( f->f_sub, op->o_tmpmemctx ); |
break; |
break; |
|
|
Line 804 filter_dup( Filter *f, void *memctx )
|
Line 807 filter_dup( Filter *f, void *memctx )
|
n->f_result = f->f_result; |
n->f_result = f->f_result; |
break; |
break; |
case LDAP_FILTER_PRESENT: |
case LDAP_FILTER_PRESENT: |
n->f_desc = f->f_desc; |
if ( f->f_desc->ad_flags & SLAP_DESC_TEMPORARY ) |
|
n->f_desc = slap_bv2tmp_ad( &f->f_desc->ad_cname, memctx ); |
|
else |
|
n->f_desc = f->f_desc; |
break; |
break; |
case LDAP_FILTER_EQUALITY: |
case LDAP_FILTER_EQUALITY: |
case LDAP_FILTER_GE: |
case LDAP_FILTER_GE: |
Line 813 filter_dup( Filter *f, void *memctx )
|
Line 819 filter_dup( Filter *f, void *memctx )
|
/* Should this be ava_dup() ? */ |
/* Should this be ava_dup() ? */ |
n->f_ava = mf->bmf_calloc( 1, sizeof(AttributeAssertion), memctx ); |
n->f_ava = mf->bmf_calloc( 1, sizeof(AttributeAssertion), memctx ); |
*n->f_ava = *f->f_ava; |
*n->f_ava = *f->f_ava; |
|
if ( f->f_av_desc->ad_flags & SLAP_DESC_TEMPORARY ) |
|
n->f_av_desc = slap_bv2tmp_ad( &f->f_av_desc->ad_cname, memctx ); |
ber_dupbv_x( &n->f_av_value, &f->f_av_value, memctx ); |
ber_dupbv_x( &n->f_av_value, &f->f_av_value, memctx ); |
break; |
break; |
case LDAP_FILTER_SUBSTRINGS: |
case LDAP_FILTER_SUBSTRINGS: |
n->f_sub = mf->bmf_calloc( 1, sizeof(SubstringsAssertion), memctx ); |
n->f_sub = mf->bmf_calloc( 1, sizeof(SubstringsAssertion), memctx ); |
n->f_sub_desc = f->f_sub_desc; |
if ( f->f_sub_desc->ad_flags & SLAP_DESC_TEMPORARY ) |
|
n->f_sub_desc = slap_bv2tmp_ad( &f->f_sub_desc->ad_cname, memctx ); |
|
else |
|
n->f_sub_desc = f->f_sub_desc; |
if ( !BER_BVISNULL( &f->f_sub_initial )) |
if ( !BER_BVISNULL( &f->f_sub_initial )) |
ber_dupbv_x( &n->f_sub_initial, &f->f_sub_initial, memctx ); |
ber_dupbv_x( &n->f_sub_initial, &f->f_sub_initial, memctx ); |
if ( f->f_sub_any ) { |
if ( f->f_sub_any ) { |
Line 841 filter_dup( Filter *f, void *memctx )
|
Line 852 filter_dup( Filter *f, void *memctx )
|
length += f->f_mr_rule_text.bv_len + 1; |
length += f->f_mr_rule_text.bv_len + 1; |
n->f_mra = mf->bmf_calloc( 1, length, memctx ); |
n->f_mra = mf->bmf_calloc( 1, length, memctx ); |
*n->f_mra = *f->f_mra; |
*n->f_mra = *f->f_mra; |
|
if ( f->f_mr_desc && ( f->f_sub_desc->ad_flags & SLAP_DESC_TEMPORARY )) |
|
n->f_mr_desc = slap_bv2tmp_ad( &f->f_mr_desc->ad_cname, memctx ); |
ber_dupbv_x( &n->f_mr_value, &f->f_mr_value, memctx ); |
ber_dupbv_x( &n->f_mr_value, &f->f_mr_value, memctx ); |
if ( !BER_BVISNULL( &f->f_mr_rule_text )) { |
if ( !BER_BVISNULL( &f->f_mr_rule_text )) { |
n->f_mr_rule_text.bv_val = (char *)(n->f_mra+1); |
n->f_mr_rule_text.bv_val = (char *)(n->f_mra+1); |