X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=libraries%2Flibldap%2Fgetfilter.c;h=fcd27166bfe9c4960e78a8520e852d8cac5e3fde;hb=e4f2c9425afc0f594212aa1697bad779733b96b9;hp=c837631e6d65f3acd36ea3b4dfca7f73a62cc223;hpb=49d73e12a720cfe052a335d82e67994ff261d21c;p=openldap diff --git a/libraries/libldap/getfilter.c b/libraries/libldap/getfilter.c index c837631e6d..fcd27166bf 100644 --- a/libraries/libldap/getfilter.c +++ b/libraries/libldap/getfilter.c @@ -1,6 +1,6 @@ /* $OpenLDAP$ */ /* - * Copyright 1998-2000 The OpenLDAP Foundation, All Rights Reserved. + * Copyright 1998-2002 The OpenLDAP Foundation, All Rights Reserved. * COPYING RESTRICTIONS APPLY, see COPYRIGHT file */ /* Portions @@ -35,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; @@ -122,14 +75,13 @@ 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 */ LDAP_VFREE( tok ); return( NULL ); } @@ -207,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( @@ -285,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 ) @@ -310,8 +302,7 @@ ldap_getnextfilter( LDAPFiltDesc *lfdp ) return( &lfdp->lfd_retfi ); } - -void +static void ldap_build_filter( char *filtbuf, ber_len_t buflen, @@ -370,7 +361,7 @@ ldap_build_filter( *f++ = ' '; } slen = strlen( valwords[ i ] ); - SAFEMEMCPY( f, valwords[ i ], slen ); + AC_MEMCPY( f, valwords[ i ], slen ); f += slen; } } @@ -379,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; @@ -413,7 +404,6 @@ ldap_build_filter( } } - static int break_into_words( /* LDAP_CONST */ char *str, LDAP_CONST char *delims, char ***wordsp ) {