X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fsearch.c;h=2779fe0bdd8f4aa0e64f672c810e0a7d80224a12;hb=cbfbb7fb3b6090698368b558f96a3988a05774c6;hp=013075fdb183462f87e04d2e54ac2e7ed9179343;hpb=3952bc8e95a2b21aced14f890028f12d00e191fa;p=openldap diff --git a/servers/slapd/search.c b/servers/slapd/search.c index 013075fdb1..2779fe0bdd 100644 --- a/servers/slapd/search.c +++ b/servers/slapd/search.c @@ -30,9 +30,9 @@ do_search( int i, err; int scope, deref, attrsonly; int sizelimit, timelimit; - char *base, *fstr; - Filter *filter; - char **attrs; + char *base = NULL, *fstr = NULL; + Filter *filter = NULL; + char **attrs = NULL; Backend *be; Debug( LDAP_DEBUG_TRACE, "do_search\n", 0, 0, 0 ); @@ -65,42 +65,34 @@ do_search( if ( ber_scanf( op->o_ber, "{aiiiib", &base, &scope, &deref, &sizelimit, &timelimit, &attrsonly ) == LBER_ERROR ) { send_ldap_result( conn, op, LDAP_PROTOCOL_ERROR, NULL, "" ); - return; + goto return_results; } if ( scope != LDAP_SCOPE_BASE && scope != LDAP_SCOPE_ONELEVEL && scope != LDAP_SCOPE_SUBTREE ) { - free( base ); send_ldap_result( conn, op, LDAP_PROTOCOL_ERROR, NULL, "Unknown search scope" ); - return; + goto return_results; } - (void) dn_normalize( base ); + + (void) dn_normalize_case( base ); Debug( LDAP_DEBUG_ARGS, "SRCH \"%s\" %d %d", base, scope, deref ); Debug( LDAP_DEBUG_ARGS, " %d %d %d\n", sizelimit, timelimit, attrsonly); /* filter - returns a "normalized" version */ - filter = NULL; - fstr = NULL; if ( (err = get_filter( conn, op->o_ber, &filter, &fstr )) != 0 ) { - if ( fstr != NULL ) { - free( fstr ); - } - free( base ); send_ldap_result( conn, op, err, NULL, "Bad search filter" ); - return; + goto return_results; } Debug( LDAP_DEBUG_ARGS, " filter: %s\n", fstr, 0, 0 ); /* attributes */ - attrs = NULL; if ( ber_scanf( op->o_ber, "{v}}", &attrs ) == LBER_ERROR ) { - free( base ); - free( fstr ); send_ldap_result( conn, op, LDAP_PROTOCOL_ERROR, NULL, "" ); - return; + goto return_results; } + Debug( LDAP_DEBUG_ARGS, " attrs:", 0, 0, 0 ); if ( attrs != NULL ) { for ( i = 0; attrs[i] != NULL; i++ ) { @@ -117,27 +109,21 @@ do_search( #if defined( SLAPD_MONITOR_DN ) || defined( SLAPD_CONFIG_DN ) || defined( SLAPD_SCHEMA_DN ) if ( scope == LDAP_SCOPE_BASE ) { #if defined( SLAPD_MONITOR_DN ) - if ( strcasecmp( base, SLAPD_MONITOR_DN ) == 0 ) { - free( base ); - free( fstr ); + if ( strcmp( base, SLAPD_MONITOR_DN ) == 0 ) { monitor_info( conn, op ); - return; + goto return_results; } #endif #if defined( SLAPD_CONFIG_DN ) - if ( strcasecmp( base, SLAPD_CONFIG_DN ) == 0 ) { - free( base ); - free( fstr ); + if ( strcmp( base, SLAPD_CONFIG_DN ) == 0 ) { config_info( conn, op ); - return; + goto return_results; } #endif #if defined( SLAPD_SCHEMA_DN ) - if ( strcasecmp( base, SLAPD_SCHEMA_DN ) == 0 ) { - free( base ); - free( fstr ); + if ( strcmp( base, SLAPD_SCHEMA_DN ) == 0 ) { schema_info( conn, op ); - return; + goto return_results; } #endif } @@ -152,17 +138,11 @@ do_search( send_ldap_result( conn, op, LDAP_PARTIAL_RESULTS, NULL, default_referral ); - free( base ); - free( fstr ); - filter_free( filter ); - if ( attrs != NULL ) { - charray_free( attrs ); - } - return; + goto return_results; } - /* translate the base if it matches an aliased base part */ - base = suffixAlias ( base, op, be ); + /* translate the base if it matches an aliased base part */ + base = suffixAlias ( base, op, be ); /* actually do the search and send the result(s) */ if ( be->be_search != NULL ) { @@ -173,9 +153,10 @@ do_search( "Function not implemented" ); } - free( base ); - free( fstr ); - filter_free( filter ); +return_results:; + if( base != NULL) free( base ); + if( fstr != NULL) free( fstr ); + if( filter != NULL) filter_free( filter ); if ( attrs != NULL ) { charray_free( attrs ); }