From 28bae08ce944295d02b2f3fd1aa9067bad4f97ef Mon Sep 17 00:00:00 2001 From: Howard Chu Date: Fri, 23 May 2003 02:31:33 +0000 Subject: [PATCH] Import ITS#2522 unindexed filter fix from HEAD --- CHANGES | 1 + servers/slapd/back-bdb/filterindex.c | 53 ++++++++++++++++------------ 2 files changed, 32 insertions(+), 22 deletions(-) diff --git a/CHANGES b/CHANGES index 9ca80d23f2..36cf486205 100644 --- a/CHANGES +++ b/CHANGES @@ -4,6 +4,7 @@ OpenLDAP 2.1.21 Engineering Fixed liblber ber_get_next trickle bug (ITS#2490) Fixed ldapsearch -p without -h bug (ITS#2532) Fixed slapd option ordering bug (ITS#2217) + Fixed back-bdb unindexed filter bug (ITS#2522) Removed lint Documentation Misc man page updates diff --git a/servers/slapd/back-bdb/filterindex.c b/servers/slapd/back-bdb/filterindex.c index ca48a456eb..b45286c3ca 100644 --- a/servers/slapd/back-bdb/filterindex.c +++ b/servers/slapd/back-bdb/filterindex.c @@ -231,7 +231,6 @@ list_candidates( #else Debug( LDAP_DEBUG_FILTER, "=> bdb_list_candidates 0x%x\n", ftype, 0, 0 ); #endif - for ( f = flist; f != NULL; f = f->f_next ) { rc = bdb_filter_candidates( be, f, save, tmp, save+BDB_IDL_UM_SIZE ); @@ -308,8 +307,9 @@ presence_candidates( desc->ad_cname.bv_val, 0, 0 ); #endif + BDB_IDL_ALL( bdb, ids ); + if( desc == slap_schema.si_ad_objectClass ) { - BDB_IDL_ALL( bdb, ids ); return 0; } @@ -328,7 +328,7 @@ presence_candidates( "returned=%d\n", desc->ad_cname.bv_val, rc, 0 ); #endif - return rc; + return 0; } if( db == NULL ) { @@ -342,7 +342,7 @@ presence_candidates( "<= bdb_presence_candidates: (%s) not indexed\n", desc->ad_cname.bv_val, 0, 0 ); #endif - return -1; + return 0; } if( prefix.bv_val == NULL ) { @@ -401,6 +401,7 @@ equality_candidates( ID *ids, ID *tmp ) { + struct bdb_info *bdb = (struct bdb_info *) be->be_private; DB *db; int i; int rc; @@ -417,6 +418,8 @@ equality_candidates( ava->aa_desc->ad_cname.bv_val, 0, 0 ); #endif + BDB_IDL_ALL( bdb, ids ); + rc = bdb_index_param( be, ava->aa_desc, LDAP_FILTER_EQUALITY, &db, &mask, &prefix ); @@ -432,7 +435,7 @@ equality_candidates( "index_param failed (%d)\n", ava->aa_desc->ad_cname.bv_val, rc, 0 ); #endif - return rc; + return 0; } if ( db == NULL ) { @@ -445,16 +448,16 @@ equality_candidates( "<= bdb_equality_candidates: (%s) not indexed\n", ava->aa_desc->ad_cname.bv_val, 0, 0 ); #endif - return -1; + return 0; } mr = ava->aa_desc->ad_type->sat_equality; if( !mr ) { - return -1; + return 0; } if( !mr->smr_filter ) { - return -1; + return 0; } rc = (mr->smr_filter)( @@ -478,7 +481,7 @@ equality_candidates( "MR filter failed (%d)\n", prefix.bv_val, ava->aa_desc->ad_cname.bv_val, rc ); #endif - return rc; + return 0; } if( keys == NULL ) { @@ -491,7 +494,7 @@ equality_candidates( "<= bdb_equality_candidates: (%s) no keys\n", ava->aa_desc->ad_cname.bv_val, 0, 0 ); #endif - return -1; + return 0; } for ( i= 0; keys[i].bv_val != NULL; i++ ) { @@ -565,6 +568,7 @@ approx_candidates( ID *ids, ID *tmp ) { + struct bdb_info *bdb = (struct bdb_info *) be->be_private; DB *db; int i; int rc; @@ -581,6 +585,8 @@ approx_candidates( ava->aa_desc->ad_cname.bv_val, 0, 0 ); #endif + BDB_IDL_ALL( bdb, ids ); + rc = bdb_index_param( be, ava->aa_desc, LDAP_FILTER_APPROX, &db, &mask, &prefix ); @@ -596,7 +602,7 @@ approx_candidates( "index_param failed (%d)\n", ava->aa_desc->ad_cname.bv_val, rc, 0 ); #endif - return rc; + return 0; } if ( db == NULL ) { @@ -609,7 +615,7 @@ approx_candidates( "<= bdb_approx_candidates: (%s) not indexed\n", ava->aa_desc->ad_cname.bv_val, 0, 0 ); #endif - return -1; + return 0; } mr = ava->aa_desc->ad_type->sat_approx; @@ -619,11 +625,11 @@ approx_candidates( } if( !mr ) { - return -1; + return 0; } if( !mr->smr_filter ) { - return -1; + return 0; } rc = (mr->smr_filter)( @@ -647,7 +653,7 @@ approx_candidates( "MR filter failed (%d)\n", prefix.bv_val, ava->aa_desc->ad_cname.bv_val, rc ); #endif - return rc; + return 0; } if( keys == NULL ) { @@ -660,7 +666,7 @@ approx_candidates( "<= bdb_approx_candidates: (%s) no keys (%s)\n", prefix.bv_val, ava->aa_desc->ad_cname.bv_val, 0 ); #endif - return -1; + return 0; } for ( i= 0; keys[i].bv_val != NULL; i++ ) { @@ -732,6 +738,7 @@ substring_candidates( ID *ids, ID *tmp ) { + struct bdb_info *bdb = (struct bdb_info *) be->be_private; DB *db; int i; int rc; @@ -748,6 +755,8 @@ substring_candidates( sub->sa_desc->ad_cname.bv_val, 0, 0 ); #endif + BDB_IDL_ALL( bdb, ids ); + rc = bdb_index_param( be, sub->sa_desc, LDAP_FILTER_SUBSTRINGS, &db, &mask, &prefix ); @@ -763,7 +772,7 @@ substring_candidates( "index_param failed (%d)\n", sub->sa_desc->ad_cname.bv_val, rc, 0 ); #endif - return rc; + return 0; } if ( db == NULL ) { @@ -776,17 +785,17 @@ substring_candidates( "<= bdb_substring_candidates: (%s) not indexed\n", sub->sa_desc->ad_cname.bv_val, 0, 0 ); #endif - return -1; + return 0; } mr = sub->sa_desc->ad_type->sat_substr; if( !mr ) { - return -1; + return 0; } if( !mr->smr_filter ) { - return -1; + return 0; } rc = (mr->smr_filter)( @@ -810,7 +819,7 @@ substring_candidates( "MR filter failed (%d)\n", sub->sa_desc->ad_cname.bv_val, rc, 0 ); #endif - return rc; + return 0; } if( keys == NULL ) { @@ -823,7 +832,7 @@ substring_candidates( "<= bdb_substring_candidates: (0x%04lx) no keys (%s)\n", mask, sub->sa_desc->ad_cname.bv_val, 0 ); #endif - return -1; + return 0; } for ( i= 0; keys[i].bv_val != NULL; i++ ) { -- 2.47.2