mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-01-06 10:46:21 +08:00
ITS#4838 fix fake root handling broken by prev commit
This commit is contained in:
parent
fb583c3071
commit
2d3c48ccd5
@ -349,7 +349,8 @@ bdb_dn2idl(
|
||||
ndn->bv_val, 0, 0 );
|
||||
|
||||
#ifndef BDB_MULTIPLE_SUFFIXES
|
||||
if ( prefix == DN_SUBTREE_PREFIX && ei->bei_parent->bei_id == 0 ) {
|
||||
if ( prefix == DN_SUBTREE_PREFIX
|
||||
&& ( ei->bei_id == 0 || ei->bei_parent->bei_id == 0 )) {
|
||||
BDB_IDL_ALL(bdb, ids);
|
||||
return 0;
|
||||
}
|
||||
@ -1077,7 +1078,8 @@ hdb_dn2idl(
|
||||
|
||||
#ifndef BDB_MULTIPLE_SUFFIXES
|
||||
if ( op->ors_scope != LDAP_SCOPE_ONELEVEL &&
|
||||
ei->bei_parent->bei_id == 0 )
|
||||
( ei->bei_id == 0 ||
|
||||
ei->bei_parent->bei_id == 0 ))
|
||||
{
|
||||
BDB_IDL_ALL( bdb, ids );
|
||||
return 0;
|
||||
|
@ -79,6 +79,15 @@ bdb_db_init( BackendDB *be )
|
||||
ldap_pvt_thread_rdwr_init( &bdb->bi_idl_tree_rwlock );
|
||||
ldap_pvt_thread_mutex_init( &bdb->bi_idl_tree_lrulock );
|
||||
|
||||
{
|
||||
Entry *e = entry_alloc();
|
||||
e->e_id = 0;
|
||||
e->e_private = &bdb->bi_cache.c_dntree;
|
||||
BER_BVSTR( &e->e_name, "" );
|
||||
BER_BVSTR( &e->e_nname, "" );
|
||||
bdb->bi_cache.c_dntree.bei_e = e;
|
||||
}
|
||||
|
||||
be->be_private = bdb;
|
||||
be->be_cf_ocs = be->bd_info->bi_cf_ocs;
|
||||
|
||||
|
@ -311,7 +311,7 @@ bdb_search( Operation *op, SlapReply *rs )
|
||||
ID id, cursor;
|
||||
ID candidates[BDB_IDL_UM_SIZE];
|
||||
ID scopes[BDB_IDL_DB_SIZE];
|
||||
Entry *e = NULL, base, e_root = {0};
|
||||
Entry *e = NULL, base, *e_root;
|
||||
Entry *matched = NULL;
|
||||
EntryInfo *ei;
|
||||
struct berval realbase = BER_BVNULL;
|
||||
@ -348,13 +348,10 @@ bdb_search( Operation *op, SlapReply *rs )
|
||||
}
|
||||
}
|
||||
|
||||
e_root = bdb->bi_cache.c_dntree.bei_e;
|
||||
if ( op->o_req_ndn.bv_len == 0 ) {
|
||||
/* DIT root special case */
|
||||
ei = &bdb->bi_cache.c_dntree;
|
||||
e_root.e_private = ei;
|
||||
e_root.e_id = 0;
|
||||
BER_BVSTR( &e_root.e_nname, "" );
|
||||
BER_BVSTR( &e_root.e_name, "" );
|
||||
ei = e_root->e_private;
|
||||
rs->sr_err = LDAP_SUCCESS;
|
||||
} else {
|
||||
if ( op->ors_deref & LDAP_DEREF_FINDING ) {
|
||||
@ -484,14 +481,14 @@ dn2entry_retry:
|
||||
#ifdef SLAP_ZONE_ALLOC
|
||||
slap_zn_runlock(bdb->bi_cache.c_zctx, e);
|
||||
#endif
|
||||
if ( e != &e_root ) {
|
||||
if ( e != e_root ) {
|
||||
bdb_cache_return_entry_r(bdb, e, &lock);
|
||||
}
|
||||
send_ldap_result( op, rs );
|
||||
return rs->sr_err;
|
||||
}
|
||||
|
||||
if ( !manageDSAit && e != &e_root && is_entry_referral( e ) ) {
|
||||
if ( !manageDSAit && e != e_root && is_entry_referral( e ) ) {
|
||||
/* entry is a referral, don't allow add */
|
||||
struct berval matched_dn = BER_BVNULL;
|
||||
BerVarray erefs = NULL;
|
||||
@ -541,7 +538,7 @@ dn2entry_retry:
|
||||
#ifdef SLAP_ZONE_ALLOC
|
||||
slap_zn_runlock(bdb->bi_cache.c_zctx, e);
|
||||
#endif
|
||||
if ( e != &e_root ) {
|
||||
if ( e != e_root ) {
|
||||
bdb_cache_return_entry_r(bdb, e, &lock);
|
||||
}
|
||||
send_ldap_result( op, rs );
|
||||
@ -564,7 +561,7 @@ dn2entry_retry:
|
||||
#ifdef SLAP_ZONE_ALLOC
|
||||
slap_zn_runlock(bdb->bi_cache.c_zctx, e);
|
||||
#endif
|
||||
if ( e != &e_root ) {
|
||||
if ( e != e_root ) {
|
||||
bdb_cache_return_entry_r(bdb, e, &lock);
|
||||
}
|
||||
e = NULL;
|
||||
|
Loading…
Reference in New Issue
Block a user