From 2a7aeeec8eed27992e6711d179a2de7caee7c882 Mon Sep 17 00:00:00 2001 From: Howard Chu Date: Thu, 21 Apr 2005 10:25:12 +0000 Subject: [PATCH] Import ITS#3267 fix from HEAD --- servers/slapd/back-bdb/tools.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) 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 ) { -- 2.47.2