version 1.143, 2007/10/05 06:24:36
|
version 1.147, 2007/11/09 06:28:42
|
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.142 2007/09/15 15:38:53 ando Exp $ */ |
/* $OpenLDAP: pkg/ldap/servers/slapd/filter.c,v 1.146 2007/11/07 03:02:21 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-2007 The OpenLDAP Foundation. |
* Copyright 1998-2007 The OpenLDAP Foundation. |
Line 567 filter2bv_x( Operation *op, Filter *f, s
|
Line 567 filter2bv_x( Operation *op, Filter *f, s
|
{ |
{ |
int i; |
int i; |
Filter *p; |
Filter *p; |
struct berval tmp; |
struct berval tmp, value; |
char uuid[ LDAP_LUTIL_UUIDSTR_BUFSIZE ]; |
|
static struct berval |
static struct berval |
ber_bvfalse = BER_BVC( "(?=false)" ), |
ber_bvfalse = BER_BVC( "(?=false)" ), |
ber_bvtrue = BER_BVC( "(?=true)" ), |
ber_bvtrue = BER_BVC( "(?=true)" ), |
Line 593 filter2bv_x( Operation *op, Filter *f, s
|
Line 592 filter2bv_x( Operation *op, Filter *f, s
|
case LDAP_FILTER_EQUALITY: |
case LDAP_FILTER_EQUALITY: |
fstr->bv_len = STRLENOF("(=)"); |
fstr->bv_len = STRLENOF("(=)"); |
sign = "="; |
sign = "="; |
if ( f->f_av_desc->ad_type->sat_syntax == slap_schema.si_ad_entryUUID->ad_type->sat_syntax ) { |
|
tmp.bv_len = lutil_uuidstr_from_normalized( f->f_av_value.bv_val, |
|
f->f_av_value.bv_len, uuid, LDAP_LUTIL_UUIDSTR_BUFSIZE ); |
|
assert( tmp.bv_len > 0 ); |
|
tmp.bv_val = uuid; |
|
goto escaped; |
|
} |
|
goto simple; |
goto simple; |
case LDAP_FILTER_GE: |
case LDAP_FILTER_GE: |
fstr->bv_len = STRLENOF("(>=)"); |
fstr->bv_len = STRLENOF("(>=)"); |
Line 614 filter2bv_x( Operation *op, Filter *f, s
|
Line 606 filter2bv_x( Operation *op, Filter *f, s
|
sign = "~="; |
sign = "~="; |
|
|
simple: |
simple: |
filter_escape_value_x( &f->f_av_value, &tmp, op->o_tmpmemctx ); |
value = f->f_av_value; |
|
if ( f->f_av_desc->ad_type->sat_equality && |
|
( f->f_av_desc->ad_type->sat_equality->smr_usage & SLAP_MR_MUTATION_NORMALIZER )) { |
|
f->f_av_desc->ad_type->sat_equality->smr_normalize( |
|
(SLAP_MR_DENORMALIZE|SLAP_MR_VALUE_OF_ASSERTION_SYNTAX), |
|
NULL, NULL, &f->f_av_value, &value, op->o_tmpmemctx ); |
|
} |
|
|
|
filter_escape_value_x( &value, &tmp, op->o_tmpmemctx ); |
/* NOTE: tmp can legitimately be NULL (meaning empty) |
/* NOTE: tmp can legitimately be NULL (meaning empty) |
* since in a Filter values in AVAs are supposed |
* since in a Filter values in AVAs are supposed |
* to have been normalized, meaning that an empty value |
* to have been normalized, meaning that an empty value |
* is legal for that attribute's syntax */ |
* is legal for that attribute's syntax */ |
|
|
escaped: |
|
fstr->bv_len += f->f_av_desc->ad_cname.bv_len + tmp.bv_len; |
fstr->bv_len += f->f_av_desc->ad_cname.bv_len + tmp.bv_len; |
if ( undef ) |
if ( undef ) |
fstr->bv_len++; |
fstr->bv_len++; |
Line 631 escaped:
|
Line 630 escaped:
|
f->f_av_desc->ad_cname.bv_val, sign, |
f->f_av_desc->ad_cname.bv_val, sign, |
tmp.bv_len ? tmp.bv_val : "" ); |
tmp.bv_len ? tmp.bv_val : "" ); |
|
|
|
if ( value.bv_val != f->f_av_value.bv_val ) { |
|
ber_memfree_x( value.bv_val, op->o_tmpmemctx ); |
|
} |
|
|
ber_memfree_x( tmp.bv_val, op->o_tmpmemctx ); |
ber_memfree_x( tmp.bv_val, op->o_tmpmemctx ); |
break; |
break; |
|
|