The branch, master has been updated via aeedd29 s4-ldb: Added ldb_request_replace_control from 2cf0525 s4/irpc: Add security token to the binding handle when doing irp call forwarding
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master - Log ----------------------------------------------------------------- commit aeedd29d390a1bb8ad1b446bf9b39cffd42e5612 Author: Nadezhda Ivanova <nivan...@samba.org> Date: Mon Sep 27 10:01:09 2010 -0700 s4-ldb: Added ldb_request_replace_control It is the same as ldb_request_add_control, except it will replace an existing control. Autobuild-User: Andrew Tridgell <tri...@samba.org> Autobuild-Date: Mon Sep 27 19:00:38 UTC 2010 on sn-devel-104 ----------------------------------------------------------------------- Summary of changes: source4/dsdb/samdb/ldb_modules/extended_dn_in.c | 2 +- source4/lib/ldb/common/ldb_controls.c | 22 ++++++++++++++++++++++ source4/lib/ldb/include/ldb.h | 12 ++++++++++++ 3 files changed, 35 insertions(+), 1 deletions(-) Changeset truncated at 500 lines: diff --git a/source4/dsdb/samdb/ldb_modules/extended_dn_in.c b/source4/dsdb/samdb/ldb_modules/extended_dn_in.c index c1afbea..400c37f 100644 --- a/source4/dsdb/samdb/ldb_modules/extended_dn_in.c +++ b/source4/dsdb/samdb/ldb_modules/extended_dn_in.c @@ -370,7 +370,7 @@ static int extended_dn_in_fix(struct ldb_module *module, struct ldb_request *req struct ldb_search_options_control *control; control = talloc(down_req, struct ldb_search_options_control); control->search_options = 2; - ret = ldb_request_add_control(down_req, + ret = ldb_request_replace_control(down_req, LDB_CONTROL_SEARCH_OPTIONS_OID, true, control); if (ret != LDB_SUCCESS) { diff --git a/source4/lib/ldb/common/ldb_controls.c b/source4/lib/ldb/common/ldb_controls.c index 769761d..a63357d 100644 --- a/source4/lib/ldb/common/ldb_controls.c +++ b/source4/lib/ldb/common/ldb_controls.c @@ -234,6 +234,28 @@ int ldb_reply_add_control(struct ldb_reply *ares, const char *oid, bool critical return LDB_SUCCESS; } +/* Add a control to the request, replacing the old one if it is already in the request */ +int ldb_request_replace_control(struct ldb_request *req, const char *oid, bool critical, void *data) +{ + unsigned int n; + int ret; + + ret = ldb_request_add_control(req, oid, critical, data); + if (ret != LDB_ERR_ATTRIBUTE_OR_VALUE_EXISTS) { + return ret; + } + + for (n=0; req->controls[n];n++) { + if (strcmp(oid, req->controls[n]->oid) == 0) { + req->controls[n]->critical = critical; + req->controls[n]->data = data; + return LDB_SUCCESS; + } + } + + return LDB_ERR_OPERATIONS_ERROR; +} + /* Parse controls from the format used on the command line and in ejs */ struct ldb_control **ldb_parse_control_strings(struct ldb_context *ldb, TALLOC_CTX *mem_ctx, const char **control_strings) diff --git a/source4/lib/ldb/include/ldb.h b/source4/lib/ldb/include/ldb.h index 4bc793b..d29aed4 100644 --- a/source4/lib/ldb/include/ldb.h +++ b/source4/lib/ldb/include/ldb.h @@ -1218,6 +1218,18 @@ int ldb_build_rename_req(struct ldb_request **ret_req, int ldb_request_add_control(struct ldb_request *req, const char *oid, bool critical, void *data); /** + replace a ldb_control in a ldb_request + + \param req the request struct where to add the control + \param oid the object identifier of the control as string + \param critical whether the control should be critical or not + \param data a talloc pointer to the control specific data + + \return result code (LDB_SUCCESS on success, or a failure code) +*/ +int ldb_request_replace_control(struct ldb_request *req, const char *oid, bool critical, void *data); + +/** check if a control with the specified "oid" exist and return it \param req the request struct where to add the control \param oid the object identifier of the control as string -- Samba Shared Repository