svn commit: samba r18777 - in branches/SAMBA_4_0/source/lib/ldb: common include

idra at samba.org idra at samba.org
Thu Sep 21 06:14:33 GMT 2006


Author: idra
Date: 2006-09-21 06:14:32 +0000 (Thu, 21 Sep 2006)
New Revision: 18777

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=18777

Log:

add helper functions to create an ldb_request structure


Modified:
   branches/SAMBA_4_0/source/lib/ldb/common/ldb.c
   branches/SAMBA_4_0/source/lib/ldb/include/ldb.h


Changeset:
Modified: branches/SAMBA_4_0/source/lib/ldb/common/ldb.c
===================================================================
--- branches/SAMBA_4_0/source/lib/ldb/common/ldb.c	2006-09-21 06:06:59 UTC (rev 18776)
+++ branches/SAMBA_4_0/source/lib/ldb/common/ldb.c	2006-09-21 06:14:32 UTC (rev 18777)
@@ -559,34 +559,33 @@
 	return LDB_ERR_OPERATIONS_ERROR;
 }
 
-/*
-  note that ldb_search() will automatically replace a NULL 'base' value with the 
-  defaultNamingContext from the rootDSE if available.
-*/
-int ldb_search(struct ldb_context *ldb, 
-	       const struct ldb_dn *base,
-	       enum ldb_scope scope,
-	       const char *expression,
-	       const char * const *attrs, 
-	       struct ldb_result **res)
+int ldb_build_search_req(struct ldb_request **ret_req,
+			struct ldb_context *ldb,
+			void *mem_ctx,
+			const struct ldb_dn *base,
+	       		enum ldb_scope scope,
+			const char *expression,
+			const char * const *attrs,
+			struct ldb_control **controls,
+			void *context,
+			ldb_request_callback_t callback)
 {
 	struct ldb_request *req;
-	int ret;
 
-	*res = NULL;
-	
-	req = talloc(ldb, struct ldb_request);
+	*ret_req = NULL;
+
+	req = talloc(mem_ctx, struct ldb_request);
 	if (req == NULL) {
 		ldb_set_errstring(ldb, "Out of Memory");
 		return LDB_ERR_OPERATIONS_ERROR;
 	}
 
+	req->operation = LDB_SEARCH;
 	if (base == NULL) {
-		base = ldb_get_default_basedn(ldb);
+		req->op.search.base = ldb_dn_new(req);
+	} else {
+		req->op.search.base = base;
 	}
-
-	req->operation = LDB_SEARCH;
-	req->op.search.base = base;
 	req->op.search.scope = scope;
 
 	req->op.search.tree = ldb_parse_tree(req, expression);
@@ -596,16 +595,163 @@
 		return LDB_ERR_OPERATIONS_ERROR;
 	}
 
+	req->op.search.attrs = attrs;
+	req->controls = controls;
+	req->context = context;
+	req->callback = callback;
+
+	*ret_req = req;
+	return LDB_SUCCESS;
+}
+
+int ldb_build_add_req(struct ldb_request **ret_req,
+			struct ldb_context *ldb,
+			void *mem_ctx,
+			struct ldb_message *message,
+			struct ldb_control **controls,
+			void *context,
+			ldb_request_callback_t callback)
+{
+	struct ldb_request *req;
+
+	*ret_req = NULL;
+
+	req = talloc(mem_ctx, struct ldb_request);
+	if (req == NULL) {
+		ldb_set_errstring(ldb, "Out of Memory");
+		return LDB_ERR_OPERATIONS_ERROR;
+	}
+
+	req->operation = LDB_ADD;
+	req->op.add.message = message;
+	req->controls = controls;
+	req->context = context;
+	req->callback = callback;
+
+	*ret_req = req;
+
+	return LDB_SUCCESS;
+}
+
+int ldb_build_mod_req(struct ldb_request **ret_req,
+			struct ldb_context *ldb,
+			void *mem_ctx,
+			struct ldb_message *message,
+			struct ldb_control **controls,
+			void *context,
+			ldb_request_callback_t callback)
+{
+	struct ldb_request *req;
+
+	*ret_req = NULL;
+
+	req = talloc(mem_ctx, struct ldb_request);
+	if (req == NULL) {
+		ldb_set_errstring(ldb, "Out of Memory");
+		return LDB_ERR_OPERATIONS_ERROR;
+	}
+
+	req->operation = LDB_MODIFY;
+	req->op.mod.message = message;
+	req->controls = controls;
+	req->context = context;
+	req->callback = callback;
+
+	*ret_req = req;
+
+	return LDB_SUCCESS;
+}
+
+int ldb_build_del_req(struct ldb_request **ret_req,
+			struct ldb_context *ldb,
+			void *mem_ctx,
+			struct ldb_dn *dn,
+			struct ldb_control **controls,
+			void *context,
+			ldb_request_callback_t callback)
+{
+	struct ldb_request *req;
+
+	*ret_req = NULL;
+
+	req = talloc(mem_ctx, struct ldb_request);
+	if (req == NULL) {
+		ldb_set_errstring(ldb, "Out of Memory");
+		return LDB_ERR_OPERATIONS_ERROR;
+	}
+
+	req->operation = LDB_DELETE;
+	req->op.del.dn = dn;
+	req->controls = controls;
+	req->context = context;
+	req->callback = callback;
+
+	*ret_req = req;
+
+	return LDB_SUCCESS;
+}
+
+int ldb_build_rename_req(struct ldb_request **ret_req,
+			struct ldb_context *ldb,
+			void *mem_ctx,
+			struct ldb_dn *olddn,
+			struct ldb_dn *newdn,
+			struct ldb_control **controls,
+			void *context,
+			ldb_request_callback_t callback)
+{
+	struct ldb_request *req;
+
+	*ret_req = NULL;
+
+	req = talloc(mem_ctx, struct ldb_request);
+	if (req == NULL) {
+		ldb_set_errstring(ldb, "Out of Memory");
+		return LDB_ERR_OPERATIONS_ERROR;
+	}
+
+	req->operation = LDB_RENAME;
+	req->op.rename.olddn = olddn;
+	req->op.rename.newdn = newdn;
+	req->controls = controls;
+	req->context = context;
+	req->callback = callback;
+
+	*ret_req = req;
+
+	return LDB_SUCCESS;
+}
+
+/*
+  note that ldb_search() will automatically replace a NULL 'base' value with the 
+  defaultNamingContext from the rootDSE if available.
+*/
+int ldb_search(struct ldb_context *ldb, 
+	       const struct ldb_dn *base,
+	       enum ldb_scope scope,
+	       const char *expression,
+	       const char * const *attrs, 
+	       struct ldb_result **res)
+{
+	struct ldb_request *req;
+	int ret;
+
 	*res = talloc_zero(ldb, struct ldb_result);
 	if (! *res) {
-		talloc_free(req);
 		return LDB_ERR_OPERATIONS_ERROR;
 	}
+	
+	ret = ldb_build_search_req(&req, ldb, ldb,
+					base?base:ldb_get_default_basedn(ldb),
+	       				scope,
+					expression,
+					attrs,
+					NULL,
+					res,
+					ldb_search_callback);
 
-	req->op.search.attrs = attrs;
-	req->controls = NULL;
-	req->context = res;
-	req->callback = ldb_search_callback;
+	if (ret != LDB_SUCCESS) goto done;
+
 	ldb_set_timeout(ldb, req, 0); /* use default timeout */
 
 	ret = ldb_request(ldb, req);
@@ -613,17 +759,18 @@
 	if (ret == LDB_SUCCESS) {
 		ret = ldb_wait(req->handle, LDB_WAIT_ALL);
 	}
-	
+
+	talloc_free(req);
+
+done:
 	if (ret != LDB_SUCCESS) {
 		talloc_free(*res);
 		*res = NULL;
 	}
 
-	talloc_free(req);
 	return ret;
 }
 
-
 /*
   add a record to the database. Will fail if a record with the given class and key
   already exists
@@ -638,18 +785,15 @@
 	if (ret != LDB_SUCCESS) {
 		return ret;
 	}
-		
-	req = talloc(ldb, struct ldb_request);
-	if (req == NULL) {
-		ldb_set_errstring(ldb, "Out of Memory");
-		return LDB_ERR_OPERATIONS_ERROR;
-	}
 
-	req->operation = LDB_ADD;
-	req->op.add.message = message;
-	req->controls = NULL;
-	req->context = NULL;
-	req->callback = NULL;
+	ret = ldb_build_add_req(&req, ldb, ldb,
+					message,
+					NULL,
+					NULL,
+					NULL);
+
+	if (ret != LDB_SUCCESS) return ret;
+
 	ldb_set_timeout(ldb, req, 0); /* use default timeout */
 
 	/* do request and autostart a transaction */
@@ -671,17 +815,14 @@
 	ret = ldb_msg_sanity_check(ldb, message);
 	if (ret != LDB_SUCCESS) return ret;
 
-	req = talloc(ldb, struct ldb_request);
-	if (req == NULL) {
-		ldb_set_errstring(ldb, "Out of Memory!");
-		return LDB_ERR_OPERATIONS_ERROR;
-	}
+	ret = ldb_build_mod_req(&req, ldb, ldb,
+					message,
+					NULL,
+					NULL,
+					NULL);
 
-	req->operation = LDB_MODIFY;
-	req->op.add.message = message;
-	req->controls = NULL;
-	req->context = NULL;
-	req->callback = NULL;
+	if (ret != LDB_SUCCESS) return ret;
+
 	ldb_set_timeout(ldb, req, 0); /* use default timeout */
 
 	/* do request and autostart a transaction */
@@ -700,17 +841,14 @@
 	struct ldb_request *req;
 	int ret;
 
-	req = talloc(ldb, struct ldb_request);
-	if (req == NULL) {
-		ldb_set_errstring(ldb, "Out of Memory!");
-		return LDB_ERR_OPERATIONS_ERROR;
-	}
+	ret = ldb_build_del_req(&req, ldb, ldb,
+					dn,
+					NULL,
+					NULL,
+					NULL);
 
-	req->operation = LDB_DELETE;
-	req->op.del.dn = dn;
-	req->controls = NULL;
-	req->context = NULL;
-	req->callback = NULL;
+	if (ret != LDB_SUCCESS) return ret;
+
 	ldb_set_timeout(ldb, req, 0); /* use default timeout */
 
 	/* do request and autostart a transaction */
@@ -728,18 +866,15 @@
 	struct ldb_request *req;
 	int ret;
 
-	req = talloc(ldb, struct ldb_request);
-	if (req == NULL) {
-		ldb_set_errstring(ldb, "Out of Memory!");
-		return LDB_ERR_OPERATIONS_ERROR;
-	}
+	ret = ldb_build_rename_req(&req, ldb, ldb,
+					olddn,
+					newdn,
+					NULL,
+					NULL,
+					NULL);
 
-	req->operation = LDB_RENAME;
-	req->op.rename.olddn = olddn;
-	req->op.rename.newdn = newdn;
-	req->controls = NULL;
-	req->context = NULL;
-	req->callback = NULL;
+	if (ret != LDB_SUCCESS) return ret;
+
 	ldb_set_timeout(ldb, req, 0); /* use default timeout */
 
 	/* do request and autostart a transaction */

Modified: branches/SAMBA_4_0/source/lib/ldb/include/ldb.h
===================================================================
--- branches/SAMBA_4_0/source/lib/ldb/include/ldb.h	2006-09-21 06:06:59 UTC (rev 18776)
+++ branches/SAMBA_4_0/source/lib/ldb/include/ldb.h	2006-09-21 06:14:32 UTC (rev 18777)
@@ -743,6 +743,7 @@
 	uint64_t seq_num;
 };
 
+typedef int (*ldb_request_callback_t)(struct ldb_context *, void *, struct ldb_reply *);
 struct ldb_request {
 
 	enum ldb_request_type operation;
@@ -761,7 +762,7 @@
 	struct ldb_control **controls;
 
 	void *context;
-	int (*callback)(struct ldb_context *, void *, struct ldb_reply *);
+	ldb_request_callback_t callback;
 
 	int timeout;
 	time_t starttime;



More information about the samba-cvs mailing list