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

ITS#6006

parent 7af81733
......@@ -12,6 +12,7 @@ OpenLDAP 2.4.16 Engineering
Fixed slapd syncrepl newCookie sync messages (ITS#5972)
Fixed slapd syncrepl multiple CSN propagation (ITS#5973)
Fixed slapd-bdb/hdb cachesize handling (ITS#5860)
Fixed slapd-bdb/hdb with slapcat with empty dn (ITS#6006)
Fixed slapd-ldap incorrect referral handling (ITS#6003,ITS#5916)
Fixed slapd-ldap/meta with broken AD results (ITS#5977)
Fixed slapd-ldap/meta with invalid attrs again (ITS#5959)
......
......@@ -537,10 +537,23 @@ shm_retry:
rc = bdb_id2entry( be, NULL, 0, &e );
}
if ( !e ) {
struct berval gluebv = BER_BVC("glue");
Operation op = {0};
Opheader ohdr = {0};
e = entry_alloc();
e->e_id = 0;
ber_dupbv( &e->e_name, (struct berval *)&slap_empty_bv );
ber_dupbv( &e->e_nname, (struct berval *)&slap_empty_bv );
attr_merge_one( e, slap_schema.si_ad_objectClass,
&gluebv, NULL );
attr_merge_one( e, slap_schema.si_ad_structuralObjectClass,
&gluebv, NULL );
op.o_hdr = &ohdr;
op.o_bd = be;
op.ora_e = e;
op.o_dn = be->be_rootdn;
op.o_ndn = be->be_rootndn;
slap_add_opattrs( &op, NULL, NULL, 0, 0 );
}
e->e_ocflags = SLAP_OC_GLUE|SLAP_OC__END;
e->e_private = &bdb->bi_cache.c_dntree;
......
......@@ -363,7 +363,6 @@ bdb_modify( Operation *op, SlapReply *rs )
DB_TXN *ltid = NULL, *lt2;
struct bdb_op_info opinfo = {{{ 0 }}};
Entry dummy = {0};
int fakeroot = 0;
DB_LOCK lock;
......@@ -487,19 +486,6 @@ retry: /* transaction retry */
case DB_LOCK_NOTGRANTED:
goto retry;
case DB_NOTFOUND:
if ( BER_BVISEMPTY( &op->o_req_ndn )) {
struct berval gluebv = BER_BVC("glue");
e = ch_calloc( 1, sizeof(Entry));
e->e_name.bv_val = ch_strdup( "" );
ber_dupbv( &e->e_nname, &e->e_name );
attr_merge_one( e, slap_schema.si_ad_objectClass,
&gluebv, NULL );
attr_merge_one( e, slap_schema.si_ad_structuralObjectClass,
&gluebv, NULL );
e->e_private = ei;
fakeroot = 1;
rs->sr_err = 0;
}
break;
case LDAP_BUSY:
rs->sr_text = "ldap server busy";
......@@ -511,9 +497,7 @@ retry: /* transaction retry */
}
}
if ( !fakeroot ) {
e = ei->bei_e;
}
e = ei->bei_e;
/* acquire and lock entry */
/* FIXME: dn2entry() should return non-glue entry */
......@@ -676,19 +660,11 @@ retry: /* transaction retry */
} else {
/* may have changed in bdb_modify_internal() */
e->e_ocflags = dummy.e_ocflags;
if ( fakeroot ) {
e->e_private = NULL;
entry_free( e );
e = NULL;
attrs_free( dummy.e_attrs );
} else {
rc = bdb_cache_modify( bdb, e, dummy.e_attrs, ltid, &lock );
switch( rc ) {
case DB_LOCK_DEADLOCK:
case DB_LOCK_NOTGRANTED:
goto retry;
}
rc = bdb_cache_modify( bdb, e, dummy.e_attrs, ltid, &lock );
switch( rc ) {
case DB_LOCK_DEADLOCK:
case DB_LOCK_NOTGRANTED:
goto retry;
}
dummy.e_attrs = 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