diff options
author | Andrew Bartlett <abartlet@samba.org> | 2009-10-15 10:49:25 +1100 |
---|---|---|
committer | Andrew Bartlett <abartlet@samba.org> | 2009-10-21 22:43:53 +1100 |
commit | f545d5fa43ac0f08f69cf3e130a4b7be1d90784f (patch) | |
tree | d230e0527f58a9cdcf141464d518185c0ab8db5e /source4/dsdb | |
parent | 17237f18f09798c90b2234150d502ccd21eb5880 (diff) | |
download | samba-f545d5fa43ac0f08f69cf3e130a4b7be1d90784f.tar.gz samba-f545d5fa43ac0f08f69cf3e130a4b7be1d90784f.tar.bz2 samba-f545d5fa43ac0f08f69cf3e130a4b7be1d90784f.zip |
s4:dsdb In partitions module, tell the caller what partition was used.
This means we don't return any control for modifications to the
control records in sam.ldb, but do if they modified one of the actual
data LDB files.
Andrew Bartlett
Diffstat (limited to 'source4/dsdb')
-rw-r--r-- | source4/dsdb/samdb/ldb_modules/partition.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/source4/dsdb/samdb/ldb_modules/partition.c b/source4/dsdb/samdb/ldb_modules/partition.c index d1892f0c54..64ec798e4c 100644 --- a/source4/dsdb/samdb/ldb_modules/partition.c +++ b/source4/dsdb/samdb/ldb_modules/partition.c @@ -66,7 +66,7 @@ static struct partition_context *partition_init_ctx(struct ldb_module *module, s * helper functions to call the next module in chain * */ -static int partition_request(struct ldb_module *module, struct ldb_request *request) +int partition_request(struct ldb_module *module, struct ldb_request *request) { int ret; switch (request->operation) { @@ -160,6 +160,7 @@ static int partition_req_callback(struct ldb_request *req, struct ldb_request *nreq; int ret, i; struct partition_private_data *data; + struct ldb_control *partition_ctrl; ac = talloc_get_type(req->context, struct partition_context); data = talloc_get_type(ac->module->private_data, struct partition_private_data); @@ -169,6 +170,21 @@ static int partition_req_callback(struct ldb_request *req, LDB_ERR_OPERATIONS_ERROR); } + partition_ctrl = ldb_request_get_control(req, DSDB_CONTROL_CURRENT_PARTITION_OID); + if (partition_ctrl && (ac->num_requests == 1 || ares->type == LDB_REPLY_ENTRY)) { + /* If we didn't fan this request out to mulitple partitions, + * or this is an individual search result, we can + * deterministily tell the caller what partition this was + * written to (repl_meta_data likes to know) */ + ret = ldb_reply_add_control(ares, + DSDB_CONTROL_CURRENT_PARTITION_OID, + false, partition_ctrl->data); + if (ret != LDB_SUCCESS) { + return ldb_module_done(ac->req, NULL, NULL, + ret); + } + } + if (ares->error != LDB_SUCCESS && !ac->got_success) { return ldb_module_done(ac->req, ares->controls, ares->response, ares->error); |