version 1.4.2.2, 1998/11/15 19:09:05
|
version 1.10.2.1, 1999/06/17 17:09:54
|
Line 9
|
Line 9
|
|
|
#include "slap.h" |
#include "slap.h" |
|
|
static int get_filter_list(); |
static int get_filter_list(Connection *conn, BerElement *ber, Filter **f, char **fstr); |
static int get_substring_filter(); |
static int get_substring_filter(Connection *conn, BerElement *ber, Filter *f, char **fstr); |
|
|
extern int get_ava(); |
|
|
|
int |
int |
get_filter( Connection *conn, BerElement *ber, Filter **filt, char **fstr ) |
get_filter( Connection *conn, BerElement *ber, Filter **filt, char **fstr ) |
{ |
{ |
unsigned long tag, len; |
unsigned long len; |
int err; |
int err; |
Filter *f; |
Filter *f; |
char *ftmp; |
char *ftmp; |
Line 49 get_filter( Connection *conn, BerElement
|
Line 47 get_filter( Connection *conn, BerElement
|
*/ |
*/ |
|
|
f = (Filter *) ch_malloc( sizeof(Filter) ); |
f = (Filter *) ch_malloc( sizeof(Filter) ); |
*filt = f; |
|
f->f_next = NULL; |
f->f_next = NULL; |
|
|
err = 0; |
err = 0; |
Line 136 get_filter( Connection *conn, BerElement
|
Line 133 get_filter( Connection *conn, BerElement
|
Debug( LDAP_DEBUG_FILTER, "AND\n", 0, 0, 0 ); |
Debug( LDAP_DEBUG_FILTER, "AND\n", 0, 0, 0 ); |
if ( (err = get_filter_list( conn, ber, &f->f_and, &ftmp )) |
if ( (err = get_filter_list( conn, ber, &f->f_and, &ftmp )) |
== 0 ) { |
== 0 ) { |
if (ftmp == NULL) ftmp = strdup(""); |
if (ftmp == NULL) ftmp = ch_strdup(""); |
*fstr = ch_malloc( 4 + strlen( ftmp ) ); |
*fstr = ch_malloc( 4 + strlen( ftmp ) ); |
sprintf( *fstr, "(&%s)", ftmp ); |
sprintf( *fstr, "(&%s)", ftmp ); |
free( ftmp ); |
free( ftmp ); |
Line 147 get_filter( Connection *conn, BerElement
|
Line 144 get_filter( Connection *conn, BerElement
|
Debug( LDAP_DEBUG_FILTER, "OR\n", 0, 0, 0 ); |
Debug( LDAP_DEBUG_FILTER, "OR\n", 0, 0, 0 ); |
if ( (err = get_filter_list( conn, ber, &f->f_or, &ftmp )) |
if ( (err = get_filter_list( conn, ber, &f->f_or, &ftmp )) |
== 0 ) { |
== 0 ) { |
if (ftmp == NULL) ftmp = strdup(""); |
if (ftmp == NULL) ftmp = ch_strdup(""); |
*fstr = ch_malloc( 4 + strlen( ftmp ) ); |
*fstr = ch_malloc( 4 + strlen( ftmp ) ); |
sprintf( *fstr, "(|%s)", ftmp ); |
sprintf( *fstr, "(|%s)", ftmp ); |
free( ftmp ); |
free( ftmp ); |
Line 158 get_filter( Connection *conn, BerElement
|
Line 155 get_filter( Connection *conn, BerElement
|
Debug( LDAP_DEBUG_FILTER, "NOT\n", 0, 0, 0 ); |
Debug( LDAP_DEBUG_FILTER, "NOT\n", 0, 0, 0 ); |
(void) ber_skip_tag( ber, &len ); |
(void) ber_skip_tag( ber, &len ); |
if ( (err = get_filter( conn, ber, &f->f_not, &ftmp )) == 0 ) { |
if ( (err = get_filter( conn, ber, &f->f_not, &ftmp )) == 0 ) { |
if (ftmp == NULL) ftmp = strdup(""); |
if (ftmp == NULL) ftmp = ch_strdup(""); |
*fstr = ch_malloc( 4 + strlen( ftmp ) ); |
*fstr = ch_malloc( 4 + strlen( ftmp ) ); |
sprintf( *fstr, "(!%s)", ftmp ); |
sprintf( *fstr, "(!%s)", ftmp ); |
free( ftmp ); |
free( ftmp ); |
Line 166 get_filter( Connection *conn, BerElement
|
Line 163 get_filter( Connection *conn, BerElement
|
break; |
break; |
|
|
default: |
default: |
Debug( LDAP_DEBUG_ANY, "unknown filter type %d\n", f->f_choice, |
Debug( LDAP_DEBUG_ANY, "unknown filter type %lu\n", |
0, 0 ); |
f->f_choice, 0, 0 ); |
err = LDAP_PROTOCOL_ERROR; |
err = LDAP_PROTOCOL_ERROR; |
break; |
break; |
} |
} |
Line 177 get_filter( Connection *conn, BerElement
|
Line 174 get_filter( Connection *conn, BerElement
|
if ( *fstr != NULL ) { |
if ( *fstr != NULL ) { |
free( *fstr ); |
free( *fstr ); |
} |
} |
|
} else { |
|
*filt = f; |
} |
} |
|
|
Debug( LDAP_DEBUG_FILTER, "end get_filter %d\n", err, 0, 0 ); |
Debug( LDAP_DEBUG_FILTER, "end get_filter %d\n", err, 0, 0 ); |
Line 239 get_substring_filter(
|
Line 238 get_substring_filter(
|
(void) ber_skip_tag( ber, &len ); |
(void) ber_skip_tag( ber, &len ); |
} |
} |
#endif |
#endif |
if ( ber_scanf( ber, "{a", &f->f_sub_type ) == LBER_ERROR ) { |
if ( ber_scanf( ber, "{a" /*}*/, &f->f_sub_type ) == LBER_ERROR ) { |
return( LDAP_PROTOCOL_ERROR ); |
return( LDAP_PROTOCOL_ERROR ); |
} |
} |
attr_normalize( f->f_sub_type ); |
attr_normalize( f->f_sub_type ); |
Line 373 filter_free( Filter *f )
|
Line 372 filter_free( Filter *f )
|
break; |
break; |
|
|
default: |
default: |
Debug( LDAP_DEBUG_ANY, "unknown filter type %d\n", f->f_choice, |
Debug( LDAP_DEBUG_ANY, "unknown filter type %lu\n", |
0, 0 ); |
f->f_choice, 0, 0 ); |
break; |
break; |
} |
} |
free( f ); |
free( f ); |
Line 445 filter_print( Filter *f )
|
Line 444 filter_print( Filter *f )
|
break; |
break; |
|
|
default: |
default: |
fprintf( stderr, "unknown type %d", f->f_choice ); |
fprintf( stderr, "unknown type %lu", f->f_choice ); |
break; |
break; |
} |
} |
} |
} |