/* ldb database library Copyright (C) Simo Sorce 2008 ** NOTE! The following LGPL license applies to the ldb ** library. This does NOT imply that all of Samba is released ** under the LGPL This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, see . */ /* * Name: ldb * * Component: ldb module header * * Description: defines ldb modules structures and helpers * */ #ifndef _LDB_MODULE_H_ #define _LDB_MODULE_H_ struct ldb_context; struct ldb_module; /* these function pointers define the operations that a ldb module can intercept */ struct ldb_module_ops { const char *name; int (*init_context) (struct ldb_module *); int (*search)(struct ldb_module *, struct ldb_request *); /* search */ int (*add)(struct ldb_module *, struct ldb_request *); /* add */ int (*modify)(struct ldb_module *, struct ldb_request *); /* modify */ int (*del)(struct ldb_module *, struct ldb_request *); /* delete */ int (*rename)(struct ldb_module *, struct ldb_request *); /* rename */ int (*request)(struct ldb_module *, struct ldb_request *); /* match any other operation */ int (*extended)(struct ldb_module *, struct ldb_request *); /* extended operations */ int (*start_transaction)(struct ldb_module *); int (*end_transaction)(struct ldb_module *); int (*del_transaction)(struct ldb_module *); int (*sequence_number)(struct ldb_module *, struct ldb_request *); void *private_data; }; /* MODULES specific headers -- SSS */ /* The following definitions come from lib/ldb/common/ldb_modules.c */ struct ldb_context *ldb_module_get_ctx(struct ldb_module *module); int ldb_next_request(struct ldb_module *module, struct ldb_request *request); int ldb_next_start_trans(struct ldb_module *module); int ldb_next_end_trans(struct ldb_module *module); int ldb_next_del_trans(struct ldb_module *module); int ldb_next_init(struct ldb_module *module); void ldb_set_errstring(struct ldb_context *ldb, const char *err_string); void ldb_asprintf_errstring(struct ldb_context *ldb, const char *format, ...) PRINTF_ATTRIBUTE(2,3); void ldb_reset_err_string(struct ldb_context *ldb); const char *ldb_default_modules_dir(void); int ldb_register_module(const struct ldb_module_ops *); typedef int (*ldb_connect_fn)(struct ldb_context *ldb, const char *url, unsigned int flags, const char *options[], struct ldb_module **module); struct ldb_backend_ops { const char *name; ldb_connect_fn connect_fn; }; const char *ldb_default_modules_dir(void); int ldb_register_backend(const char *url_prefix, ldb_connect_fn); void *ldb_dso_load_symbol(struct ldb_context *ldb, const char *name, const char *symbol); struct ldb_handle *ldb_handle_new(TALLOC_CTX *mem_ctx, struct ldb_context *ldb); int ldb_module_send_entry(struct ldb_request *req, struct ldb_message *msg); int ldb_module_send_referral(struct ldb_request *req, char *ref); int ldb_module_done(struct ldb_request *req, struct ldb_control **ctrls, struct ldb_extended *response, int error); int ldb_mod_register_control(struct ldb_module *module, const char *oid); #endif