4 Copyright (C) Simo Sorce 2004-2008
6 ** NOTE! The following LGPL license applies to the ldb
7 ** library. This does NOT imply that all of Samba is released
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.
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.
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/>.
27 * Component: ldb modules core
29 * Description: core modules routines
34 #include "ldb_private.h"
35 #include "dlinklist.h"
36 #include "system/dir.h"
38 static char *ldb_modules_strdup_no_spaces(TALLOC_CTX
*mem_ctx
, const char *string
)
43 trimmed
= talloc_strdup(mem_ctx
, string
);
48 len
= strlen(trimmed
);
49 for (i
= 0; trimmed
[i
] != '\0'; i
++) {
54 memmove(&trimmed
[i
], &trimmed
[i
+ 1], len
-i
-1);
63 /* modules are called in inverse order on the stack.
64 Lets place them as an admin would think the right order is.
65 Modules order is important */
66 const char **ldb_modules_list_from_string(struct ldb_context
*ldb
, TALLOC_CTX
*mem_ctx
, const char *string
)
68 char **modules
= NULL
;
73 /* spaces not admitted */
74 modstr
= ldb_modules_strdup_no_spaces(mem_ctx
, string
);
76 ldb_debug(ldb
, LDB_DEBUG_FATAL
, "Out of Memory in ldb_modules_strdup_no_spaces()");
80 modules
= talloc_realloc(mem_ctx
, modules
, char *, 2);
82 ldb_debug(ldb
, LDB_DEBUG_FATAL
, "Out of Memory in ldb_modules_list_from_string()");
86 talloc_steal(modules
, modstr
);
88 if (modstr
[0] == '\0') {
90 m
= discard_const_p(const char *, modules
);
95 /* The str*r*chr walks backwards: This is how we get the inverse order mentioned above */
96 while ((p
= strrchr(modstr
, ',')) != NULL
) {
102 modules
= talloc_realloc(mem_ctx
, modules
, char *, i
+ 2);
104 ldb_debug(ldb
, LDB_DEBUG_FATAL
, "Out of Memory in ldb_modules_list_from_string()");
111 modules
[i
+ 1] = NULL
;
113 m
= discard_const_p(const char *, modules
);
118 static struct backends_list_entry
{
119 struct ldb_backend_ops
*ops
;
120 struct backends_list_entry
*prev
, *next
;
121 } *ldb_backends
= NULL
;
123 static struct ops_list_entry
{
124 const struct ldb_module_ops
*ops
;
125 struct ops_list_entry
*next
;
126 } *registered_modules
= NULL
;
128 static struct backends_list_entry
*ldb_find_backend(const char *url_prefix
)
130 struct backends_list_entry
*backend
;
132 for (backend
= ldb_backends
; backend
; backend
= backend
->next
) {
133 if (strcmp(backend
->ops
->name
, url_prefix
) == 0) {
142 register a new ldb backend
144 if override is true, then override any existing backend for this prefix
146 int ldb_register_backend(const char *url_prefix
, ldb_connect_fn connectfn
, bool override
)
148 struct backends_list_entry
*be
;
150 be
= ldb_find_backend(url_prefix
);
156 be
= talloc_zero(ldb_backends
, struct backends_list_entry
);
158 return LDB_ERR_OPERATIONS_ERROR
;
160 be
->ops
= talloc_zero(be
, struct ldb_backend_ops
);
163 return LDB_ERR_OPERATIONS_ERROR
;
165 DLIST_ADD_END(ldb_backends
, be
);
168 be
->ops
->name
= url_prefix
;
169 be
->ops
->connect_fn
= connectfn
;
175 Return the ldb module form of a database.
176 The URL can either be one of the following forms
180 flags is made up of LDB_FLG_*
182 the options are passed uninterpreted to the backend, and are
185 This allows modules to get at only the backend module, for example where a
186 module may wish to direct certain requests at a particular backend.
188 int ldb_module_connect_backend(struct ldb_context
*ldb
,
190 const char *options
[],
191 struct ldb_module
**backend_module
)
195 struct backends_list_entry
*be
;
197 if (strchr(url
, ':') != NULL
) {
198 backend
= talloc_strndup(ldb
, url
, strchr(url
, ':')-url
);
201 backend
= talloc_strdup(ldb
, "tdb");
203 if (backend
== NULL
) {
207 be
= ldb_find_backend(backend
);
209 talloc_free(backend
);
212 ldb_debug(ldb
, LDB_DEBUG_FATAL
,
213 "Unable to find backend for '%s' - do you need to set LDB_MODULES_PATH?", url
);
214 return LDB_ERR_OTHER
;
217 ret
= be
->ops
->connect_fn(ldb
, url
, ldb
->flags
, options
, backend_module
);
219 if (ret
!= LDB_SUCCESS
) {
220 ldb_debug(ldb
, LDB_DEBUG_ERROR
,
221 "Failed to connect to '%s' with backend '%s': %s", url
, be
->ops
->name
, ldb_errstring(ldb
));
227 static struct ldb_hooks
{
228 struct ldb_hooks
*next
, *prev
;
233 register a ldb hook function
235 int ldb_register_hook(ldb_hook_fn hook_fn
)
237 struct ldb_hooks
*lc
;
238 lc
= talloc_zero(ldb_hooks
, struct ldb_hooks
);
240 return LDB_ERR_OPERATIONS_ERROR
;
242 lc
->hook_fn
= hook_fn
;
243 DLIST_ADD_END(ldb_hooks
, lc
);
248 call ldb hooks of a given type
250 int ldb_modules_hook(struct ldb_context
*ldb
, enum ldb_module_hook_type t
)
252 struct ldb_hooks
*lc
;
253 for (lc
= ldb_hooks
; lc
; lc
=lc
->next
) {
254 int ret
= lc
->hook_fn(ldb
, t
);
255 if (ret
!= LDB_SUCCESS
) {
263 static const struct ldb_module_ops
*ldb_find_module_ops(const char *name
)
265 struct ops_list_entry
*e
;
267 for (e
= registered_modules
; e
; e
= e
->next
) {
268 if (strcmp(e
->ops
->name
, name
) == 0)
276 int ldb_register_module(const struct ldb_module_ops
*ops
)
278 struct ops_list_entry
*entry
;
280 if (ldb_find_module_ops(ops
->name
) != NULL
)
281 return LDB_ERR_ENTRY_ALREADY_EXISTS
;
283 entry
= talloc(talloc_autofree_context(), struct ops_list_entry
);
285 return LDB_ERR_OPERATIONS_ERROR
;
289 entry
->next
= registered_modules
;
290 registered_modules
= entry
;
296 load a list of modules
298 int ldb_module_load_list(struct ldb_context
*ldb
, const char **module_list
,
299 struct ldb_module
*backend
, struct ldb_module
**out
)
301 struct ldb_module
*module
;
306 for (i
= 0; module_list
&& module_list
[i
] != NULL
; i
++) {
307 struct ldb_module
*current
;
308 const struct ldb_module_ops
*ops
;
310 if (strcmp(module_list
[i
], "") == 0) {
314 ops
= ldb_find_module_ops(module_list
[i
]);
317 ldb_debug(ldb
, LDB_DEBUG_FATAL
, "WARNING: Module [%s] not found - do you need to set LDB_MODULES_PATH?",
319 return LDB_ERR_OPERATIONS_ERROR
;
322 current
= talloc_zero(ldb
, struct ldb_module
);
323 if (current
== NULL
) {
324 return LDB_ERR_OPERATIONS_ERROR
;
326 talloc_set_name(current
, "ldb_module: %s", module_list
[i
]);
331 DLIST_ADD(module
, current
);
338 initialise a chain of modules
340 int ldb_module_init_chain(struct ldb_context
*ldb
, struct ldb_module
*module
)
342 while (module
&& module
->ops
->init_context
== NULL
)
343 module
= module
->next
;
345 /* init is different in that it is not an error if modules
346 * do not require initialization */
349 int ret
= module
->ops
->init_context(module
);
350 if (ret
!= LDB_SUCCESS
) {
351 ldb_debug(ldb
, LDB_DEBUG_FATAL
, "module %s initialization failed : %s",
352 module
->ops
->name
, ldb_strerror(ret
));
360 int ldb_load_modules(struct ldb_context
*ldb
, const char *options
[])
362 const char *modules_string
;
363 const char **modules
= NULL
;
365 TALLOC_CTX
*mem_ctx
= talloc_new(ldb
);
370 /* find out which modules we are requested to activate */
372 /* check if we have a custom module list passd as ldb option */
374 modules_string
= ldb_options_find(ldb
, options
, "modules");
375 if (modules_string
) {
376 modules
= ldb_modules_list_from_string(ldb
, mem_ctx
, modules_string
);
380 /* if not overloaded by options and the backend is not ldap try to load the modules list from ldb */
381 if ((modules
== NULL
) && (strcmp("ldap", ldb
->modules
->ops
->name
) != 0)) {
382 const char * const attrs
[] = { "@LIST" , NULL
};
383 struct ldb_result
*res
= NULL
;
384 struct ldb_dn
*mods_dn
;
386 mods_dn
= ldb_dn_new(mem_ctx
, ldb
, "@MODULES");
387 if (mods_dn
== NULL
) {
388 talloc_free(mem_ctx
);
392 ret
= ldb_search(ldb
, mods_dn
, &res
, mods_dn
, LDB_SCOPE_BASE
, attrs
, "@LIST=*");
394 if (ret
== LDB_ERR_NO_SUCH_OBJECT
) {
395 ldb_debug(ldb
, LDB_DEBUG_TRACE
, "no modules required by the db");
396 } else if (ret
!= LDB_SUCCESS
) {
397 ldb_debug(ldb
, LDB_DEBUG_FATAL
, "ldb error (%s) occurred searching for modules, bailing out", ldb_errstring(ldb
));
398 talloc_free(mem_ctx
);
401 const char *module_list
;
402 if (res
->count
== 0) {
403 ldb_debug(ldb
, LDB_DEBUG_TRACE
, "no modules required by the db");
404 } else if (res
->count
> 1) {
405 ldb_debug(ldb
, LDB_DEBUG_FATAL
, "Too many records found (%u), bailing out", res
->count
);
406 talloc_free(mem_ctx
);
407 return LDB_ERR_OPERATIONS_ERROR
;
409 module_list
= ldb_msg_find_attr_as_string(res
->msgs
[0], "@LIST", NULL
);
411 ldb_debug(ldb
, LDB_DEBUG_TRACE
, "no modules required by the db");
413 modules
= ldb_modules_list_from_string(ldb
, mem_ctx
,
418 talloc_free(mods_dn
);
421 if (modules
!= NULL
) {
422 ret
= ldb_module_load_list(ldb
, modules
, ldb
->modules
, &ldb
->modules
);
423 if (ret
!= LDB_SUCCESS
) {
424 talloc_free(mem_ctx
);
428 ldb_debug(ldb
, LDB_DEBUG_TRACE
, "No modules specified for this database");
431 ret
= ldb_module_init_chain(ldb
, ldb
->modules
);
432 talloc_free(mem_ctx
);
437 by using this we allow ldb modules to only implement the functions they care about,
438 which makes writing a module simpler, and makes it more likely to keep working
441 #define FIND_OP_NOERR(module, op) do { \
442 module = module->next; \
443 while (module && module->ops->op == NULL) module = module->next; \
444 if ((module && module->ldb->flags & LDB_FLG_ENABLE_TRACING)) { \
445 ldb_debug(module->ldb, LDB_DEBUG_TRACE, "ldb_trace_next_request: (%s)->" #op, \
446 module->ops->name); \
450 #define FIND_OP(module, op) do { \
451 struct ldb_context *ldb = module->ldb; \
452 FIND_OP_NOERR(module, op); \
453 if (module == NULL) { \
454 ldb_asprintf_errstring(ldb, "Unable to find backend operation for " #op ); \
455 return LDB_ERR_OPERATIONS_ERROR; \
460 struct ldb_module
*ldb_module_new(TALLOC_CTX
*memctx
,
461 struct ldb_context
*ldb
,
462 const char *module_name
,
463 const struct ldb_module_ops
*ops
)
465 struct ldb_module
*module
;
467 module
= talloc(memctx
, struct ldb_module
);
472 talloc_set_name_const(module
, module_name
);
474 module
->prev
= module
->next
= NULL
;
480 const char * ldb_module_get_name(struct ldb_module
*module
)
482 return module
->ops
->name
;
485 struct ldb_context
*ldb_module_get_ctx(struct ldb_module
*module
)
490 const struct ldb_module_ops
*ldb_module_get_ops(struct ldb_module
*module
)
495 void *ldb_module_get_private(struct ldb_module
*module
)
497 return module
->private_data
;
500 void ldb_module_set_private(struct ldb_module
*module
, void *private_data
)
502 module
->private_data
= private_data
;
506 helper functions to call the next module in chain
509 int ldb_next_request(struct ldb_module
*module
, struct ldb_request
*request
)
513 if (request
->callback
== NULL
) {
514 ldb_set_errstring(module
->ldb
, "Requests MUST define callbacks");
515 return LDB_ERR_UNWILLING_TO_PERFORM
;
518 request
->handle
->nesting
++;
520 switch (request
->operation
) {
522 FIND_OP(module
, search
);
523 ret
= module
->ops
->search(module
, request
);
526 FIND_OP(module
, add
);
527 ret
= module
->ops
->add(module
, request
);
530 FIND_OP(module
, modify
);
531 ret
= module
->ops
->modify(module
, request
);
534 FIND_OP(module
, del
);
535 ret
= module
->ops
->del(module
, request
);
538 FIND_OP(module
, rename
);
539 ret
= module
->ops
->rename(module
, request
);
542 FIND_OP(module
, extended
);
543 ret
= module
->ops
->extended(module
, request
);
546 FIND_OP(module
, request
);
547 ret
= module
->ops
->request(module
, request
);
551 request
->handle
->nesting
--;
553 if (ret
== LDB_SUCCESS
) {
556 if (!ldb_errstring(module
->ldb
)) {
558 switch (request
->operation
) {
582 /* Set a default error string, to place the blame somewhere */
583 ldb_asprintf_errstring(module
->ldb
, "error in module %s: %s during %s (%d)", module
->ops
->name
, ldb_strerror(ret
), op
, ret
);
586 if (!(request
->handle
->flags
& LDB_HANDLE_FLAG_DONE_CALLED
)) {
587 /* It is _extremely_ common that a module returns a
588 * failure without calling ldb_module_done(), but that
589 * guarantees we will end up hanging in
590 * ldb_wait(). This fixes it without having to rewrite
591 * all our modules, and leaves us one less sharp
592 * corner for module developers to cut themselves on
594 ret
= ldb_module_done(request
, NULL
, NULL
, ret
);
599 int ldb_next_init(struct ldb_module
*module
)
601 module
= module
->next
;
603 return ldb_module_init_chain(module
->ldb
, module
);
606 int ldb_next_start_trans(struct ldb_module
*module
)
609 FIND_OP(module
, start_transaction
);
610 ret
= module
->ops
->start_transaction(module
);
611 if (ret
== LDB_SUCCESS
) {
614 if (!ldb_errstring(module
->ldb
)) {
615 /* Set a default error string, to place the blame somewhere */
616 ldb_asprintf_errstring(module
->ldb
, "start_trans error in module %s: %s (%d)", module
->ops
->name
, ldb_strerror(ret
), ret
);
618 if ((module
&& module
->ldb
->flags
& LDB_FLG_ENABLE_TRACING
)) {
619 ldb_debug(module
->ldb
, LDB_DEBUG_TRACE
, "ldb_next_start_trans error: %s",
620 ldb_errstring(module
->ldb
));
625 int ldb_next_end_trans(struct ldb_module
*module
)
628 FIND_OP(module
, end_transaction
);
629 ret
= module
->ops
->end_transaction(module
);
630 if (ret
== LDB_SUCCESS
) {
633 if (!ldb_errstring(module
->ldb
)) {
634 /* Set a default error string, to place the blame somewhere */
635 ldb_asprintf_errstring(module
->ldb
, "end_trans error in module %s: %s (%d)", module
->ops
->name
, ldb_strerror(ret
), ret
);
637 if ((module
&& module
->ldb
->flags
& LDB_FLG_ENABLE_TRACING
)) {
638 ldb_debug(module
->ldb
, LDB_DEBUG_TRACE
, "ldb_next_end_trans error: %s",
639 ldb_errstring(module
->ldb
));
644 int ldb_next_prepare_commit(struct ldb_module
*module
)
647 FIND_OP_NOERR(module
, prepare_commit
);
648 if (module
== NULL
) {
649 /* we are allowed to have no prepare commit in
653 ret
= module
->ops
->prepare_commit(module
);
654 if (ret
== LDB_SUCCESS
) {
657 if (!ldb_errstring(module
->ldb
)) {
658 /* Set a default error string, to place the blame somewhere */
659 ldb_asprintf_errstring(module
->ldb
, "prepare_commit error in module %s: %s (%d)", module
->ops
->name
, ldb_strerror(ret
), ret
);
661 if ((module
&& module
->ldb
->flags
& LDB_FLG_ENABLE_TRACING
)) {
662 ldb_debug(module
->ldb
, LDB_DEBUG_TRACE
, "ldb_next_prepare_commit error: %s",
663 ldb_errstring(module
->ldb
));
668 int ldb_next_del_trans(struct ldb_module
*module
)
671 FIND_OP(module
, del_transaction
);
672 ret
= module
->ops
->del_transaction(module
);
673 if (ret
== LDB_SUCCESS
) {
676 if (!ldb_errstring(module
->ldb
)) {
677 /* Set a default error string, to place the blame somewhere */
678 ldb_asprintf_errstring(module
->ldb
, "del_trans error in module %s: %s (%d)", module
->ops
->name
, ldb_strerror(ret
), ret
);
680 if ((module
&& module
->ldb
->flags
& LDB_FLG_ENABLE_TRACING
)) {
681 ldb_debug(module
->ldb
, LDB_DEBUG_TRACE
, "ldb_next_del_trans error: %s",
682 ldb_errstring(module
->ldb
));
687 struct ldb_handle
*ldb_handle_new(TALLOC_CTX
*mem_ctx
, struct ldb_context
*ldb
)
689 struct ldb_handle
*h
;
691 h
= talloc_zero(mem_ctx
, struct ldb_handle
);
693 ldb_set_errstring(ldb
, "Out of Memory");
697 h
->status
= LDB_SUCCESS
;
698 h
->state
= LDB_ASYNC_INIT
;
707 /* calls the request callback to send an entry
710 * req: the original request passed to your module
711 * msg: reply message (must be a talloc pointer, and it will be stolen
712 * on the ldb_reply that is sent to the callback)
713 * ctrls: controls to send in the reply (must be a talloc pointer, and it will be stolen
714 * on the ldb_reply that is sent to the callback)
717 int ldb_module_send_entry(struct ldb_request
*req
,
718 struct ldb_message
*msg
,
719 struct ldb_control
**ctrls
)
721 struct ldb_reply
*ares
;
723 ares
= talloc_zero(req
, struct ldb_reply
);
725 ldb_oom(req
->handle
->ldb
);
726 req
->callback(req
, NULL
);
727 return LDB_ERR_OPERATIONS_ERROR
;
729 ares
->type
= LDB_REPLY_ENTRY
;
730 ares
->message
= talloc_steal(ares
, msg
);
731 ares
->controls
= talloc_steal(ares
, ctrls
);
732 ares
->error
= LDB_SUCCESS
;
734 if ((req
->handle
->ldb
->flags
& LDB_FLG_ENABLE_TRACING
) &&
735 req
->handle
->nesting
== 0) {
737 struct ldb_ldif ldif
;
739 ldif
.changetype
= LDB_CHANGETYPE_NONE
;
740 ldif
.msg
= discard_const_p(struct ldb_message
, msg
);
742 ldb_debug_add(req
->handle
->ldb
, "ldb_trace_response: ENTRY\n");
746 * ldb_ldif_write_redacted_trace_string() is CRITICAL
747 * for security. It ensures that we do not output
748 * passwords into debug logs
751 s
= ldb_ldif_write_redacted_trace_string(req
->handle
->ldb
, msg
, &ldif
);
752 ldb_debug_add(req
->handle
->ldb
, "%s\n", s
);
754 ldb_debug_end(req
->handle
->ldb
, LDB_DEBUG_TRACE
);
757 return req
->callback(req
, ares
);
760 /* calls the request callback to send an referrals
763 * req: the original request passed to your module
764 * ref: referral string (must be a talloc pointer, steal)
767 int ldb_module_send_referral(struct ldb_request
*req
,
770 struct ldb_reply
*ares
;
772 ares
= talloc_zero(req
, struct ldb_reply
);
774 ldb_oom(req
->handle
->ldb
);
775 req
->callback(req
, NULL
);
776 return LDB_ERR_OPERATIONS_ERROR
;
778 ares
->type
= LDB_REPLY_REFERRAL
;
779 ares
->referral
= talloc_steal(ares
, ref
);
780 ares
->error
= LDB_SUCCESS
;
782 if ((req
->handle
->ldb
->flags
& LDB_FLG_ENABLE_TRACING
) &&
783 req
->handle
->nesting
== 0) {
784 ldb_debug_add(req
->handle
->ldb
, "ldb_trace_response: REFERRAL\n");
785 ldb_debug_add(req
->handle
->ldb
, "ref: %s\n", ref
);
786 ldb_debug_end(req
->handle
->ldb
, LDB_DEBUG_TRACE
);
789 return req
->callback(req
, ares
);
792 /* calls the original request callback
795 * req: the original request passed to your module
796 * ctrls: controls to send in the reply (must be a talloc pointer, steal)
797 * response: results for extended request (steal)
798 * error: LDB_SUCCESS for a successful return
799 * any other ldb error otherwise
801 int ldb_module_done(struct ldb_request
*req
,
802 struct ldb_control
**ctrls
,
803 struct ldb_extended
*response
,
806 struct ldb_reply
*ares
;
808 ares
= talloc_zero(req
, struct ldb_reply
);
810 ldb_oom(req
->handle
->ldb
);
811 req
->callback(req
, NULL
);
812 return LDB_ERR_OPERATIONS_ERROR
;
814 ares
->type
= LDB_REPLY_DONE
;
815 ares
->controls
= talloc_steal(ares
, ctrls
);
816 ares
->response
= talloc_steal(ares
, response
);
819 req
->handle
->flags
|= LDB_HANDLE_FLAG_DONE_CALLED
;
821 if ((req
->handle
->ldb
->flags
& LDB_FLG_ENABLE_TRACING
) &&
822 req
->handle
->nesting
== 0) {
823 ldb_debug_add(req
->handle
->ldb
, "ldb_trace_response: DONE\n");
824 ldb_debug_add(req
->handle
->ldb
, "error: %d\n", error
);
825 if (ldb_errstring(req
->handle
->ldb
)) {
826 ldb_debug_add(req
->handle
->ldb
, "msg: %s\n",
827 ldb_errstring(req
->handle
->ldb
));
829 ldb_debug_end(req
->handle
->ldb
, LDB_DEBUG_TRACE
);
832 return req
->callback(req
, ares
);
835 /* to be used *only* in modules init functions.
836 * this function is synchronous and will register
837 * the requested OID in the rootdse module if present
838 * otherwise it will return an error */
839 int ldb_mod_register_control(struct ldb_module
*module
, const char *oid
)
841 struct ldb_request
*req
;
844 req
= talloc_zero(module
, struct ldb_request
);
846 return LDB_ERR_OPERATIONS_ERROR
;
849 req
->operation
= LDB_REQ_REGISTER_CONTROL
;
850 req
->op
.reg_control
.oid
= oid
;
851 req
->callback
= ldb_op_default_callback
;
853 ldb_set_timeout(module
->ldb
, req
, 0);
855 req
->handle
= ldb_handle_new(req
, module
->ldb
);
856 if (req
->handle
== NULL
) {
857 return LDB_ERR_OPERATIONS_ERROR
;
860 ret
= ldb_request(module
->ldb
, req
);
861 if (ret
== LDB_SUCCESS
) {
862 ret
= ldb_wait(req
->handle
, LDB_WAIT_ALL
);
869 static int ldb_modules_load_dir(const char *modules_dir
, const char *version
);
873 load one module. A static list of loaded module inode numbers is
874 used to prevent a module being loaded twice
876 dlopen() is used on the module, and dlsym() is then used to look for
877 a ldb_init_module() function. If present, that function is called
878 with the ldb version number as an argument.
880 The ldb_init_module() function will typically call
881 ldb_register_module() and ldb_register_backend() to register a
882 module or backend, but it may also be used to register command line
883 handling functions, ldif handlers or any other local
886 The ldb_init_module() function does not get a ldb_context passed in,
887 as modules will be used for multiple ldb context handles. The call
888 from the first ldb_init() is just a convenient way to ensure it is
891 static int ldb_modules_load_path(const char *path
, const char *version
)
894 int (*init_fn
)(const char *);
897 static struct loaded
{
898 struct loaded
*next
, *prev
;
904 bool deepbind_enabled
= (getenv("LDB_MODULES_DISABLE_DEEPBIND") == NULL
);
906 ret
= stat(path
, &st
);
908 fprintf(stderr
, "ldb: unable to stat module %s : %s\n", path
, strerror(errno
));
909 return LDB_ERR_UNAVAILABLE
;
912 for (le
=loaded
; le
; le
=le
->next
) {
913 if (le
->st_ino
== st
.st_ino
&&
914 le
->st_dev
== st
.st_dev
) {
915 /* its already loaded */
920 le
= talloc(loaded
, struct loaded
);
922 fprintf(stderr
, "ldb: unable to allocated loaded entry\n");
923 return LDB_ERR_UNAVAILABLE
;
926 le
->st_ino
= st
.st_ino
;
927 le
->st_dev
= st
.st_dev
;
929 DLIST_ADD_END(loaded
, le
);
931 /* if it is a directory, recurse */
932 if (S_ISDIR(st
.st_mode
)) {
933 return ldb_modules_load_dir(path
, version
);
936 dlopen_flags
= RTLD_NOW
;
939 * use deepbind if possible, to avoid issues with different
940 * system library varients, for example ldb modules may be linked
941 * against Heimdal while the application may use MIT kerberos.
943 * See the dlopen manpage for details.
945 * One typical user is the bind_dlz module of Samba,
946 * but symbol versioniong might be enough...
948 * We need a way to disable this in order to allow the
949 * ldb_*ldap modules to work with a preloaded socket wrapper.
951 * So in future we may remove this completely
952 * or at least invert the default behavior.
954 if (deepbind_enabled
) {
955 dlopen_flags
|= RTLD_DEEPBIND
;
959 handle
= dlopen(path
, dlopen_flags
);
960 if (handle
== NULL
) {
961 fprintf(stderr
, "ldb: unable to dlopen %s : %s\n", path
, dlerror());
965 init_fn
= dlsym(handle
, "ldb_init_module");
966 if (init_fn
== NULL
) {
967 /* ignore it, it could be an old-style
968 * module. Once we've converted all modules we
969 * could consider this an error */
974 ret
= init_fn(version
);
975 if (ret
== LDB_ERR_ENTRY_ALREADY_EXISTS
) {
976 /* the module is already registered - ignore this, as
977 * it can happen if LDB_MODULES_PATH points at both
978 * the build and install directory
985 static int qsort_string(const char **s1
, const char **s2
)
987 return strcmp(*s1
, *s2
);
992 load all modules from the given ldb modules directory. This is run once
993 during the first ldb_init() call.
995 Modules are loaded in alphabetical order to ensure that any module
996 load ordering dependencies are reproducible. Modules should avoid
997 relying on load order
999 static int ldb_modules_load_dir(const char *modules_dir
, const char *version
)
1003 const char **modlist
= NULL
;
1004 TALLOC_CTX
*tmp_ctx
= talloc_new(NULL
);
1005 unsigned i
, num_modules
= 0;
1007 dir
= opendir(modules_dir
);
1009 if (errno
== ENOENT
) {
1010 talloc_free(tmp_ctx
);
1011 /* we don't have any modules */
1014 talloc_free(tmp_ctx
);
1015 fprintf(stderr
, "ldb: unable to open modules directory '%s' - %s\n",
1016 modules_dir
, strerror(errno
));
1017 return LDB_ERR_UNAVAILABLE
;
1021 while ((de
= readdir(dir
))) {
1022 if (ISDOT(de
->d_name
) || ISDOTDOT(de
->d_name
))
1025 modlist
= talloc_realloc(tmp_ctx
, modlist
, const char *, num_modules
+1);
1026 if (modlist
== NULL
) {
1027 talloc_free(tmp_ctx
);
1029 fprintf(stderr
, "ldb: unable to allocate modules list\n");
1030 return LDB_ERR_UNAVAILABLE
;
1032 modlist
[num_modules
] = talloc_asprintf(modlist
, "%s/%s", modules_dir
, de
->d_name
);
1033 if (modlist
[num_modules
] == NULL
) {
1034 talloc_free(tmp_ctx
);
1036 fprintf(stderr
, "ldb: unable to allocate module list entry\n");
1037 return LDB_ERR_UNAVAILABLE
;
1044 /* sort the directory, so we get consistent load ordering */
1045 TYPESAFE_QSORT(modlist
, num_modules
, qsort_string
);
1047 for (i
=0; i
<num_modules
; i
++) {
1048 int ret
= ldb_modules_load_path(modlist
[i
], version
);
1049 if (ret
!= LDB_SUCCESS
) {
1050 fprintf(stderr
, "ldb: failed to initialise module %s : %s\n",
1051 modlist
[i
], ldb_strerror(ret
));
1052 talloc_free(tmp_ctx
);
1057 talloc_free(tmp_ctx
);
1063 load any additional modules from the given directory
1065 void ldb_set_modules_dir(struct ldb_context
*ldb
, const char *path
)
1067 int ret
= ldb_modules_load_path(path
, LDB_VERSION
);
1068 if (ret
!= LDB_SUCCESS
) {
1069 ldb_asprintf_errstring(ldb
, "Failed to load modules from: %s\n", path
);
1075 load all modules static (builtin) modules
1077 static int ldb_modules_load_static(const char *version
)
1079 static bool initialised
;
1080 #define _MODULE_PROTO(init) extern int init(const char *);
1081 STATIC_ldb_MODULES_PROTO
;
1082 const ldb_module_init_fn static_init_functions
[] = { STATIC_ldb_MODULES
};
1090 for (i
=0; static_init_functions
[i
]; i
++) {
1091 int ret
= static_init_functions
[i
](version
);
1092 if (ret
!= LDB_SUCCESS
) {
1100 load all modules from the given ldb modules path, colon
1103 modules are loaded recursively for all subdirectories in the paths
1105 int ldb_modules_load(const char *modules_path
, const char *version
)
1107 char *tok
, *path
, *tok_ptr
=NULL
;
1110 ret
= ldb_modules_load_static(version
);
1111 if (ret
!= LDB_SUCCESS
) {
1115 path
= talloc_strdup(NULL
, modules_path
);
1117 fprintf(stderr
, "ldb: failed to allocate modules_path\n");
1118 return LDB_ERR_UNAVAILABLE
;
1121 for (tok
=strtok_r(path
, ":", &tok_ptr
);
1123 tok
=strtok_r(NULL
, ":", &tok_ptr
)) {
1124 ret
= ldb_modules_load_path(tok
, version
);
1125 if (ret
!= LDB_SUCCESS
) {
1137 return a string representation of the calling chain for the given
1140 char *ldb_module_call_chain(struct ldb_request
*req
, TALLOC_CTX
*mem_ctx
)
1145 ret
= talloc_strdup(mem_ctx
, "");
1150 while (req
&& req
->handle
) {
1151 char *s
= talloc_asprintf_append_buffer(ret
, "req[%u] %p : %s\n",
1152 i
++, req
, ldb_req_location(req
));
1158 req
= req
->handle
->parent
;
1165 return the next module in the chain
1167 struct ldb_module
*ldb_module_next(struct ldb_module
*module
)
1169 return module
->next
;
1173 set the next module in the module chain
1175 void ldb_module_set_next(struct ldb_module
*module
, struct ldb_module
*next
)
1177 module
->next
= next
;
1182 get the popt_options pointer in the ldb structure. This allows a ldb
1183 module to change the command line parsing
1185 struct poptOption
**ldb_module_popt_options(struct ldb_context
*ldb
)
1187 return &ldb
->popt_options
;
1192 return the current ldb flags LDB_FLG_*
1194 uint32_t ldb_module_flags(struct ldb_context
*ldb
)