Commit 3f9b2317 authored by Quanah Gibson-Mount's avatar Quanah Gibson-Mount
Browse files

ITS#5730

parent 66d43774
......@@ -29,7 +29,7 @@ OpenLDAP 2.4.12 Release (2008/10/08)
Fixed slapd syncrepl runqueue interval (ITS#5719)
Fixed slapd-bdb entry return if attr not present (ITS#5650)
Fixed slapd-bdb olcDbMode syntax (ITS#5713)
Fixed slapd-bdb/hdb release search entries earlier (ITS#5728)
Fixed slapd-bdb/hdb release search entries earlier (ITS#5728,ITS#5730)
Fixed slapd-bdb/hdb subtree search with empty suffix (ITS#5729)
Fixed slapd-dnssrv memory handling (ITS#5691)
Fixed slapd-ldap,slapd-meta invalid filter behavior (ITS#5614)
......
......@@ -852,20 +852,51 @@ fetch_entry_retry:
if ( !manageDSAit && op->oq_search.rs_scope != LDAP_SCOPE_BASE
&& is_entry_referral( e ) )
{
struct bdb_op_info bois;
struct bdb_lock_info blis;
BerVarray erefs = get_entry_referrals( op, e );
rs->sr_ref = referral_rewrite( erefs, &e->e_name, NULL,
op->oq_search.rs_scope == LDAP_SCOPE_ONELEVEL
? LDAP_SCOPE_BASE : LDAP_SCOPE_SUBTREE );
/* free reader lock */
/* Must set lockinfo so that entry_release will work */
if (!opinfo) {
bois.boi_oe.oe_key = bdb;
bois.boi_txn = NULL;
bois.boi_err = 0;
bois.boi_acl_cache = op->o_do_not_cache;
bois.boi_flag = BOI_DONTFREE;
bois.boi_locks = &blis;
blis.bli_next = NULL;
LDAP_SLIST_INSERT_HEAD( &op->o_extra, &bois.boi_oe,
oe_next );
} else {
blis.bli_next = opinfo->boi_locks;
opinfo->boi_locks = &blis;
}
blis.bli_id = e->e_id;
blis.bli_lock = lock;
blis.bli_flag = BLI_DONTFREE;
rs->sr_flags = REP_ENTRY_MUSTRELEASE;
send_search_reference( op, rs );
if ( blis.bli_flag ) {
#ifdef SLAP_ZONE_ALLOC
slap_zn_runlock(bdb->bi_cache.c_zctx, e);
slap_zn_runlock(bdb->bi_cache.c_zctx, e);
#endif
bdb_cache_return_entry_r( bdb, e, &lock );
bdb_cache_return_entry_r(bdb, e, &lock);
if ( opinfo ) {
opinfo->boi_locks = blis.bli_next;
} else {
LDAP_SLIST_REMOVE( &op->o_extra, &bois.boi_oe,
OpExtra, oe_next );
}
}
rs->sr_entry = NULL;
e = NULL;
send_search_reference( op, rs );
ber_bvarray_free( rs->sr_ref );
ber_bvarray_free( erefs );
rs->sr_ref = NULL;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment