1/* 2 ldb database library 3 4 Copyright (C) Simo Sorce 2008 5 6 ** NOTE! The following LGPL license applies to the ldb 7 ** library. This does NOT imply that all of Samba is released 8 ** under the LGPL 9 10 This library is free software; you can redistribute it and/or 11 modify it under the terms of the GNU Lesser General Public 12 License as published by the Free Software Foundation; either 13 version 3 of the License, or (at your option) any later version. 14 15 This library is distributed in the hope that it will be useful, 16 but WITHOUT ANY WARRANTY; without even the implied warranty of 17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 18 Lesser General Public License for more details. 19 20 You should have received a copy of the GNU Lesser General Public 21 License along with this library; if not, see <http://www.gnu.org/licenses/>. 22*/ 23 24/* 25 * Name: ldb 26 * 27 * Component: ldb module header 28 * 29 * Description: defines ldb modules structures and helpers 30 * 31 */ 32 33#ifndef _LDB_MODULE_H_ 34#define _LDB_MODULE_H_ 35 36#include "ldb.h" 37 38struct ldb_context; 39struct ldb_module; 40 41/* 42 these function pointers define the operations that a ldb module can intercept 43*/ 44struct ldb_module_ops { 45 const char *name; 46 int (*init_context) (struct ldb_module *); 47 int (*search)(struct ldb_module *, struct ldb_request *); /* search */ 48 int (*add)(struct ldb_module *, struct ldb_request *); /* add */ 49 int (*modify)(struct ldb_module *, struct ldb_request *); /* modify */ 50 int (*del)(struct ldb_module *, struct ldb_request *); /* delete */ 51 int (*rename)(struct ldb_module *, struct ldb_request *); /* rename */ 52 int (*request)(struct ldb_module *, struct ldb_request *); /* match any other operation */ 53 int (*extended)(struct ldb_module *, struct ldb_request *); /* extended operations */ 54 int (*start_transaction)(struct ldb_module *); 55 int (*prepare_commit)(struct ldb_module *); 56 int (*end_transaction)(struct ldb_module *); 57 int (*del_transaction)(struct ldb_module *); 58 int (*sequence_number)(struct ldb_module *, struct ldb_request *); 59 void *private_data; 60}; 61 62 63/* The following definitions come from lib/ldb/common/ldb_debug.c */ 64void ldb_debug(struct ldb_context *ldb, enum ldb_debug_level level, const char *fmt, ...) PRINTF_ATTRIBUTE(3, 4); 65void ldb_debug_set(struct ldb_context *ldb, enum ldb_debug_level level, 66 const char *fmt, ...) PRINTF_ATTRIBUTE(3, 4); 67void ldb_debug_add(struct ldb_context *ldb, const char *fmt, ...) PRINTF_ATTRIBUTE(2, 3); 68void ldb_debug_end(struct ldb_context *ldb, enum ldb_debug_level level); 69 70#define ldb_oom(ldb) ldb_debug_set(ldb, LDB_DEBUG_FATAL, "ldb out of memory at %s:%d\n", __FILE__, __LINE__) 71 72/* The following definitions come from lib/ldb/common/ldb.c */ 73 74void ldb_request_set_state(struct ldb_request *req, int state); 75int ldb_request_get_status(struct ldb_request *req); 76 77unsigned int ldb_get_create_perms(struct ldb_context *ldb); 78 79const struct ldb_schema_syntax *ldb_standard_syntax_by_name(struct ldb_context *ldb, 80 const char *syntax); 81 82/* The following definitions come from lib/ldb/common/ldb_attributes.c */ 83 84int ldb_schema_attribute_add_with_syntax(struct ldb_context *ldb, 85 const char *name, 86 unsigned flags, 87 const struct ldb_schema_syntax *syntax); 88int ldb_schema_attribute_add(struct ldb_context *ldb, 89 const char *name, 90 unsigned flags, 91 const char *syntax); 92void ldb_schema_attribute_remove(struct ldb_context *ldb, const char *name); 93 94/* we allow external code to override the name -> schema_attribute function */ 95typedef const struct ldb_schema_attribute *(*ldb_attribute_handler_override_fn_t)(struct ldb_context *, void *, const char *); 96 97void ldb_schema_attribute_set_override_handler(struct ldb_context *ldb, 98 ldb_attribute_handler_override_fn_t override, 99 void *private_data); 100 101/* The following definitions come from lib/ldb/common/ldb_controls.c */ 102struct ldb_control *get_control_from_list(struct ldb_control **controls, const char *oid); 103int save_controls(struct ldb_control *exclude, struct ldb_request *req, struct ldb_control ***saver); 104int check_critical_controls(struct ldb_control **controls); 105 106/* The following definitions come from lib/ldb/common/ldb_ldif.c */ 107int ldb_should_b64_encode(struct ldb_context *ldb, const struct ldb_val *val); 108 109/* The following definitions come from lib/ldb/common/ldb_match.c */ 110int ldb_match_msg(struct ldb_context *ldb, 111 const struct ldb_message *msg, 112 const struct ldb_parse_tree *tree, 113 struct ldb_dn *base, 114 enum ldb_scope scope); 115 116/* The following definitions come from lib/ldb/common/ldb_modules.c */ 117 118struct ldb_module *ldb_module_new(TALLOC_CTX *memctx, 119 struct ldb_context *ldb, 120 const char *module_name, 121 const struct ldb_module_ops *ops); 122 123const char * ldb_module_get_name(struct ldb_module *module); 124struct ldb_context *ldb_module_get_ctx(struct ldb_module *module); 125void *ldb_module_get_private(struct ldb_module *module); 126void ldb_module_set_private(struct ldb_module *module, void *private_data); 127 128int ldb_next_request(struct ldb_module *module, struct ldb_request *request); 129int ldb_next_start_trans(struct ldb_module *module); 130int ldb_next_end_trans(struct ldb_module *module); 131int ldb_next_del_trans(struct ldb_module *module); 132int ldb_next_prepare_commit(struct ldb_module *module); 133int ldb_next_init(struct ldb_module *module); 134 135void ldb_set_errstring(struct ldb_context *ldb, const char *err_string); 136void ldb_asprintf_errstring(struct ldb_context *ldb, const char *format, ...) PRINTF_ATTRIBUTE(2,3); 137void ldb_reset_err_string(struct ldb_context *ldb); 138 139const char *ldb_default_modules_dir(void); 140 141int ldb_register_module(const struct ldb_module_ops *); 142 143typedef int (*ldb_connect_fn)(struct ldb_context *ldb, const char *url, 144 unsigned int flags, const char *options[], 145 struct ldb_module **module); 146 147struct ldb_backend_ops { 148 const char *name; 149 ldb_connect_fn connect_fn; 150}; 151 152const char *ldb_default_modules_dir(void); 153 154int ldb_register_backend(const char *url_prefix, ldb_connect_fn); 155 156struct ldb_handle *ldb_handle_new(TALLOC_CTX *mem_ctx, struct ldb_context *ldb); 157 158int ldb_module_send_entry(struct ldb_request *req, 159 struct ldb_message *msg, 160 struct ldb_control **ctrls); 161 162int ldb_module_send_referral(struct ldb_request *req, 163 char *ref); 164 165int ldb_module_done(struct ldb_request *req, 166 struct ldb_control **ctrls, 167 struct ldb_extended *response, 168 int error); 169 170int ldb_mod_register_control(struct ldb_module *module, const char *oid); 171 172void ldb_set_default_dns(struct ldb_context *ldb); 173 174#endif 175