s4-dsdb: do the rename after the modify in replmd_delete
authorAndrew Tridgell <tridge@samba.org>
Thu, 17 Dec 2009 12:00:16 +0000 (23:00 +1100)
committerAndrew Tridgell <tridge@samba.org>
Fri, 1 Jan 2010 21:16:49 +0000 (08:16 +1100)
This makes updating the links a bit easier

source4/dsdb/samdb/ldb_modules/repl_meta_data.c

index 3390f80f137f1a6f92af02ed4ae1266e55582bc2..689b24f398e2652a2eb1fad8b28252715d5ba7e0 100644 (file)
@@ -617,7 +617,7 @@ static int replmd_add_fix_la(struct ldb_module *module, struct ldb_message_eleme
                        return LDB_ERR_OPERATIONS_ERROR;
                }
 
-               ret = replmd_add_backlink(module, schema, guid, &target_guid, true, sa, true);
+               ret = replmd_add_backlink(module, schema, guid, &target_guid, true, sa, false);
                if (ret != LDB_SUCCESS) {
                        talloc_free(tmp_ctx);
                        return ret;
@@ -2145,16 +2145,6 @@ static int replmd_delete(struct ldb_module *module, struct ldb_request *req)
                return LDB_ERR_OPERATIONS_ERROR;
        }
 
-       /* New DN name generated, renaming the original DN */
-       ret = dsdb_module_rename(module, old_dn, new_dn, 0);
-       if (ret != LDB_SUCCESS){
-               DEBUG(0,(__location__ ": Failed to rename object from '%s' to '%s'\n",
-                               ldb_dn_get_linearized(old_dn),
-                               ldb_dn_get_linearized(new_dn)));
-               talloc_free(tmp_ctx);
-               return ret;
-       }
-
        /*
          now we need to modify the object in the following ways:
 
@@ -2179,7 +2169,7 @@ static int replmd_delete(struct ldb_module *module, struct ldb_request *req)
                return LDB_ERR_OPERATIONS_ERROR;
        }
 
-       msg->dn = new_dn;
+       msg->dn = old_dn;
 
        ret = ldb_msg_add_string(msg, "isDeleted", "TRUE");
        if (ret != LDB_SUCCESS) {
@@ -2271,6 +2261,17 @@ static int replmd_delete(struct ldb_module *module, struct ldb_request *req)
                return ret;
        }
 
+       /* now rename onto the new DN */
+       ret = dsdb_module_rename(module, old_dn, new_dn, 0);
+       if (ret != LDB_SUCCESS){
+               DEBUG(0,(__location__ ": Failed to rename object from '%s' to '%s' - %s\n",
+                        ldb_dn_get_linearized(old_dn),
+                        ldb_dn_get_linearized(new_dn),
+                        ldb_errstring(ldb)));
+               talloc_free(tmp_ctx);
+               return ret;
+       }
+
        talloc_free(tmp_ctx);
 
        return ldb_module_done(req, NULL, NULL, LDB_SUCCESS);