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)
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;
DB_TXN *ltid = NULL, *lt2;
struct bdb_op_info opinfo = {{{ 0 }}};
Entry dummy = {0};
- int fakeroot = 0;
DB_LOCK lock;
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";
}
}
- if ( !fakeroot ) {
- e = ei->bei_e;
- }
+ e = ei->bei_e;
/* acquire and lock entry */
/* FIXME: dn2entry() should return non-glue entry */
} 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;