dsdb-repl_meta_data: Do not re-delete the Deleted Objects DN during replication
authorAndrew Bartlett <abartlet@samba.org>
Tue, 17 Sep 2013 22:28:32 +0000 (15:28 -0700)
committerAndrew Bartlett <abartlet@samba.org>
Thu, 19 Sep 2013 19:27:55 +0000 (12:27 -0700)
We need to ensure we do not re-delete the Deleted Objects DN during replication.

It itself not entirely a deleted object, but has isDeleted set.

Andrew Bartlett

Signed-off-by: Andrew Bartlett <abartlet@samba.org>
Reviewed-by: Stefan Metzmacher <metze@samba.org>
source4/dsdb/samdb/ldb_modules/repl_meta_data.c

index 7bd0265f9dddc492258202bdbeb478a97921c811..e562e2467f808ca4c303d895bd6961a0bae91df9 100644 (file)
@@ -4655,7 +4655,11 @@ static int replmd_replicated_apply_next(struct replmd_replicated_request *ar)
  */
 static int replmd_replicated_apply_isDeleted(struct replmd_replicated_request *ar)
 {
-       if (ar->isDeleted) {
+       struct ldb_dn *deleted_objects_dn;
+       struct ldb_message *msg = ar->objs->objects[ar->index_current].msg;
+       int ret = dsdb_get_deleted_objects_dn(ldb_module_get_ctx(ar->module), msg, msg->dn,
+                                             &deleted_objects_dn);
+       if (ar->isDeleted && (ret != LDB_SUCCESS || ldb_dn_compare(msg->dn, deleted_objects_dn) != 0)) {
                /*
                 * Do a delete here again, so that if there is
                 * anything local that conflicts with this
@@ -4669,11 +4673,9 @@ static int replmd_replicated_apply_isDeleted(struct replmd_replicated_request *a
                 */
 
                /* This has been updated to point to the DN we eventually did the modify on */
-               struct ldb_message *msg = ar->objs->objects[ar->index_current].msg;
 
                struct ldb_request *del_req;
                struct ldb_result *res;
-               int ret;
 
                TALLOC_CTX *tmp_ctx = talloc_new(ar);
                if (!tmp_ctx) {