[SCM] Samba Shared Repository - branch master updated

Andrew Tridgell tridge at samba.org
Mon Sep 27 13:01:02 MDT 2010


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 <nivanova at 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 <tridge at 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


More information about the samba-cvs mailing list