repld update
authorStefan Metzmacher <metze@samba.org>
Fri, 16 Nov 2012 17:01:51 +0000 (18:01 +0100)
committerStefan Metzmacher <metze@samba.org>
Mon, 19 Nov 2012 11:02:06 +0000 (12:02 +0100)
source4/dsdb/samdb/ldb_modules/repl_meta_data.c

index 6b5e1219f80c95b750a50f842e513cc73d1790e1..1f3a8d84574ac6f4c68368a515ed05f27a40e60c 100644 (file)
@@ -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);