]> git.sur5r.net Git - openldap/commitdiff
ITS#3267 fix out-of-order slapadd
authorHoward Chu <hyc@openldap.org>
Sat, 9 Apr 2005 00:38:18 +0000 (00:38 +0000)
committerHoward Chu <hyc@openldap.org>
Sat, 9 Apr 2005 00:38:18 +0000 (00:38 +0000)
servers/slapd/back-bdb/tools.c

index a702106f35ba0c4621793821566c6bb41926e712..65471722e463136cef99a4f2a0b9725c4842d197 100644 (file)
@@ -215,7 +215,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;
@@ -224,6 +224,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;
@@ -234,6 +235,10 @@ static int bdb_tool_next_id(
                        if ( rc ) {
                                return rc;
                        }
+                       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 ) {