From fe3a8755ff77c06dc336a6c9f07b217ee26b99bb Mon Sep 17 00:00:00 2001 From: Kurt Zeilenga Date: Fri, 21 Feb 2003 21:03:02 +0000 Subject: [PATCH] unordered LDIF fix --- servers/slapd/back-bdb/tools.c | 87 ++++++++++++++++++++++------------ 1 file changed, 56 insertions(+), 31 deletions(-) diff --git a/servers/slapd/back-bdb/tools.c b/servers/slapd/back-bdb/tools.c index 78f2eec5a1..04307c5c7c 100644 --- a/servers/slapd/back-bdb/tools.c +++ b/servers/slapd/back-bdb/tools.c @@ -108,6 +108,61 @@ Entry* bdb_tool_entry_get( BackendDB *be, ID id ) return e; } +int bdb_tool_next_id( + BackendDB *be, + DB_TXN *tid, + Entry *e, + struct berval *text ) +{ + struct bdb_info *bdb = (struct bdb_info *) be->be_private; + struct berval dn = e->e_nname; + struct berval pdn; + int rc; + + rc = bdb_dn2id( be, tid, &dn, &e->e_id, 0 ); + if ( rc == DB_NOTFOUND ) { + if ( be_issuffix( be, &dn ) ) { + pdn = slap_empty_bv; + } else { + dnParent( &dn, &pdn ); + e->e_nname = pdn; + rc = bdb_tool_next_id( be, tid, e, text ); + if ( rc ) { + return rc; + } + } + rc = bdb_next_id( be, tid, &e->e_id ); + if ( rc ) { + snprintf( text->bv_val, text->bv_len, + "next_id failed: %s (%d)", + db_strerror(rc), rc ); +#ifdef NEW_LOGGING + LDAP_LOG ( TOOLS, ERR, + "=> bdb_tool_entry_put: %s\n", text->bv_val, 0, 0 ); +#else + Debug( LDAP_DEBUG_ANY, + "=> bdb_tool_entry_put: %s\n", text->bv_val, 0, 0 ); +#endif + return rc; + } + e->e_nname = dn; + rc = bdb_dn2id_add( be, tid, &pdn, e ); + if ( rc ) { + snprintf( text->bv_val, text->bv_len, + "dn2id_add failed: %s (%d)", + db_strerror(rc), rc ); +#ifdef NEW_LOGGING + LDAP_LOG ( TOOLS, ERR, + "=> bdb_tool_entry_put: %s\n", text->bv_val, 0, 0 ); +#else + Debug( LDAP_DEBUG_ANY, + "=> bdb_tool_entry_put: %s\n", text->bv_val, 0, 0 ); +#endif + } + } + return rc; +} + ID bdb_tool_entry_put( BackendDB *be, Entry *e, @@ -149,39 +204,9 @@ ID bdb_tool_entry_put( return NOID; } - rc = bdb_next_id( be, tid, &e->e_id ); - if( rc != 0 ) { - snprintf( text->bv_val, text->bv_len, - "next_id failed: %s (%d)", - db_strerror(rc), rc ); -#ifdef NEW_LOGGING - LDAP_LOG ( TOOLS, ERR, - "=> bdb_tool_entry_put: %s\n", text->bv_val, 0, 0 ); -#else - Debug( LDAP_DEBUG_ANY, - "=> bdb_tool_entry_put: %s\n", text->bv_val, 0, 0 ); -#endif - goto done; - } - /* add dn2id indices */ - if ( be_issuffix( be, &e->e_nname ) ) { - pdn = slap_empty_bv; - } else { - dnParent( &e->e_nname, &pdn ); - } - rc = bdb_dn2id_add( be, tid, &pdn, e ); + rc = bdb_tool_next_id( be, tid, e, text ); if( rc != 0 ) { - snprintf( text->bv_val, text->bv_len, - "dn2id_add failed: %s (%d)", - db_strerror(rc), rc ); -#ifdef NEW_LOGGING - LDAP_LOG ( TOOLS, ERR, - "=> bdb_tool_entry_put: %s\n", text->bv_val, 0, 0 ); -#else - Debug( LDAP_DEBUG_ANY, - "=> bdb_tool_entry_put: %s\n", text->bv_val, 0, 0 ); -#endif goto done; } -- 2.47.2