From de03b84d3cbc3bbbc297b229b5cd037227053626 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Fri, 16 Nov 2012 18:01:51 +0100 Subject: [PATCH] repld update --- .../dsdb/samdb/ldb_modules/repl_meta_data.c | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/source4/dsdb/samdb/ldb_modules/repl_meta_data.c b/source4/dsdb/samdb/ldb_modules/repl_meta_data.c index 6b5e1219f80c..1f3a8d84574a 100644 --- a/source4/dsdb/samdb/ldb_modules/repl_meta_data.c +++ b/source4/dsdb/samdb/ldb_modules/repl_meta_data.c @@ -67,6 +67,9 @@ struct replmd_private { uint64_t mod_usn; uint64_t mod_usn_urgent; } *ncs; + + uint32_t num_sd_updates; + struct ldb_dn *sd_updates; }; struct la_entry { @@ -186,6 +189,10 @@ static void replmd_txn_cleanup(struct replmd_private *replmd_private) talloc_free(replmd_private->bl_ctx); replmd_private->la_backlinks = NULL; replmd_private->bl_ctx = NULL; + + talloc_free(replmd_private->sd_updates); + replmd_private->sd_updates = NULL; + replmd_private->num_sd_updates = 0; } @@ -3996,6 +4003,9 @@ static int replmd_replicated_apply_merge(struct replmd_replicated_request *ar) unsigned int removed_attrs = 0; int ret; int (*callback)(struct ldb_request *req, struct ldb_reply *ares) = replmd_op_callback; + struct replmd_private *replmd_private = talloc_get_type(ldb_module_get_private(module), + struct replmd_private); + bool sd_updated = false; ldb = ldb_module_get_ctx(ar->module); msg = ar->objs->objects[ar->index_current].msg; @@ -4116,6 +4126,9 @@ static int replmd_replicated_apply_merge(struct replmd_replicated_request *ar) } } nmd.ctr.ctr1.array[j].local_usn = ar->seq_num; + if (nmd.ctr.ctr1.array[j].attid == DRSUAPI_ATTID_ntSecurityDescriptor) { + sd_updated = true; + } found = true; break; } @@ -4145,6 +4158,9 @@ static int replmd_replicated_apply_merge(struct replmd_replicated_request *ar) } } nmd.ctr.ctr1.array[ni].local_usn = ar->seq_num; + if (nmd.ctr.ctr1.array[ni].attid == DRSUAPI_ATTID_ntSecurityDescriptor) { + sd_updated = true; + } ni++; } @@ -4179,6 +4195,12 @@ static int replmd_replicated_apply_merge(struct replmd_replicated_request *ar) ldb_debug(ldb, LDB_DEBUG_TRACE, "replmd_replicated_apply_merge[%u]: replace %u attributes\n", ar->index_current, msg->num_elements); + if (sd_updated) { + //ret = replmd_add_ + //replmd_private; + //BINARY_ARRAY_SEARCH + } + /* create the meta data value */ ndr_err = ndr_push_struct_blob(&nmd_value, msg, &nmd, (ndr_push_flags_fn_t)ndr_push_replPropertyMetaDataBlob); -- 2.34.1