summaryrefslogtreecommitdiff
path: root/source4/lib/ldb
diff options
context:
space:
mode:
authorMatthieu Patou <mat@matws.net>2011-04-20 20:26:47 +0400
committerStefan Metzmacher <metze@samba.org>2011-04-21 14:41:56 +0200
commit93d5e7a018cc4d999c2f322902fa337c6af724d1 (patch)
tree830357343db4efa6f81c9f6274d49fe85a5d33b4 /source4/lib/ldb
parentf04689ae63a9dfdca6d5eb8679186561d3e450b4 (diff)
downloadsamba-93d5e7a018cc4d999c2f322902fa337c6af724d1.tar.gz
samba-93d5e7a018cc4d999c2f322902fa337c6af724d1.tar.bz2
samba-93d5e7a018cc4d999c2f322902fa337c6af724d1.zip
ldb: add custom flags and functions for the application that wants to manipulate them
Signed-off-by: Simo Sorce <idra@samba.org> Signed-off-by: Stefan Metzmacher <metze@samba.org>
Diffstat (limited to 'source4/lib/ldb')
-rw-r--r--source4/lib/ldb/common/ldb.c38
-rw-r--r--source4/lib/ldb/include/ldb_module.h14
-rw-r--r--source4/lib/ldb/include/ldb_private.h2
3 files changed, 54 insertions, 0 deletions
diff --git a/source4/lib/ldb/common/ldb.c b/source4/lib/ldb/common/ldb.c
index 0aadeb0d30..433f30b7c1 100644
--- a/source4/lib/ldb/common/ldb.c
+++ b/source4/lib/ldb/common/ldb.c
@@ -1112,6 +1112,7 @@ int ldb_build_search_req_ex(struct ldb_request **ret_req,
req->handle->nesting++;
req->handle->parent = parent;
req->handle->flags = parent->handle->flags;
+ req->handle->custom_flags = parent->handle->custom_flags;
}
*ret_req = req;
@@ -1185,6 +1186,7 @@ int ldb_build_add_req(struct ldb_request **ret_req,
req->handle->nesting++;
req->handle->parent = parent;
req->handle->flags = parent->handle->flags;
+ req->handle->custom_flags = parent->handle->custom_flags;
}
*ret_req = req;
@@ -1229,6 +1231,7 @@ int ldb_build_mod_req(struct ldb_request **ret_req,
req->handle->nesting++;
req->handle->parent = parent;
req->handle->flags = parent->handle->flags;
+ req->handle->custom_flags = parent->handle->custom_flags;
}
*ret_req = req;
@@ -1273,6 +1276,7 @@ int ldb_build_del_req(struct ldb_request **ret_req,
req->handle->nesting++;
req->handle->parent = parent;
req->handle->flags = parent->handle->flags;
+ req->handle->custom_flags = parent->handle->custom_flags;
}
*ret_req = req;
@@ -1319,6 +1323,7 @@ int ldb_build_rename_req(struct ldb_request **ret_req,
req->handle->nesting++;
req->handle->parent = parent;
req->handle->flags = parent->handle->flags;
+ req->handle->custom_flags = parent->handle->custom_flags;
}
*ret_req = req;
@@ -1394,6 +1399,7 @@ int ldb_build_extended_req(struct ldb_request **ret_req,
req->handle->nesting++;
req->handle->parent = parent;
req->handle->flags = parent->handle->flags;
+ req->handle->custom_flags = parent->handle->custom_flags;
}
*ret_req = req;
@@ -1877,6 +1883,38 @@ void ldb_req_mark_trusted(struct ldb_request *req)
}
/**
+ set custom flags. Those flags are set by applications using ldb,
+ they are application dependent and the same bit can have different
+ meaning in different application.
+ */
+void ldb_req_set_custom_flags(struct ldb_request *req, uint32_t flags)
+{
+ if (req != NULL && req->handle != NULL) {
+ req->handle->custom_flags = flags;
+ }
+}
+
+
+/**
+ get custom flags. Those flags are set by applications using ldb,
+ they are application dependent and the same bit can have different
+ meaning in different application.
+ */
+uint32_t ldb_req_get_custom_flags(struct ldb_request *req)
+{
+ if (req != NULL && req->handle != NULL) {
+ return req->handle->custom_flags;
+ }
+
+ /*
+ * 0 is not something any better or worse than
+ * anything else as req or the handle is NULL
+ */
+ return 0;
+}
+
+
+/**
return true is a request is untrusted
*/
bool ldb_req_is_untrusted(struct ldb_request *req)
diff --git a/source4/lib/ldb/include/ldb_module.h b/source4/lib/ldb/include/ldb_module.h
index db8726b7a3..6d6fff251c 100644
--- a/source4/lib/ldb/include/ldb_module.h
+++ b/source4/lib/ldb/include/ldb_module.h
@@ -240,6 +240,20 @@ void ldb_req_mark_trusted(struct ldb_request *req);
*/
bool ldb_req_is_untrusted(struct ldb_request *req);
+/**
+ set custom flags. Those flags are set by applications using ldb,
+ they are application dependent and the same bit can have different
+ meaning in different application.
+ */
+void ldb_req_set_custom_flags(struct ldb_request *req, uint32_t flags);
+
+/**
+ get custom flags. Those flags are set by applications using ldb,
+ they are application dependent and the same bit can have different
+ meaning in different application.
+ */
+uint32_t ldb_req_get_custom_flags(struct ldb_request *req);
+
/* load all modules from the given directory */
int ldb_modules_load(const char *modules_path, const char *version);
diff --git a/source4/lib/ldb/include/ldb_private.h b/source4/lib/ldb/include/ldb_private.h
index 5397b79ec5..cafc020e29 100644
--- a/source4/lib/ldb/include/ldb_private.h
+++ b/source4/lib/ldb/include/ldb_private.h
@@ -58,6 +58,8 @@ struct ldb_handle {
enum ldb_state state;
struct ldb_context *ldb;
unsigned flags;
+ /* flags dedicated to be set by application using ldb */
+ uint32_t custom_flags;
unsigned nesting;
/* used for debugging */