#include "ldb/include/ldb.h"
#include "ldb/include/ldb_private.h"
-/* close */
-static int skel_close(struct ldb_module *module)
-{
- return ldb_next_close(module);
-}
+struct private_data {
+
+ char *some_private_data;
+};
/* search */
-static int skel_search(struct ldb_module *module, const char *base,
- enum ldb_scope scope, const char *expression,
- const char * const *attrs, struct ldb_message ***res)
+static int skel_search(struct ldb_module *module, struct ldb_request *req)
{
- return ldb_next_search(module, base, scope, expression, attrs, res);
+ return ldb_next_request(module, req);
}
-/* search_free */
-static int skel_search_free(struct ldb_module *module, struct ldb_message **res)
-{
- return ldb_next_search_free(module, res);
+/* add */
+static int skel_add(struct ldb_module *module, struct ldb_request *req){
+ return ldb_next_request(module, req);
}
-/* add_record */
-static int skel_add_record(struct ldb_module *module, const struct ldb_message *msg)
+/* modify */
+static int skel_modify(struct ldb_module *module, struct ldb_request *req)
{
- return ldb_next_add_record(module, msg);
+ return ldb_next_request(module, req);
}
-/* modify_record */
-static int skel_modify_record(struct ldb_module *module, const struct ldb_message *msg)
+/* delete */
+static int skel_delete(struct ldb_module *module, struct ldb_request *req)
{
- return ldb_next_modify_record(module, msg);
+ return ldb_next_request(module, req);
}
-/* delete_record */
-static int skel_delete_record(struct ldb_module *module, const char *dn)
+/* rename */
+static int skel_rename(struct ldb_module *module, struct ldb_request *req)
{
- return ldb_next_delete_record(module, dn);
+ return ldb_next_request(module, req);
}
-/* rename_record */
-static int skel_rename_record(struct ldb_module *module, const char *olddn, const char *newdn)
+/* start a transaction */
+static int skel_start_trans(struct ldb_module *module)
{
- return ldb_next_rename_record(module, olddn, newdn);
+ return ldb_next_start_trans(module);
}
-/* named_lock */
-static const char *skel_named_lock(struct ldb_module *module, const char *lockname)
+/* end a transaction */
+static int skel_end_trans(struct ldb_module *module)
{
- return ldb_next_named_lock(module, lockname);
+ return ldb_next_end_trans(module);
}
-/* named_unlock */
-static const char *skel_named_unlock(struct ldb_module *module, const char *lockname)
+/* delete a transaction */
+static int skel_del_trans(struct ldb_module *module)
{
- return ldb_next_named_unlock(module, lockname);
+ return ldb_next_del_trans(module);
}
-/* return extended error information */
-static const char *skel_errstring(struct ldb_module *module)
+static int skel_destructor(void *module_ctx)
{
- return ldb_next_errstring(module);
+ struct ldb_module *ctx = talloc_get_type(module_ctx, struct ldb_module);
+ struct private_data *data = talloc_get_type(ctx->private_data, struct private_data);
+ /* put your clean-up functions here */
+ if (data->some_private_data) talloc_free(data->some_private_data);
+ return 0;
}
-static void skel_cache_free(struct ldb_module *module)
+static int skel_request(struct ldb_module *module, struct ldb_request *req)
{
- ldb_next_cache_free(module);
+ switch (req->operation) {
+
+ case LDB_REQ_SEARCH:
+ return skel_search(module, req);
+
+ case LDB_REQ_ADD:
+ return skel_add(module, req);
+
+ case LDB_REQ_MODIFY:
+ return skel_modify(module, req);
+
+ case LDB_REQ_DELETE:
+ return skel_delete(module, req);
+
+ case LDB_REQ_RENAME:
+ return skel_rename(module,
+ req);
+
+ default:
+ return ldb_next_request(module, req);
+
+ }
}
static const struct ldb_module_ops skel_ops = {
- "skel",
- skel_close,
- skel_search,
- skel_search_free,
- skel_add_record,
- skel_modify_record,
- skel_delete_record,
- skel_rename_record,
- skel_named_lock,
- skel_named_unlock,
- skel_errstring,
- skel_cache_free
+ .name = "skel",
+ .request = skel_request,
+ .start_transaction = skel_start_trans,
+ .end_transaction = skel_end_trans,
+ .del_transaction = skel_del_trans,
};
-#ifdef HAVE_DLOPEN
- struct ldb_module *init_module(struct ldb_context *ldb, const char *options[])
-#else
-struct ldb_module *skel_plugin_init(struct ldb_context *ldb, const char *options[])
-#endif
+struct ldb_module *skel_module_init(struct ldb_context *ldb, const char *options[])
{
struct ldb_module *ctx;
+ struct private_data *data;
- ctx = (struct ldb_module *)malloc(sizeof(struct ldb_module));
+ ctx = talloc(ldb, struct ldb_module);
if (!ctx)
return NULL;
+ data = talloc(ctx, struct private_data);
+ if (data == NULL) {
+ talloc_free(ctx);
+ return NULL;
+ }
+
+ data->some_private_data = NULL;
+ ctx->private_data = data;
+
ctx->ldb = ldb;
ctx->prev = ctx->next = NULL;
- ctx->private_data = NULL;
ctx->ops = &skel_ops;
+ talloc_set_destructor (ctx, skel_destructor);
+
return ctx;
}