X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=libraries%2Flibldap%2Fgetfilter.c;h=fcd27166bfe9c4960e78a8520e852d8cac5e3fde;hb=e4f2c9425afc0f594212aa1697bad779733b96b9;hp=efafeb5067658b1e2ff937a6fd4cb163a5a13542;hpb=403f4479bc9f9a864122d4aeecf7284408918302;p=openldap diff --git a/libraries/libldap/getfilter.c b/libraries/libldap/getfilter.c index efafeb5067..fcd27166bf 100644 --- a/libraries/libldap/getfilter.c +++ b/libraries/libldap/getfilter.c @@ -1,6 +1,6 @@ /* $OpenLDAP$ */ /* - * Copyright 1998-1999 The OpenLDAP Foundation, All Rights Reserved. + * Copyright 1998-2002 The OpenLDAP Foundation, All Rights Reserved. * COPYING RESTRICTIONS APPLY, see COPYRIGHT file */ /* Portions @@ -16,7 +16,6 @@ #include -#include #include #include #include @@ -36,54 +35,7 @@ static int break_into_words LDAP_P(( #define FILT_MAX_LINE_LEN 1024 -LDAPFiltDesc * -ldap_init_getfilter( LDAP_CONST char *fname ) -{ - FILE *fp; - char *buf; - long rlen, len; - int eof; - LDAPFiltDesc *lfdp; - - if (( fp = fopen( fname, "r" )) == NULL ) { - return( NULL ); - } - - if ( fseek( fp, 0L, SEEK_END ) != 0 ) { /* move to end to get len */ - fclose( fp ); - return( NULL ); - } - - len = ftell( fp ); - - if ( fseek( fp, 0L, SEEK_SET ) != 0 ) { /* back to start of file */ - fclose( fp ); - return( NULL ); - } - - if (( buf = LDAP_MALLOC( (size_t)len )) == NULL ) { - fclose( fp ); - return( NULL ); - } - - rlen = fread( buf, 1, (size_t)len, fp ); - eof = feof( fp ); - fclose( fp ); - - if ( rlen != len && !eof ) { /* error: didn't get the whole file */ - LDAP_FREE( buf ); - return( NULL ); - } - - - lfdp = ldap_init_getfilter_buf( buf, rlen ); - LDAP_FREE( buf ); - - return( lfdp ); -} - - -LDAPFiltDesc * +static LDAPFiltDesc * ldap_init_getfilter_buf( char *buf, ber_len_t buflen ) { LDAPFiltDesc *lfdp; @@ -102,7 +54,7 @@ ldap_init_getfilter_buf( char *buf, ber_len_t buflen ) fip = NULL; tag = NULL; - while ( buflen > 0 && ( tokcnt = next_line_tokens( &buf, &buflen, &tok )) + while ( buflen > 0 && ( tokcnt = ldap_int_next_line_tokens( &buf, &buflen, &tok )) > 0 ) { switch( tokcnt ) { @@ -123,15 +75,14 @@ ldap_init_getfilter_buf( char *buf, ber_len_t buflen ) nextflp->lfl_tag = LDAP_STRDUP( tag ); nextflp->lfl_pattern = tok[ 0 ]; if ( (rc = regcomp( &re, nextflp->lfl_pattern, 0 )) != 0 ) { -#ifdef LDAP_LIBUI char error[512]; regerror(rc, &re, error, sizeof(error)); ldap_getfilter_free( lfdp ); - fprintf( stderr, "bad regular expression %s, %s\n", - nextflp->lfl_pattern, error ); + Debug( LDAP_DEBUG_ANY, "ldap_init_get_filter_buf: " + "bad regular expression %s, %s\n", + nextflp->lfl_pattern, error, 0 ); errno = EINVAL; -#endif /* LDAP_LIBUI */ - free_strarray( tok ); + LDAP_VFREE( tok ); return( NULL ); } regfree(&re); @@ -157,7 +108,7 @@ ldap_init_getfilter_buf( char *buf, ber_len_t buflen ) if (( nextfip = (LDAPFiltInfo *)LDAP_CALLOC( 1, sizeof( LDAPFiltInfo ))) == NULL ) { ldap_getfilter_free( lfdp ); - free_strarray( tok ); + LDAP_VFREE( tok ); return( NULL ); } if ( fip == NULL ) { /* first one */ @@ -177,7 +128,7 @@ ldap_init_getfilter_buf( char *buf, ber_len_t buflen ) } else if ( strcasecmp( tok[ 2 ], "base" ) == 0 ) { nextfip->lfi_scope = LDAP_SCOPE_BASE; } else { - free_strarray( tok ); + LDAP_VFREE( tok ); ldap_getfilter_free( lfdp ); errno = EINVAL; return( NULL ); @@ -194,7 +145,7 @@ ldap_init_getfilter_buf( char *buf, ber_len_t buflen ) break; default: - free_strarray( tok ); + LDAP_VFREE( tok ); ldap_getfilter_free( lfdp ); errno = EINVAL; return( NULL ); @@ -208,21 +159,51 @@ ldap_init_getfilter_buf( char *buf, ber_len_t buflen ) return( lfdp ); } - -void -ldap_setfilteraffixes( LDAPFiltDesc *lfdp, LDAP_CONST char *prefix, LDAP_CONST char *suffix ) +LDAPFiltDesc * +ldap_init_getfilter( LDAP_CONST char *fname ) { - if ( lfdp->lfd_filtprefix != NULL ) { - LDAP_FREE( lfdp->lfd_filtprefix ); + FILE *fp; + char *buf; + long rlen, len; + int eof; + LDAPFiltDesc *lfdp; + + if (( fp = fopen( fname, "r" )) == NULL ) { + return( NULL ); } - lfdp->lfd_filtprefix = ( prefix == NULL ) ? NULL : LDAP_STRDUP( prefix ); - if ( lfdp->lfd_filtsuffix != NULL ) { - LDAP_FREE( lfdp->lfd_filtsuffix ); + if ( fseek( fp, 0L, SEEK_END ) != 0 ) { /* move to end to get len */ + fclose( fp ); + return( NULL ); + } + + len = ftell( fp ); + + if ( fseek( fp, 0L, SEEK_SET ) != 0 ) { /* back to start of file */ + fclose( fp ); + return( NULL ); + } + + if (( buf = LDAP_MALLOC( (size_t)len )) == NULL ) { + fclose( fp ); + return( NULL ); } - lfdp->lfd_filtsuffix = ( suffix == NULL ) ? NULL : LDAP_STRDUP( suffix ); -} + rlen = fread( buf, 1, (size_t)len, fp ); + eof = feof( fp ); + fclose( fp ); + + if ( rlen != len && !eof ) { /* error: didn't get the whole file */ + LDAP_FREE( buf ); + return( NULL ); + } + + + lfdp = ldap_init_getfilter_buf( buf, rlen ); + LDAP_FREE( buf ); + + return( lfdp ); +} LDAPFiltInfo * ldap_getfirstfilter( @@ -286,6 +267,16 @@ ldap_getfirstfilter( return( ldap_getnextfilter( lfdp )); } +static void +ldap_build_filter( + char *filtbuf, + ber_len_t buflen, + LDAP_CONST char *pattern, + LDAP_CONST char *prefix, + LDAP_CONST char *suffix, + LDAP_CONST char *attr, + LDAP_CONST char *value, + char **valwords ); LDAPFiltInfo * ldap_getnextfilter( LDAPFiltDesc *lfdp ) @@ -311,8 +302,7 @@ ldap_getnextfilter( LDAPFiltDesc *lfdp ) return( &lfdp->lfd_retfi ); } - -void +static void ldap_build_filter( char *filtbuf, ber_len_t buflen, @@ -347,12 +337,12 @@ ldap_build_filter( if ( *p == '%' ) { ++p; if ( *p == 'v' ) { - if ( isdigit( (unsigned char) p[1] )) { + if ( LDAP_DIGIT( (unsigned char) p[1] )) { ++p; wordnum = *p - '1'; if ( *(p+1) == '-' ) { ++p; - if ( isdigit( (unsigned char) p[1] )) { + if ( LDAP_DIGIT( (unsigned char) p[1] )) { ++p; endwordnum = *p - '1'; /* e.g., "%v2-4" */ if ( endwordnum > wordcount - 1 ) { @@ -371,7 +361,7 @@ ldap_build_filter( *f++ = ' '; } slen = strlen( valwords[ i ] ); - SAFEMEMCPY( f, valwords[ i ], slen ); + AC_MEMCPY( f, valwords[ i ], slen ); f += slen; } } @@ -380,17 +370,17 @@ ldap_build_filter( if ( wordcount > 0 ) { wordnum = wordcount - 1; slen = strlen( valwords[ wordnum ] ); - SAFEMEMCPY( f, valwords[ wordnum ], slen ); + AC_MEMCPY( f, valwords[ wordnum ], slen ); f += slen; } } else if ( value != NULL ) { slen = strlen( value ); - SAFEMEMCPY( f, value, slen ); + AC_MEMCPY( f, value, slen ); f += slen; } } else if ( *p == 'a' && attr != NULL ) { slen = strlen( attr ); - SAFEMEMCPY( f, attr, slen ); + AC_MEMCPY( f, attr, slen ); f += slen; } else { *f++ = *p; @@ -414,7 +404,6 @@ ldap_build_filter( } } - static int break_into_words( /* LDAP_CONST */ char *str, LDAP_CONST char *delims, char ***wordsp ) {