diff options
author | Andrew Bartlett <abartlet@samba.org> | 2013-09-17 15:28:32 -0700 |
---|---|---|
committer | Andrew Bartlett <abartlet@samba.org> | 2013-09-19 12:27:55 -0700 |
commit | c42db8975f8f84ce576c97ad95ca59ba5170d596 (patch) | |
tree | 390fd586abbe26002ea343875408ae1dfba510f1 | |
parent | 4022d8632cc092f4f43fae69cc3cfb58d0d000dd (diff) | |
download | samba-c42db8975f8f84ce576c97ad95ca59ba5170d596.tar.gz samba-c42db8975f8f84ce576c97ad95ca59ba5170d596.tar.bz2 samba-c42db8975f8f84ce576c97ad95ca59ba5170d596.zip |
dsdb-repl_meta_data: Do not re-delete the Deleted Objects DN during replication
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>
-rw-r--r-- | source4/dsdb/samdb/ldb_modules/repl_meta_data.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/source4/dsdb/samdb/ldb_modules/repl_meta_data.c b/source4/dsdb/samdb/ldb_modules/repl_meta_data.c index 7bd0265f9d..e562e2467f 100644 --- a/source4/dsdb/samdb/ldb_modules/repl_meta_data.c +++ b/source4/dsdb/samdb/ldb_modules/repl_meta_data.c @@ -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) { |