version 1.29, 2000/05/15 17:28:26
|
version 1.30, 2000/05/15 21:36:37
|
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.28 2000/05/15 16:46:03 kurt Exp $ */ |
/* $OpenLDAP: pkg/ldap/servers/slapd/filter.c,v 1.29 2000/05/15 17:28:26 kurt Exp $ */ |
/* |
/* |
* Copyright 1998-2000 The OpenLDAP Foundation, All Rights Reserved. |
* Copyright 1998-2000 The OpenLDAP Foundation, All Rights Reserved. |
* COPYING RESTRICTIONS APPLY, see COPYRIGHT file |
* COPYING RESTRICTIONS APPLY, see COPYRIGHT file |
Line 39 get_filter(
|
Line 39 get_filter(
|
ber_len_t len; |
ber_len_t len; |
int err; |
int err; |
Filter *f; |
Filter *f; |
char *ftmp; |
char *ftmp = NULL; |
|
|
Debug( LDAP_DEBUG_FILTER, "begin get_filter\n", 0, 0, 0 ); |
Debug( LDAP_DEBUG_FILTER, "begin get_filter\n", 0, 0, 0 ); |
|
|
Line 157 get_filter(
|
Line 157 get_filter(
|
} |
} |
|
|
#ifdef SLAPD_SCHEMA_NOT_COMPAT |
#ifdef SLAPD_SCHEMA_NOT_COMPAT |
|
|
*fstr = ch_malloc( sizeof("(<=)") |
*fstr = ch_malloc( sizeof("(<=)") |
+ f->f_av_desc->ad_cname->bv_len |
+ f->f_av_desc->ad_cname->bv_len |
+ f->f_av_value->bv_len ); |
+ f->f_av_value->bv_len ); |
Line 205 get_filter(
|
Line 204 get_filter(
|
+ f->f_desc->ad_cname->bv_len ); |
+ f->f_desc->ad_cname->bv_len ); |
sprintf( *fstr, "(%s=*)", |
sprintf( *fstr, "(%s=*)", |
f->f_desc->ad_cname->bv_val ); |
f->f_desc->ad_cname->bv_val ); |
|
|
#else |
#else |
f->f_type = type.bv_val; |
f->f_type = type.bv_val; |
err = LDAP_SUCCESS; |
err = LDAP_SUCCESS; |
Line 247 get_filter(
|
Line 247 get_filter(
|
if ( err != LDAP_SUCCESS ) { |
if ( err != LDAP_SUCCESS ) { |
break; |
break; |
} |
} |
if (ftmp == NULL) ftmp = ch_strdup(""); |
*fstr = ch_malloc( sizeof("(&)") |
*fstr = ch_malloc( 4 + strlen( ftmp ) ); |
+ ( ftmp == NULL ? 0 : strlen( ftmp ) ) ); |
sprintf( *fstr, "(&%s)", ftmp ); |
sprintf( *fstr, "(&%s)", |
free( ftmp ); |
ftmp == NULL ? "" : ftmp ); |
break; |
break; |
|
|
case LDAP_FILTER_OR: |
case LDAP_FILTER_OR: |
Line 259 get_filter(
|
Line 259 get_filter(
|
if ( err != LDAP_SUCCESS ) { |
if ( err != LDAP_SUCCESS ) { |
break; |
break; |
} |
} |
if (ftmp == NULL) ftmp = ch_strdup(""); |
*fstr = ch_malloc( sizeof("(!)") |
*fstr = ch_malloc( 4 + strlen( ftmp ) ); |
+ ( ftmp == NULL ? 0 : strlen( ftmp ) ) ); |
sprintf( *fstr, "(|%s)", ftmp ); |
sprintf( *fstr, "(|%s)", |
free( ftmp ); |
ftmp == NULL ? "" : ftmp ); |
break; |
break; |
|
|
case LDAP_FILTER_NOT: |
case LDAP_FILTER_NOT: |
Line 272 get_filter(
|
Line 272 get_filter(
|
if ( err != LDAP_SUCCESS ) { |
if ( err != LDAP_SUCCESS ) { |
break; |
break; |
} |
} |
if (ftmp == NULL) ftmp = ch_strdup(""); |
*fstr = ch_malloc( sizeof("(!)") |
*fstr = ch_malloc( 4 + strlen( ftmp ) ); |
+ ( ftmp == NULL ? 0 : strlen( ftmp ) ) ); |
sprintf( *fstr, "(!%s)", ftmp ); |
sprintf( *fstr, "(!%s)", |
free( ftmp ); |
ftmp == NULL ? "" : ftmp ); |
break; |
break; |
|
|
case LDAP_FILTER_EXT: |
case LDAP_FILTER_EXT: |
/* not yet implemented */ |
/* not yet implemented */ |
Debug( LDAP_DEBUG_ANY, "extensible match not yet implemented.\n", |
Debug( LDAP_DEBUG_ANY, "extensible match not yet implemented.\n", |
f->f_choice, 0, 0 ); |
f->f_choice, 0, 0 ); |
err = LDAP_PROTOCOL_ERROR; |
f->f_choice = SLAPD_FILTER_COMPUTED; |
*text = "extensible match not yet implemented"; |
f->f_result = SLAPD_COMPARE_UNDEFINED; |
|
*fstr = ch_strdup( "(extended)" ); |
break; |
break; |
|
|
default: |
default: |
Debug( LDAP_DEBUG_ANY, "get_filter: unknown filter type=%lu\n", |
Debug( LDAP_DEBUG_ANY, "get_filter: unknown filter type=%lu\n", |
f->f_choice, 0, 0 ); |
f->f_choice, 0, 0 ); |
err = LDAP_PROTOCOL_ERROR; |
f->f_choice = SLAPD_FILTER_COMPUTED; |
*text = "unknown filter type"; |
f->f_result = SLAPD_COMPARE_UNDEFINED; |
|
*fstr = ch_strdup( "(undefined)" ); |
break; |
break; |
} |
} |
|
|
Line 303 get_filter(
|
Line 305 get_filter(
|
*filt = f; |
*filt = f; |
} |
} |
|
|
|
free( ftmp ); |
|
|
Debug( LDAP_DEBUG_FILTER, "end get_filter %d\n", err, 0, 0 ); |
Debug( LDAP_DEBUG_FILTER, "end get_filter %d\n", err, 0, 0 ); |
return( err ); |
return( err ); |
} |
} |
Line 599 filter_print( Filter *f )
|
Line 603 filter_print( Filter *f )
|
f->f_av_desc->ad_cname->bv_val, |
f->f_av_desc->ad_cname->bv_val, |
f->f_av_value->bv_val ); |
f->f_av_value->bv_val ); |
#else |
#else |
fprintf( stderr, "(%s=%s)", f->f_ava.ava_type, |
fprintf( stderr, "(%s=%s)", |
|
f->f_ava.ava_type, |
f->f_ava.ava_value.bv_val ); |
f->f_ava.ava_value.bv_val ); |
#endif |
#endif |
break; |
break; |
Line 610 filter_print( Filter *f )
|
Line 615 filter_print( Filter *f )
|
f->f_av_desc->ad_cname->bv_val, |
f->f_av_desc->ad_cname->bv_val, |
f->f_av_value->bv_val ); |
f->f_av_value->bv_val ); |
#else |
#else |
fprintf( stderr, "(%s>=%s)", f->f_ava.ava_type, |
fprintf( stderr, "(%s>=%s)", |
|
f->f_ava.ava_type, |
f->f_ava.ava_value.bv_val ); |
f->f_ava.ava_value.bv_val ); |
#endif |
#endif |
break; |
break; |
Line 621 filter_print( Filter *f )
|
Line 627 filter_print( Filter *f )
|
f->f_ava->aa_desc->ad_cname->bv_val, |
f->f_ava->aa_desc->ad_cname->bv_val, |
f->f_ava->aa_value->bv_val ); |
f->f_ava->aa_value->bv_val ); |
#else |
#else |
fprintf( stderr, "(%s<=%s)", f->f_ava.ava_type, |
fprintf( stderr, "(%s<=%s)", |
|
f->f_ava.ava_type, |
f->f_ava.ava_value.bv_val ); |
f->f_ava.ava_value.bv_val ); |
#endif |
#endif |
break; |
break; |
Line 632 filter_print( Filter *f )
|
Line 639 filter_print( Filter *f )
|
f->f_ava->aa_desc->ad_cname->bv_val, |
f->f_ava->aa_desc->ad_cname->bv_val, |
f->f_ava->aa_value->bv_val ); |
f->f_ava->aa_value->bv_val ); |
#else |
#else |
fprintf( stderr, "(%s~=%s)", f->f_ava.ava_type, |
fprintf( stderr, "(%s~=%s)", |
|
f->f_ava.ava_type, |
f->f_ava.ava_value.bv_val ); |
f->f_ava.ava_value.bv_val ); |
#endif |
#endif |
break; |
break; |
Line 642 filter_print( Filter *f )
|
Line 650 filter_print( Filter *f )
|
fprintf( stderr, "(%s=" /*)*/, |
fprintf( stderr, "(%s=" /*)*/, |
f->f_sub_desc->ad_cname->bv_val ); |
f->f_sub_desc->ad_cname->bv_val ); |
#else |
#else |
fprintf( stderr, "(%s=" /*)*/, f->f_sub_type ); |
fprintf( stderr, "(%s=" /*)*/, |
|
f->f_sub_type ); |
#endif |
#endif |
if ( f->f_sub_initial != NULL ) { |
if ( f->f_sub_initial != NULL ) { |
fprintf( stderr, "%s", f->f_sub_initial->bv_val ); |
fprintf( stderr, "%s", |
|
f->f_sub_initial->bv_val ); |
} |
} |
if ( f->f_sub_any != NULL ) { |
if ( f->f_sub_any != NULL ) { |
for ( i = 0; f->f_sub_any[i] != NULL; i++ ) { |
for ( i = 0; f->f_sub_any[i] != NULL; i++ ) { |
fprintf( stderr, "*%s", f->f_sub_any[i]->bv_val ); |
fprintf( stderr, "*%s", |
|
f->f_sub_any[i]->bv_val ); |
} |
} |
} |
} |
if ( f->f_sub_final != NULL ) { |
if ( f->f_sub_final != NULL ) { |
fprintf( stderr, "*%s", f->f_sub_final->bv_val ); |
fprintf( stderr, |
|
"*%s", f->f_sub_final->bv_val ); |
} |
} |
fprintf( stderr, /*(*/ ")" ); |
fprintf( stderr, /*(*/ ")" ); |
break; |
break; |
Line 663 filter_print( Filter *f )
|
Line 675 filter_print( Filter *f )
|
fprintf( stderr, "(%s=*)", |
fprintf( stderr, "(%s=*)", |
f->f_desc->ad_cname->bv_val ); |
f->f_desc->ad_cname->bv_val ); |
#else |
#else |
fprintf( stderr, "(%s=*)", f->f_type ); |
fprintf( stderr, "(%s=*)", |
|
f->f_type ); |
#endif |
#endif |
break; |
break; |
|
|
Line 680 filter_print( Filter *f )
|
Line 693 filter_print( Filter *f )
|
break; |
break; |
|
|
case SLAPD_FILTER_COMPUTED: |
case SLAPD_FILTER_COMPUTED: |
fprintf( stderr, "(%s)", |
fprintf( stderr, "(?=%s)", |
f->f_result == LDAP_COMPARE_FALSE ? "false" : |
f->f_result == LDAP_COMPARE_FALSE ? "false" : |
f->f_result == LDAP_COMPARE_TRUE ? "true" : |
f->f_result == LDAP_COMPARE_TRUE ? "true" : |
f->f_result == SLAPD_COMPARE_UNDEFINED ? "undefined" : |
f->f_result == SLAPD_COMPARE_UNDEFINED ? "undefined" : |
Line 688 filter_print( Filter *f )
|
Line 701 filter_print( Filter *f )
|
break; |
break; |
|
|
default: |
default: |
fprintf( stderr, "(unknown filter %lu)", f->f_choice ); |
fprintf( stderr, "(unknown-filter=%lu)", f->f_choice ); |
break; |
break; |
} |
} |
} |
} |