1
0
mirror of https://github.com/samba-team/samba.git synced 2025-01-12 09:18:10 +03:00

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
This commit is contained in:
Andrew Bartlett 2009-10-15 10:49:25 +11:00
parent 17237f18f0
commit f545d5fa43

View File

@ -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);