X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fback-ldbm%2Fsearch.c;h=e2e5b113c9bbf82dc9031ab4de6ed2164026e5a3;hb=b0b3eff457f0e431c4fd094d3d9cfeb6383df91d;hp=52461e5b95f044221eeed5150482abf4bdfcb976;hpb=d0868eae95b318d9a60dd781af43c7a5fdf3d610;p=openldap diff --git a/servers/slapd/back-ldbm/search.c b/servers/slapd/back-ldbm/search.c index 52461e5b95..e2e5b113c9 100644 --- a/servers/slapd/back-ldbm/search.c +++ b/servers/slapd/back-ldbm/search.c @@ -1,8 +1,17 @@ /* search.c - ldbm backend search function */ /* $OpenLDAP$ */ -/* - * Copyright 1998-2003 The OpenLDAP Foundation, All Rights Reserved. - * COPYING RESTRICTIONS APPLY, see COPYRIGHT file +/* This work is part of OpenLDAP Software . + * + * Copyright 1998-2003 The OpenLDAP Foundation. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted only as authorized by the OpenLDAP + * Public License. + * + * A copy of this license is available in the file LICENSE in the + * top-level directory of the distribution or, alternatively, at + * . */ #include "portable.h" @@ -41,10 +50,6 @@ ldbm_back_search( int manageDSAit = get_manageDSAit( op ); int cscope = LDAP_SCOPE_DEFAULT; -#ifdef LDAP_CACHING - Entry cache_base_entry; -#endif /* LDAP_CACHING */ - struct slap_limits_set *limit = NULL; int isroot = 0; @@ -57,7 +62,6 @@ ldbm_back_search( /* grab giant lock for reading */ ldap_pvt_thread_rdwr_rlock(&li->li_giant_rwlock); -#ifndef LDAP_CACHING if ( op->o_req_ndn.bv_len == 0 ) { /* DIT root special case */ e = (Entry *) &slap_entry_root; @@ -65,25 +69,6 @@ ldbm_back_search( /* need normalized dn below */ ber_dupbv( &realbase, &e->e_nname ); -#else /* LDAP_CACHING */ - if ( op->o_caching_on || op->o_req_ndn.bv_len == 0 ) { - if (op->o_req_ndn.bv_len == 0) { - e = (Entry *) &slap_entry_root; - /* need normalized dn below */ - ber_dupbv( &realbase, &e->e_nname ); - } else { - if ((op->oq_search.rs_scope == LDAP_SCOPE_BASE) - && (e = dn2entry_r( op->o_bd, &op->o_req_ndn, &matched ))) - { - candidates = base_candidate(op->o_bd, e); - cache_return_entry_r( &li->li_cache, e ); - goto searchit; - } - cache_base_entry.e_nname = op->o_req_ndn; - e = &cache_base_entry; - } -#endif /* LDAP_CACHING */ - candidates = search_candidates( op, e, op->oq_search.rs_filter, op->oq_search.rs_scope, op->oq_search.rs_deref, manageDSAit || get_domainScope(op) ); @@ -135,11 +120,9 @@ ldbm_back_search( ber_bvarray_free( rs->sr_ref ); ber_memfree( matched_dn.bv_val ); -#ifdef LDAP_SYNCREPL + rs->sr_ref = NULL; + rs->sr_matched = NULL; return LDAP_REFERRAL; -#else - return 1; -#endif } if (!manageDSAit && is_entry_referral( e ) ) { @@ -183,11 +166,9 @@ ldbm_back_search( } ber_memfree( matched_dn.bv_val ); -#ifdef LDAP_SYNCREPL + rs->sr_ref = NULL; + rs->sr_matched = NULL; return LDAP_OTHER; -#else - return 1; -#endif } if ( is_entry_alias( e ) ) { @@ -221,35 +202,16 @@ searchit: Debug( LDAP_DEBUG_TRACE, "ldbm_search: no candidates\n", 0, 0, 0 ); #endif -#ifdef LDAP_CACHING - if ( op->o_caching_on ) { - ldap_pvt_thread_rdwr_runlock(&li->li_giant_rwlock); - } -#endif /* LDAP_CACHING */ rs->sr_err = LDAP_SUCCESS; send_ldap_result( op, rs ); -#ifdef LDAP_CACHING - if ( op->o_caching_on ) { - ldap_pvt_thread_rdwr_rlock(&li->li_giant_rwlock); - } -#endif /* LDAP_CACHING */ - -#ifdef LDAP_SYNCREPL - rc = LDAP_OTHER; -#else - rc = 1; -#endif + rc = LDAP_SUCCESS; goto done; } /* if not root, get appropriate limits */ -#ifndef LDAP_CACHING if ( be_isroot( op->o_bd, &op->o_ndn ) ) -#else /* LDAP_CACHING */ - if ( op->o_caching_on || be_isroot( op->o_bd, &op->o_ndn ) ) -#endif /* LDAP_CACHING */ { /* * FIXME: I'd consider this dangerous if someone @@ -265,7 +227,7 @@ searchit: if ( ID_BLOCK_NIDS( candidates ) > (unsigned) limit->lms_s_unchecked ) { send_ldap_error( op, rs, LDAP_ADMINLIMIT_EXCEEDED, NULL ); - rc = 0; + rc = LDAP_SUCCESS; goto done; } } @@ -298,7 +260,7 @@ searchit: send_ldap_error( op, rs, LDAP_ADMINLIMIT_EXCEEDED, NULL ); - rc = 0; + rc = LDAP_SUCCESS; goto done; } @@ -322,7 +284,7 @@ searchit: send_ldap_error( op, rs, LDAP_ADMINLIMIT_EXCEEDED, NULL ); - rc = 0; + rc = LDAP_SUCCESS; goto done; } @@ -342,7 +304,7 @@ searchit: /* check for abandon */ if ( op->o_abandon ) { - rc = 0; + rc = LDAP_SUCCESS; goto done; } @@ -350,7 +312,7 @@ searchit: if ( op->oq_search.rs_tlimit != -1 && slap_get_time() > stoptime ) { rs->sr_err = LDAP_TIMELIMIT_EXCEEDED; send_ldap_result( op, rs ); - rc = 0; + rc = LDAP_SUCCESS; goto done; } @@ -391,10 +353,6 @@ searchit: } #endif -#ifdef LDAP_CACHING - if ( !op->o_caching_on ) { -#endif /* LDAP_CACHING */ - if ( op->oq_search.rs_deref & LDAP_DEREF_SEARCHING && is_entry_alias( e ) ) { Entry *matched; int err; @@ -493,15 +451,9 @@ searchit: goto loop_continue; } -#ifdef LDAP_CACHING - } -#endif /* LDAP_CACHING */ - -#ifdef LDAP_SYNCREPL if ( !manageDSAit && is_entry_glue( e )) { goto loop_continue; } -#endif /* if it matches the filter and scope, send it */ result = test_filter( op, e, op->oq_search.rs_filter ); @@ -531,28 +483,14 @@ searchit: cache_return_entry_r( &li->li_cache, e ); rs->sr_err = LDAP_SIZELIMIT_EXCEEDED; send_ldap_result( op, rs ); - rc = 0; + rc = LDAP_SUCCESS; goto done; } if (e) { -#ifdef LDAP_CACHING - if ( op->o_caching_on ) { - ldap_pvt_thread_rdwr_runlock(&li->li_giant_rwlock); - cache_return_entry_r( &li->li_cache, e ); - } -#endif /* LDAP_CACHING */ - result = send_search_entry( op, rs ); -#ifdef LDAP_CACHING - if ( op->o_caching_on ) { - ldap_pvt_thread_rdwr_rlock( &li->li_giant_rwlock ); - } -#endif /* LDAP_CACHING */ - - switch (result) { case 0: /* entry sent ok */ break; @@ -560,7 +498,7 @@ searchit: break; case -1: /* connection closed */ cache_return_entry_r( &li->li_cache, e ); - rc = 0; + rc = LDAP_SUCCESS; goto done; } } @@ -591,13 +529,7 @@ searchit: loop_continue: if( e != NULL ) { /* free reader lock */ -#ifndef LDAP_CACHING cache_return_entry_r( &li->li_cache, e ); -#else /* LDAP_CACHING */ - if ( !op->o_caching_on ) { - cache_return_entry_r( &li->li_cache, e ); - } -#endif /* LDAP_CACHING */ } ldap_pvt_thread_yield(); @@ -607,7 +539,7 @@ loop_continue: rs->sr_ref = rs->sr_v2ref; send_ldap_result( op, rs ); - rc = 0; + rc = LDAP_SUCCESS; done: ldap_pvt_thread_rdwr_runlock(&li->li_giant_rwlock);