From: Howard Chu Date: Thu, 21 Apr 2005 10:25:12 +0000 (+0000) Subject: Import ITS#3267 fix from HEAD X-Git-Tag: OPENLDAP_REL_ENG_2_2_25~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2a7aeeec8eed27992e6711d179a2de7caee7c882;p=thirdparty%2Fopenldap.git Import ITS#3267 fix from HEAD --- diff --git a/servers/slapd/back-bdb/tools.c b/servers/slapd/back-bdb/tools.c index b01c4d7d96..b4a83aa4e6 100644 --- a/servers/slapd/back-bdb/tools.c +++ b/servers/slapd/back-bdb/tools.c @@ -203,7 +203,7 @@ static int bdb_tool_next_id( struct berval dn = e->e_name; struct berval ndn = e->e_nname; struct berval pdn, npdn; - EntryInfo *ei = NULL; + EntryInfo *ei = NULL, eidummy; int rc; if (ndn.bv_len == 0) return 0; @@ -212,6 +212,7 @@ static int bdb_tool_next_id( if ( ei ) bdb_cache_entryinfo_unlock( ei ); if ( rc == DB_NOTFOUND ) { if ( !be_issuffix( op->o_bd, &ndn ) ) { + ID eid = e->e_id; dnParent( &dn, &pdn ); dnParent( &ndn, &npdn ); e->e_name = pdn; @@ -222,6 +223,14 @@ static int bdb_tool_next_id( if ( rc ) { return rc; } + /* If parent didn't exist, it was created just now + * and its ID is now in e->e_id. Make sure the current + * entry gets added under the new parent ID. + */ + if ( eid != e->e_id ) { + eidummy.bei_id = e->e_id; + ei = &eidummy; + } } rc = bdb_next_id( op->o_bd, tid, &e->e_id ); if ( rc ) {