From: Andrew Tridgell Date: Wed, 19 Aug 2009 05:53:19 +0000 (+1000) Subject: added basic support for rename in DRS replication X-Git-Url: http://git.samba.org/?p=metze%2Fsamba%2Fwip.git;a=commitdiff_plain;h=a0df109d663e76e6ab47a5c68bb68eb30c9ba4b0 added basic support for rename in DRS replication Added simple DRS rename support in replication. This should be done async, and I'm not sure if we should also do any repl data updates to indicate the rename. I'm still learning how this stuff works, but at least this allows a rename on a DC to propogate correctly --- diff --git a/source4/dsdb/samdb/ldb_modules/repl_meta_data.c b/source4/dsdb/samdb/ldb_modules/repl_meta_data.c index 53d6d0749cca..5d4c486d9a59 100644 --- a/source4/dsdb/samdb/ldb_modules/repl_meta_data.c +++ b/source4/dsdb/samdb/ldb_modules/repl_meta_data.c @@ -751,15 +751,19 @@ static int replmd_replicated_apply_merge(struct replmd_replicated_request *ar) omd.version = 1; /* - * TODO: add rename conflict handling + * TODO: check repl data is correct after a rename */ if (ldb_dn_compare(msg->dn, ar->search_msg->dn) != 0) { - ldb_debug_set(ldb, LDB_DEBUG_FATAL, "replmd_replicated_apply_merge[%u]: rename not supported", - ar->index_current); - ldb_debug(ldb, LDB_DEBUG_FATAL, "%s => %s\n", + ldb_debug(ldb, LDB_DEBUG_TRACE, "replmd_replicated_request rename %s => %s\n", ldb_dn_get_linearized(ar->search_msg->dn), ldb_dn_get_linearized(msg->dn)); - return replmd_replicated_request_werror(ar, WERR_NOT_SUPPORTED); + if (ldb_rename(ldb, ar->search_msg->dn, msg->dn) != LDB_SUCCESS) { + ldb_debug(ldb, LDB_DEBUG_FATAL, "replmd_replicated_request rename %s => %s failed - %s\n", + ldb_dn_get_linearized(ar->search_msg->dn), + ldb_dn_get_linearized(msg->dn), + ldb_errstring(ldb)); + return replmd_replicated_request_werror(ar, WERR_DS_DRA_DB_ERROR); + } } ret = ldb_sequence_number(ldb, LDB_SEQ_NEXT, &seq_num);