LCOV - code coverage report
Current view: top level - usr/include - ldb_module.h (source / functions) Hit Total Coverage
Test: .coverage.total Lines: 1 1 100.0 %
Date: 2015-10-19 Functions: 1 1 100.0 %

          Line data    Source code
       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             : 
      38             : struct ldb_context;
      39             : struct ldb_module;
      40             : 
      41             : /**
      42             :    internal flag bits on message elements. Must be within LDB_FLAG_INTERNAL_MASK
      43             :  */
      44             : #define LDB_FLAG_INTERNAL_DISABLE_VALIDATION 0x10
      45             : 
      46             : /* disable any single value checking on this attribute */
      47             : #define LDB_FLAG_INTERNAL_DISABLE_SINGLE_VALUE_CHECK 0x20
      48             : 
      49             : /* attribute has failed access check and must not be exposed */
      50             : #define LDB_FLAG_INTERNAL_INACCESSIBLE_ATTRIBUTE 0x40
      51             : 
      52             : /* force single value checking on this attribute */
      53             : #define LDB_FLAG_INTERNAL_FORCE_SINGLE_VALUE_CHECK 0x80
      54             : 
      55             : /* an extended match rule that always fails to match */
      56             : #define SAMBA_LDAP_MATCH_ALWAYS_FALSE "1.3.6.1.4.1.7165.4.5.1"
      57             : 
      58             : /* The const char * const * pointer to a list of secret (password)
      59             :  * attributes, not to be printed in trace messages */
      60             : #define LDB_SECRET_ATTRIBUTE_LIST_OPAQUE "LDB_SECRET_ATTRIBUTE_LIST"
      61             : 
      62             : /*
      63             :    these function pointers define the operations that a ldb module can intercept
      64             : */
      65             : struct ldb_module_ops {
      66             :         const char *name;
      67             :         int (*init_context) (struct ldb_module *);
      68             :         int (*search)(struct ldb_module *, struct ldb_request *); /* search */
      69             :         int (*add)(struct ldb_module *, struct ldb_request *); /* add */
      70             :         int (*modify)(struct ldb_module *, struct ldb_request *); /* modify */
      71             :         int (*del)(struct ldb_module *, struct ldb_request *); /* delete */
      72             :         int (*rename)(struct ldb_module *, struct ldb_request *); /* rename */
      73             :         int (*request)(struct ldb_module *, struct ldb_request *); /* match any other operation */
      74             :         int (*extended)(struct ldb_module *, struct ldb_request *); /* extended operations */
      75             :         int (*start_transaction)(struct ldb_module *);
      76             :         int (*prepare_commit)(struct ldb_module *);
      77             :         int (*end_transaction)(struct ldb_module *);
      78             :         int (*del_transaction)(struct ldb_module *);
      79             :         int (*sequence_number)(struct ldb_module *, struct ldb_request *);
      80             :         void *private_data;
      81             : };
      82             : 
      83             : 
      84             : /* The following definitions come from lib/ldb/common/ldb_debug.c  */
      85             : void ldb_debug(struct ldb_context *ldb, enum ldb_debug_level level, const char *fmt, ...) PRINTF_ATTRIBUTE(3, 4);
      86             : void ldb_debug_set(struct ldb_context *ldb, enum ldb_debug_level level, 
      87             :                    const char *fmt, ...) PRINTF_ATTRIBUTE(3, 4);
      88             : void ldb_debug_add(struct ldb_context *ldb, const char *fmt, ...) PRINTF_ATTRIBUTE(2, 3);
      89             : void ldb_debug_end(struct ldb_context *ldb, enum ldb_debug_level level);
      90             : void ldb_vdebug(struct ldb_context *ldb, enum ldb_debug_level level, const char *fmt, va_list ap) PRINTF_ATTRIBUTE(3, 0);
      91             : 
      92             : #define ldb_error(ldb, ecode, reason) ldb_error_at(ldb, ecode, reason, __FILE__, __LINE__)
      93             : #define ldb_module_error(module, ecode, reason) ldb_error_at(ldb_module_get_ctx(module), ecode, reason, __FILE__, __LINE__)
      94             : 
      95             : #define ldb_oom(ldb) ldb_error(ldb, LDB_ERR_OPERATIONS_ERROR, "ldb out of memory")
      96             : #define ldb_module_oom(module) ldb_oom(ldb_module_get_ctx(module))
      97             : #define ldb_operr(ldb) ldb_error(ldb, LDB_ERR_OPERATIONS_ERROR, "operations error")
      98             : #define ldb_module_operr(module) ldb_error(ldb_module_get_ctx(module), LDB_ERR_OPERATIONS_ERROR, "operations error")
      99             : 
     100             : /* The following definitions come from lib/ldb/common/ldb.c  */
     101             : 
     102             : void ldb_request_set_state(struct ldb_request *req, int state);
     103             : int ldb_request_get_status(struct ldb_request *req);
     104             : 
     105             : unsigned int ldb_get_create_perms(struct ldb_context *ldb);
     106             : 
     107             : const struct ldb_schema_syntax *ldb_standard_syntax_by_name(struct ldb_context *ldb,
     108             :                                                             const char *syntax);
     109             : 
     110             : /* The following definitions come from lib/ldb/common/ldb_attributes.c  */
     111             : 
     112             : int ldb_schema_attribute_add_with_syntax(struct ldb_context *ldb,
     113             :                                          const char *name,
     114             :                                          unsigned flags,
     115             :                                          const struct ldb_schema_syntax *syntax);
     116             : int ldb_schema_attribute_add(struct ldb_context *ldb, 
     117             :                              const char *name,
     118             :                              unsigned flags,
     119             :                              const char *syntax);
     120             : void ldb_schema_attribute_remove(struct ldb_context *ldb, const char *name);
     121             : 
     122             : /* we allow external code to override the name -> schema_attribute function */
     123             : typedef const struct ldb_schema_attribute *(*ldb_attribute_handler_override_fn_t)(struct ldb_context *, void *, const char *);
     124             : 
     125             : void ldb_schema_attribute_set_override_handler(struct ldb_context *ldb,
     126             :                                                ldb_attribute_handler_override_fn_t override,
     127             :                                                void *private_data);
     128             : 
     129             : /* A useful function to build comparison functions with */
     130             : int ldb_any_comparison(struct ldb_context *ldb, void *mem_ctx, 
     131             :                        ldb_attr_handler_t canonicalise_fn, 
     132             :                        const struct ldb_val *v1,
     133             :                        const struct ldb_val *v2);
     134             : 
     135             : /* The following definitions come from lib/ldb/common/ldb_controls.c  */
     136             : int ldb_save_controls(struct ldb_control *exclude, struct ldb_request *req, struct ldb_control ***saver);
     137             : /* Returns a list of controls, except the one specified.  Included
     138             :  * controls become a child of returned list if they were children of
     139             :  * controls_in */
     140             : struct ldb_control **ldb_controls_except_specified(struct ldb_control **controls_in, 
     141             :                                                TALLOC_CTX *mem_ctx, 
     142             :                                                struct ldb_control *exclude);
     143             : int ldb_check_critical_controls(struct ldb_control **controls);
     144             : 
     145             : /* The following definitions come from lib/ldb/common/ldb_ldif.c  */
     146             : int ldb_should_b64_encode(struct ldb_context *ldb, const struct ldb_val *val);
     147             : 
     148             : /* The following definitions come from lib/ldb/common/ldb_match.c  */
     149             : int ldb_match_msg(struct ldb_context *ldb,
     150             :                   const struct ldb_message *msg,
     151             :                   const struct ldb_parse_tree *tree,
     152             :                   struct ldb_dn *base,
     153             :                   enum ldb_scope scope);
     154             : 
     155             : int ldb_match_msg_error(struct ldb_context *ldb,
     156             :                         const struct ldb_message *msg,
     157             :                         const struct ldb_parse_tree *tree,
     158             :                         struct ldb_dn *base,
     159             :                         enum ldb_scope scope,
     160             :                         bool *matched);
     161             : 
     162             : int ldb_match_msg_objectclass(const struct ldb_message *msg,
     163             :                               const char *objectclass);
     164             : 
     165             : int ldb_register_extended_match_rules(struct ldb_context *ldb);
     166             : 
     167             : /* The following definitions come from lib/ldb/common/ldb_modules.c  */
     168             : 
     169             : struct ldb_module *ldb_module_new(TALLOC_CTX *memctx,
     170             :                                   struct ldb_context *ldb,
     171             :                                   const char *module_name,
     172             :                                   const struct ldb_module_ops *ops);
     173             : 
     174             : const char * ldb_module_get_name(struct ldb_module *module);
     175             : struct ldb_context *ldb_module_get_ctx(struct ldb_module *module);
     176             : void *ldb_module_get_private(struct ldb_module *module);
     177             : void ldb_module_set_private(struct ldb_module *module, void *private_data);
     178             : const struct ldb_module_ops *ldb_module_get_ops(struct ldb_module *module);
     179             : 
     180             : int ldb_next_request(struct ldb_module *module, struct ldb_request *request);
     181             : int ldb_next_start_trans(struct ldb_module *module);
     182             : int ldb_next_end_trans(struct ldb_module *module);
     183             : int ldb_next_del_trans(struct ldb_module *module);
     184             : int ldb_next_prepare_commit(struct ldb_module *module);
     185             : int ldb_next_init(struct ldb_module *module);
     186             : 
     187             : void ldb_set_errstring(struct ldb_context *ldb, const char *err_string);
     188             : void ldb_asprintf_errstring(struct ldb_context *ldb, const char *format, ...) PRINTF_ATTRIBUTE(2,3);
     189             : void ldb_reset_err_string(struct ldb_context *ldb);
     190             : int ldb_error_at(struct ldb_context *ldb, int ecode, const char *reason, const char *file, int line);
     191             : 
     192             : const char *ldb_default_modules_dir(void);
     193             : 
     194             : int ldb_register_module(const struct ldb_module_ops *);
     195             : 
     196             : typedef int (*ldb_connect_fn)(struct ldb_context *ldb, const char *url,
     197             :                               unsigned int flags, const char *options[],
     198             :                               struct ldb_module **module);
     199             : 
     200             : struct ldb_backend_ops {
     201             :         const char *name;
     202             :         ldb_connect_fn connect_fn;
     203             : };
     204             : 
     205             : const char *ldb_default_modules_dir(void);
     206             : 
     207             : int ldb_register_backend(const char *url_prefix, ldb_connect_fn, bool);
     208             : 
     209             : struct ldb_handle *ldb_handle_new(TALLOC_CTX *mem_ctx, struct ldb_context *ldb);
     210             : 
     211             : int ldb_module_send_entry(struct ldb_request *req,
     212             :                           struct ldb_message *msg,
     213             :                           struct ldb_control **ctrls);
     214             : 
     215             : int ldb_module_send_referral(struct ldb_request *req,
     216             :                                            char *ref);
     217             : 
     218             : int ldb_module_done(struct ldb_request *req,
     219             :                     struct ldb_control **ctrls,
     220             :                     struct ldb_extended *response,
     221             :                     int error);
     222             : 
     223             : int ldb_mod_register_control(struct ldb_module *module, const char *oid);
     224             : 
     225             : void ldb_set_default_dns(struct ldb_context *ldb);
     226             : /**
     227             :   Add a ldb_control to a ldb_reply
     228             : 
     229             :   \param ares the reply struct where to add the control
     230             :   \param oid the object identifier of the control as string
     231             :   \param critical whether the control should be critical or not
     232             :   \param data a talloc pointer to the control specific data
     233             : 
     234             :   \return result code (LDB_SUCCESS on success, or a failure code)
     235             : */
     236             : int ldb_reply_add_control(struct ldb_reply *ares, const char *oid, bool critical, void *data);
     237             : 
     238             : /**
     239             :   mark a request as untrusted. This tells the rootdse module to remove
     240             :   unregistered controls
     241             :  */
     242             : void ldb_req_mark_untrusted(struct ldb_request *req);
     243             : 
     244             : /**
     245             :   mark a request as trusted.
     246             :  */
     247             : void ldb_req_mark_trusted(struct ldb_request *req);
     248             : 
     249             : /**
     250             :    return true is a request is untrusted
     251             :  */
     252             : bool ldb_req_is_untrusted(struct ldb_request *req);
     253             : 
     254             : /**
     255             :   set custom flags. Those flags are set by applications using ldb,
     256             :   they are application dependent and the same bit can have different
     257             :   meaning in different application.
     258             :  */
     259             : void ldb_req_set_custom_flags(struct ldb_request *req, uint32_t flags);
     260             : 
     261             : /**
     262             :   get custom flags. Those flags are set by applications using ldb,
     263             :   they are application dependent and the same bit can have different
     264             :   meaning in different application.
     265             :  */
     266             : uint32_t ldb_req_get_custom_flags(struct ldb_request *req);
     267             : 
     268             : /* load all modules from the given directory */
     269             : int ldb_modules_load(const char *modules_path, const char *version);
     270             : 
     271             : /* init functions prototype */
     272             : typedef int (*ldb_module_init_fn)(const char *);
     273             : 
     274             : /*
     275             :   general ldb hook function
     276             :  */
     277             : enum ldb_module_hook_type { LDB_MODULE_HOOK_CMDLINE_OPTIONS     = 1,
     278             :                             LDB_MODULE_HOOK_CMDLINE_PRECONNECT  = 2,
     279             :                             LDB_MODULE_HOOK_CMDLINE_POSTCONNECT = 3 };
     280             : 
     281             : typedef int (*ldb_hook_fn)(struct ldb_context *, enum ldb_module_hook_type );
     282             : 
     283             : /*
     284             :   register a ldb hook function
     285             :  */
     286             : int ldb_register_hook(ldb_hook_fn hook_fn);
     287             : 
     288             : /*
     289             :   call ldb hooks of a given type
     290             :  */
     291             : int ldb_modules_hook(struct ldb_context *ldb, enum ldb_module_hook_type t);
     292             : 
     293             : #define LDB_MODULE_CHECK_VERSION(version) do { \
     294             :  if (strcmp(version, LDB_VERSION) != 0) { \
     295             :         fprintf(stderr, "ldb: module version mismatch in %s : ldb_version=%s module_version=%s\n", \
     296             :                         __FILE__, version, LDB_VERSION); \
     297             :         return LDB_ERR_UNAVAILABLE; \
     298             :  }} while (0)
     299             : 
     300             : 
     301             : /*
     302             :   return a string representation of the calling chain for the given
     303             :   ldb request
     304             :  */
     305             : char *ldb_module_call_chain(struct ldb_request *req, TALLOC_CTX *mem_ctx);
     306             : 
     307             : /*
     308             :   return the next module in the chain
     309             :  */
     310             : struct ldb_module *ldb_module_next(struct ldb_module *module);
     311             : 
     312             : /*
     313             :   set the next module in the module chain
     314             :  */
     315             : void ldb_module_set_next(struct ldb_module *module, struct ldb_module *next);
     316             : 
     317             : /*
     318             :   load a list of modules
     319             :  */
     320             : int ldb_module_load_list(struct ldb_context *ldb, const char **module_list,
     321             :                          struct ldb_module *backend, struct ldb_module **out);
     322             : 
     323             : /*
     324             :   get the popt_options pointer in the ldb structure. This allows a ldb
     325             :   module to change the command line parsing
     326             :  */
     327             : struct poptOption **ldb_module_popt_options(struct ldb_context *ldb);
     328             : 
     329             : /* modules are called in inverse order on the stack.
     330             :    Lets place them as an admin would think the right order is.
     331             :    Modules order is important */
     332             : const char **ldb_modules_list_from_string(struct ldb_context *ldb, TALLOC_CTX *mem_ctx, const char *string);
     333             : 
     334             : /*
     335             :   return the current ldb flags LDB_FLG_*
     336             :  */
     337             : uint32_t ldb_module_flags(struct ldb_context *ldb);
     338             : 
     339             : int ldb_module_connect_backend(struct ldb_context *ldb,
     340             :                                const char *url,
     341             :                                const char *options[],
     342             :                                struct ldb_module **backend_module);
     343             : 
     344             : /*
     345             :   initialise a chain of modules
     346             :  */
     347             : int ldb_module_init_chain(struct ldb_context *ldb, struct ldb_module *module);
     348             : 
     349             : /*
     350             :  * prototype for the init function defined by dynamically loaded modules
     351             :  */
     352          22 : int ldb_init_module(const char *version);
     353             : 
     354             : /* replace the components of a DN with those from another DN, without
     355             :  * touching the extended components
     356             :  *
     357             :  * return true if successful and false if not
     358             :  * if false is returned the dn may be marked invalid
     359             :  */
     360             : bool ldb_dn_replace_components(struct ldb_dn *dn, struct ldb_dn *new_dn);
     361             : 
     362             : /*
     363             :   walk a parse tree, calling the provided callback on each node
     364             : */
     365             : int ldb_parse_tree_walk(struct ldb_parse_tree *tree,
     366             :                         int (*callback)(struct ldb_parse_tree *tree, void *),
     367             :                         void *private_context);
     368             : 
     369             : /* compare two message elements with ordering - used by modify */
     370             : bool ldb_msg_element_equal_ordered(const struct ldb_message_element *el1,
     371             :                                    const struct ldb_message_element *el2);
     372             : 
     373             : 
     374             : struct ldb_extended_match_rule
     375             : {
     376             :         const char *oid;
     377             :         int (*callback)(struct ldb_context *, const char *oid,
     378             :                         const struct ldb_message *, const char *,
     379             :                         const struct ldb_val *, bool *);
     380             : };
     381             : 
     382             : int ldb_register_extended_match_rule(struct ldb_context *ldb,
     383             :                                      const struct ldb_extended_match_rule *rule);
     384             : 
     385             : #endif

Generated by: LCOV version 1.10