lib/param: remove unused 'printer_admin'
[Samba/gebeck_regimport.git] / lib / ldb / common / ldb_modules.c
blob440365688bbb45f243e6b508e52402a0574924b8
1 /*
2 ldb database library
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
8 ** under the LGPL
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/>.
25 * Name: ldb
27 * Component: ldb modules core
29 * Description: core modules routines
31 * Author: Simo Sorce
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)
40 size_t i, len;
41 char *trimmed;
43 trimmed = talloc_strdup(mem_ctx, string);
44 if (!trimmed) {
45 return NULL;
48 len = strlen(trimmed);
49 for (i = 0; trimmed[i] != '\0'; i++) {
50 switch (trimmed[i]) {
51 case ' ':
52 case '\t':
53 case '\n':
54 memmove(&trimmed[i], &trimmed[i + 1], len -i -1);
55 break;
59 return trimmed;
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;
69 const char **m;
70 char *modstr, *p;
71 unsigned int i;
73 /* spaces not admitted */
74 modstr = ldb_modules_strdup_no_spaces(mem_ctx, string);
75 if ( ! modstr) {
76 ldb_debug(ldb, LDB_DEBUG_FATAL, "Out of Memory in ldb_modules_strdup_no_spaces()");
77 return NULL;
80 modules = talloc_realloc(mem_ctx, modules, char *, 2);
81 if ( ! modules ) {
82 ldb_debug(ldb, LDB_DEBUG_FATAL, "Out of Memory in ldb_modules_list_from_string()");
83 talloc_free(modstr);
84 return NULL;
86 talloc_steal(modules, modstr);
88 if (modstr[0] == '\0') {
89 modules[0] = NULL;
90 m = (const char **)modules;
91 return m;
94 i = 0;
95 /* The str*r*chr walks backwards: This is how we get the inverse order mentioned above */
96 while ((p = strrchr(modstr, ',')) != NULL) {
97 *p = '\0';
98 p++;
99 modules[i] = p;
101 i++;
102 modules = talloc_realloc(mem_ctx, modules, char *, i + 2);
103 if ( ! modules ) {
104 ldb_debug(ldb, LDB_DEBUG_FATAL, "Out of Memory in ldb_modules_list_from_string()");
105 return NULL;
109 modules[i] = modstr;
111 modules[i + 1] = NULL;
113 m = (const char **)modules;
115 return m;
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) {
134 return backend;
138 return NULL;
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);
151 if (be) {
152 if (!override) {
153 return LDB_SUCCESS;
155 } else {
156 be = talloc_zero(ldb_backends, struct backends_list_entry);
157 if (!be) {
158 return LDB_ERR_OPERATIONS_ERROR;
160 be->ops = talloc_zero(be, struct ldb_backend_ops);
161 if (!be->ops) {
162 talloc_free(be);
163 return LDB_ERR_OPERATIONS_ERROR;
165 DLIST_ADD_END(ldb_backends, be, struct backends_list_entry);
168 be->ops->name = url_prefix;
169 be->ops->connect_fn = connectfn;
171 return LDB_SUCCESS;
175 Return the ldb module form of a database.
176 The URL can either be one of the following forms
177 ldb://path
178 ldapi://path
180 flags is made up of LDB_FLG_*
182 the options are passed uninterpreted to the backend, and are
183 backend specific.
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,
189 const char *url,
190 const char *options[],
191 struct ldb_module **backend_module)
193 int ret;
194 char *backend;
195 struct backends_list_entry *be;
197 if (strchr(url, ':') != NULL) {
198 backend = talloc_strndup(ldb, url, strchr(url, ':')-url);
199 } else {
200 /* Default to tdb */
201 backend = talloc_strdup(ldb, "tdb");
203 if (backend == NULL) {
204 return ldb_oom(ldb);
207 be = ldb_find_backend(backend);
209 talloc_free(backend);
211 if (be == NULL) {
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));
222 return ret;
224 return ret;
227 static struct ldb_hooks {
228 struct ldb_hooks *next, *prev;
229 ldb_hook_fn hook_fn;
230 } *ldb_hooks;
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);
239 if (lc == NULL) {
240 return LDB_ERR_OPERATIONS_ERROR;
242 lc->hook_fn = hook_fn;
243 DLIST_ADD_END(ldb_hooks, lc, struct ldb_hooks);
244 return LDB_SUCCESS;
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) {
256 return ret;
259 return 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)
269 return e->ops;
272 return NULL;
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);
284 if (entry == NULL) {
285 return LDB_ERR_OPERATIONS_ERROR;
288 entry->ops = ops;
289 entry->next = registered_modules;
290 registered_modules = entry;
292 return LDB_SUCCESS;
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;
302 unsigned int i;
304 module = backend;
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) {
311 continue;
314 ops = ldb_find_module_ops(module_list[i]);
316 if (ops == NULL) {
317 ldb_debug(ldb, LDB_DEBUG_FATAL, "WARNING: Module [%s] not found - do you need to set LDB_MODULES_PATH?",
318 module_list[i]);
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]);
328 current->ldb = ldb;
329 current->ops = ops;
331 DLIST_ADD(module, current);
333 *out = module;
334 return LDB_SUCCESS;
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 */
348 if (module) {
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));
353 return ret;
357 return LDB_SUCCESS;
360 int ldb_load_modules(struct ldb_context *ldb, const char *options[])
362 const char *modules_string;
363 const char **modules = NULL;
364 int ret;
365 TALLOC_CTX *mem_ctx = talloc_new(ldb);
366 if (!mem_ctx) {
367 return ldb_oom(ldb);
370 /* find out which modules we are requested to activate */
372 /* check if we have a custom module list passd as ldb option */
373 if (options) {
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);
389 return ldb_oom(ldb);
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);
399 return ret;
400 } else {
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;
408 } else {
409 module_list = ldb_msg_find_attr_as_string(res->msgs[0], "@LIST", NULL);
410 if (!module_list) {
411 ldb_debug(ldb, LDB_DEBUG_TRACE, "no modules required by the db");
413 modules = ldb_modules_list_from_string(ldb, mem_ctx,
414 module_list);
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);
425 return ret;
427 } else {
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);
433 return ret;
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
439 when ldb is extended
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); \
448 } while (0)
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; \
457 } while (0)
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);
468 if (!module) {
469 ldb_oom(ldb);
470 return NULL;
472 talloc_set_name_const(module, module_name);
473 module->ldb = ldb;
474 module->prev = module->next = NULL;
475 module->ops = ops;
477 return module;
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)
487 return module->ldb;
490 const struct ldb_module_ops *ldb_module_get_ops(struct ldb_module *module)
492 return module->ops;
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)
511 int ret;
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) {
521 case LDB_SEARCH:
522 FIND_OP(module, search);
523 ret = module->ops->search(module, request);
524 break;
525 case LDB_ADD:
526 FIND_OP(module, add);
527 ret = module->ops->add(module, request);
528 break;
529 case LDB_MODIFY:
530 FIND_OP(module, modify);
531 ret = module->ops->modify(module, request);
532 break;
533 case LDB_DELETE:
534 FIND_OP(module, del);
535 ret = module->ops->del(module, request);
536 break;
537 case LDB_RENAME:
538 FIND_OP(module, rename);
539 ret = module->ops->rename(module, request);
540 break;
541 case LDB_EXTENDED:
542 FIND_OP(module, extended);
543 ret = module->ops->extended(module, request);
544 break;
545 default:
546 FIND_OP(module, request);
547 ret = module->ops->request(module, request);
548 break;
551 request->handle->nesting--;
553 if (ret == LDB_SUCCESS) {
554 return ret;
556 if (!ldb_errstring(module->ldb)) {
557 /* Set a default error string, to place the blame somewhere */
558 ldb_asprintf_errstring(module->ldb, "error in module %s: %s (%d)", module->ops->name, ldb_strerror(ret), ret);
561 if (!(request->handle->flags & LDB_HANDLE_FLAG_DONE_CALLED)) {
562 /* It is _extremely_ common that a module returns a
563 * failure without calling ldb_module_done(), but that
564 * guarantees we will end up hanging in
565 * ldb_wait(). This fixes it without having to rewrite
566 * all our modules, and leaves us one less sharp
567 * corner for module developers to cut themselves on
569 ret = ldb_module_done(request, NULL, NULL, ret);
571 return ret;
574 int ldb_next_init(struct ldb_module *module)
576 module = module->next;
578 return ldb_module_init_chain(module->ldb, module);
581 int ldb_next_start_trans(struct ldb_module *module)
583 int ret;
584 FIND_OP(module, start_transaction);
585 ret = module->ops->start_transaction(module);
586 if (ret == LDB_SUCCESS) {
587 return ret;
589 if (!ldb_errstring(module->ldb)) {
590 /* Set a default error string, to place the blame somewhere */
591 ldb_asprintf_errstring(module->ldb, "start_trans error in module %s: %s (%d)", module->ops->name, ldb_strerror(ret), ret);
593 if ((module && module->ldb->flags & LDB_FLG_ENABLE_TRACING)) {
594 ldb_debug(module->ldb, LDB_DEBUG_TRACE, "ldb_next_start_trans error: %s",
595 ldb_errstring(module->ldb));
597 return ret;
600 int ldb_next_end_trans(struct ldb_module *module)
602 int ret;
603 FIND_OP(module, end_transaction);
604 ret = module->ops->end_transaction(module);
605 if (ret == LDB_SUCCESS) {
606 return ret;
608 if (!ldb_errstring(module->ldb)) {
609 /* Set a default error string, to place the blame somewhere */
610 ldb_asprintf_errstring(module->ldb, "end_trans error in module %s: %s (%d)", module->ops->name, ldb_strerror(ret), ret);
612 if ((module && module->ldb->flags & LDB_FLG_ENABLE_TRACING)) {
613 ldb_debug(module->ldb, LDB_DEBUG_TRACE, "ldb_next_end_trans error: %s",
614 ldb_errstring(module->ldb));
616 return ret;
619 int ldb_next_prepare_commit(struct ldb_module *module)
621 int ret;
622 FIND_OP_NOERR(module, prepare_commit);
623 if (module == NULL) {
624 /* we are allowed to have no prepare commit in
625 backends */
626 return LDB_SUCCESS;
628 ret = module->ops->prepare_commit(module);
629 if (ret == LDB_SUCCESS) {
630 return ret;
632 if (!ldb_errstring(module->ldb)) {
633 /* Set a default error string, to place the blame somewhere */
634 ldb_asprintf_errstring(module->ldb, "prepare_commit error in module %s: %s (%d)", module->ops->name, ldb_strerror(ret), ret);
636 if ((module && module->ldb->flags & LDB_FLG_ENABLE_TRACING)) {
637 ldb_debug(module->ldb, LDB_DEBUG_TRACE, "ldb_next_prepare_commit error: %s",
638 ldb_errstring(module->ldb));
640 return ret;
643 int ldb_next_del_trans(struct ldb_module *module)
645 int ret;
646 FIND_OP(module, del_transaction);
647 ret = module->ops->del_transaction(module);
648 if (ret == LDB_SUCCESS) {
649 return ret;
651 if (!ldb_errstring(module->ldb)) {
652 /* Set a default error string, to place the blame somewhere */
653 ldb_asprintf_errstring(module->ldb, "del_trans error in module %s: %s (%d)", module->ops->name, ldb_strerror(ret), ret);
655 if ((module && module->ldb->flags & LDB_FLG_ENABLE_TRACING)) {
656 ldb_debug(module->ldb, LDB_DEBUG_TRACE, "ldb_next_del_trans error: %s",
657 ldb_errstring(module->ldb));
659 return ret;
662 struct ldb_handle *ldb_handle_new(TALLOC_CTX *mem_ctx, struct ldb_context *ldb)
664 struct ldb_handle *h;
666 h = talloc_zero(mem_ctx, struct ldb_handle);
667 if (h == NULL) {
668 ldb_set_errstring(ldb, "Out of Memory");
669 return NULL;
672 h->status = LDB_SUCCESS;
673 h->state = LDB_ASYNC_INIT;
674 h->ldb = ldb;
675 h->flags = 0;
676 h->location = NULL;
677 h->parent = NULL;
679 return h;
682 /* calls the request callback to send an entry
684 * params:
685 * req: the original request passed to your module
686 * msg: reply message (must be a talloc pointer, and it will be stolen
687 * on the ldb_reply that is sent to the callback)
688 * ctrls: controls to send in the reply (must be a talloc pointer, and it will be stolen
689 * on the ldb_reply that is sent to the callback)
692 int ldb_module_send_entry(struct ldb_request *req,
693 struct ldb_message *msg,
694 struct ldb_control **ctrls)
696 struct ldb_reply *ares;
698 ares = talloc_zero(req, struct ldb_reply);
699 if (!ares) {
700 ldb_oom(req->handle->ldb);
701 req->callback(req, NULL);
702 return LDB_ERR_OPERATIONS_ERROR;
704 ares->type = LDB_REPLY_ENTRY;
705 ares->message = talloc_steal(ares, msg);
706 ares->controls = talloc_steal(ares, ctrls);
707 ares->error = LDB_SUCCESS;
709 if ((req->handle->ldb->flags & LDB_FLG_ENABLE_TRACING) &&
710 req->handle->nesting == 0) {
711 char *s;
712 struct ldb_ldif ldif;
714 ldif.changetype = LDB_CHANGETYPE_NONE;
715 ldif.msg = discard_const_p(struct ldb_message, msg);
717 ldb_debug_add(req->handle->ldb, "ldb_trace_response: ENTRY\n");
720 * The choice to call
721 * ldb_ldif_write_redacted_trace_string() is CRITICAL
722 * for security. It ensures that we do not output
723 * passwords into debug logs
726 s = ldb_ldif_write_redacted_trace_string(req->handle->ldb, msg, &ldif);
727 ldb_debug_add(req->handle->ldb, "%s\n", s);
728 talloc_free(s);
729 ldb_debug_end(req->handle->ldb, LDB_DEBUG_TRACE);
732 return req->callback(req, ares);
735 /* calls the request callback to send an referrals
737 * params:
738 * req: the original request passed to your module
739 * ref: referral string (must be a talloc pointer, steal)
742 int ldb_module_send_referral(struct ldb_request *req,
743 char *ref)
745 struct ldb_reply *ares;
747 ares = talloc_zero(req, struct ldb_reply);
748 if (!ares) {
749 ldb_oom(req->handle->ldb);
750 req->callback(req, NULL);
751 return LDB_ERR_OPERATIONS_ERROR;
753 ares->type = LDB_REPLY_REFERRAL;
754 ares->referral = talloc_steal(ares, ref);
755 ares->error = LDB_SUCCESS;
757 if ((req->handle->ldb->flags & LDB_FLG_ENABLE_TRACING) &&
758 req->handle->nesting == 0) {
759 ldb_debug_add(req->handle->ldb, "ldb_trace_response: REFERRAL\n");
760 ldb_debug_add(req->handle->ldb, "ref: %s\n", ref);
761 ldb_debug_end(req->handle->ldb, LDB_DEBUG_TRACE);
764 return req->callback(req, ares);
767 /* calls the original request callback
769 * params:
770 * req: the original request passed to your module
771 * ctrls: controls to send in the reply (must be a talloc pointer, steal)
772 * response: results for extended request (steal)
773 * error: LDB_SUCCESS for a successful return
774 * any other ldb error otherwise
776 int ldb_module_done(struct ldb_request *req,
777 struct ldb_control **ctrls,
778 struct ldb_extended *response,
779 int error)
781 struct ldb_reply *ares;
783 ares = talloc_zero(req, struct ldb_reply);
784 if (!ares) {
785 ldb_oom(req->handle->ldb);
786 req->callback(req, NULL);
787 return LDB_ERR_OPERATIONS_ERROR;
789 ares->type = LDB_REPLY_DONE;
790 ares->controls = talloc_steal(ares, ctrls);
791 ares->response = talloc_steal(ares, response);
792 ares->error = error;
794 req->handle->flags |= LDB_HANDLE_FLAG_DONE_CALLED;
796 if ((req->handle->ldb->flags & LDB_FLG_ENABLE_TRACING) &&
797 req->handle->nesting == 0) {
798 ldb_debug_add(req->handle->ldb, "ldb_trace_response: DONE\n");
799 ldb_debug_add(req->handle->ldb, "error: %d\n", error);
800 if (ldb_errstring(req->handle->ldb)) {
801 ldb_debug_add(req->handle->ldb, "msg: %s\n",
802 ldb_errstring(req->handle->ldb));
804 ldb_debug_end(req->handle->ldb, LDB_DEBUG_TRACE);
807 return req->callback(req, ares);
810 /* to be used *only* in modules init functions.
811 * this function is synchronous and will register
812 * the requested OID in the rootdse module if present
813 * otherwise it will return an error */
814 int ldb_mod_register_control(struct ldb_module *module, const char *oid)
816 struct ldb_request *req;
817 int ret;
819 req = talloc_zero(module, struct ldb_request);
820 if (req == NULL) {
821 return LDB_ERR_OPERATIONS_ERROR;
824 req->operation = LDB_REQ_REGISTER_CONTROL;
825 req->op.reg_control.oid = oid;
826 req->callback = ldb_op_default_callback;
828 ldb_set_timeout(module->ldb, req, 0);
830 req->handle = ldb_handle_new(req, module->ldb);
831 if (req->handle == NULL) {
832 return LDB_ERR_OPERATIONS_ERROR;
835 ret = ldb_request(module->ldb, req);
836 if (ret == LDB_SUCCESS) {
837 ret = ldb_wait(req->handle, LDB_WAIT_ALL);
839 talloc_free(req);
841 return ret;
844 static int ldb_modules_load_dir(const char *modules_dir, const char *version);
848 load one module. A static list of loaded module inode numbers is
849 used to prevent a module being loaded twice
851 dlopen() is used on the module, and dlsym() is then used to look for
852 a ldb_init_module() function. If present, that function is called
853 with the ldb version number as an argument.
855 The ldb_init_module() function will typically call
856 ldb_register_module() and ldb_register_backend() to register a
857 module or backend, but it may also be used to register command line
858 handling functions, ldif handlers or any other local
859 modififications.
861 The ldb_init_module() function does not get a ldb_context passed in,
862 as modules will be used for multiple ldb context handles. The call
863 from the first ldb_init() is just a convenient way to ensure it is
864 called early enough.
866 static int ldb_modules_load_path(const char *path, const char *version)
868 void *handle;
869 int (*init_fn)(const char *);
870 int ret;
871 struct stat st;
872 static struct loaded {
873 struct loaded *next, *prev;
874 ino_t st_ino;
875 dev_t st_dev;
876 } *loaded;
877 struct loaded *le;
878 int dlopen_flags;
880 ret = stat(path, &st);
881 if (ret != 0) {
882 fprintf(stderr, "ldb: unable to stat module %s : %s\n", path, strerror(errno));
883 return LDB_ERR_UNAVAILABLE;
886 for (le=loaded; le; le=le->next) {
887 if (le->st_ino == st.st_ino &&
888 le->st_dev == st.st_dev) {
889 /* its already loaded */
890 return LDB_SUCCESS;
894 le = talloc(loaded, struct loaded);
895 if (le == NULL) {
896 fprintf(stderr, "ldb: unable to allocated loaded entry\n");
897 return LDB_ERR_UNAVAILABLE;
900 le->st_ino = st.st_ino;
901 le->st_dev = st.st_dev;
903 DLIST_ADD_END(loaded, le, struct loaded);
905 /* if it is a directory, recurse */
906 if (S_ISDIR(st.st_mode)) {
907 return ldb_modules_load_dir(path, version);
910 dlopen_flags = RTLD_NOW;
911 #ifdef RTLD_DEEPBIND
912 /* use deepbind if possible, to avoid issues with different
913 system library varients, for example ldb modules may be linked
914 against Heimdal while the application may use MIT kerberos
916 See the dlopen manpage for details
918 dlopen_flags |= RTLD_DEEPBIND;
919 #endif
921 handle = dlopen(path, dlopen_flags);
922 if (handle == NULL) {
923 fprintf(stderr, "ldb: unable to dlopen %s : %s\n", path, dlerror());
924 return LDB_SUCCESS;
927 init_fn = dlsym(handle, "ldb_init_module");
928 if (init_fn == NULL) {
929 /* ignore it, it could be an old-style
930 * module. Once we've converted all modules we
931 * could consider this an error */
932 dlclose(handle);
933 return LDB_SUCCESS;
936 ret = init_fn(version);
937 if (ret == LDB_ERR_ENTRY_ALREADY_EXISTS) {
938 /* the module is already registered - ignore this, as
939 * it can happen if LDB_MODULES_PATH points at both
940 * the build and install directory
942 ret = LDB_SUCCESS;
944 return ret;
947 static int qsort_string(const char **s1, const char **s2)
949 return strcmp(*s1, *s2);
954 load all modules from the given ldb modules directory. This is run once
955 during the first ldb_init() call.
957 Modules are loaded in alphabetical order to ensure that any module
958 load ordering dependencies are reproducible. Modules should avoid
959 relying on load order
961 static int ldb_modules_load_dir(const char *modules_dir, const char *version)
963 DIR *dir;
964 struct dirent *de;
965 const char **modlist = NULL;
966 TALLOC_CTX *tmp_ctx = talloc_new(NULL);
967 unsigned i, num_modules = 0;
969 dir = opendir(modules_dir);
970 if (dir == NULL) {
971 if (errno == ENOENT) {
972 talloc_free(tmp_ctx);
973 /* we don't have any modules */
974 return LDB_SUCCESS;
976 talloc_free(tmp_ctx);
977 fprintf(stderr, "ldb: unable to open modules directory '%s' - %s\n",
978 modules_dir, strerror(errno));
979 return LDB_ERR_UNAVAILABLE;
983 while ((de = readdir(dir))) {
984 if (ISDOT(de->d_name) || ISDOTDOT(de->d_name))
985 continue;
987 modlist = talloc_realloc(tmp_ctx, modlist, const char *, num_modules+1);
988 if (modlist == NULL) {
989 talloc_free(tmp_ctx);
990 closedir(dir);
991 fprintf(stderr, "ldb: unable to allocate modules list\n");
992 return LDB_ERR_UNAVAILABLE;
994 modlist[num_modules] = talloc_asprintf(modlist, "%s/%s", modules_dir, de->d_name);
995 if (modlist[num_modules] == NULL) {
996 talloc_free(tmp_ctx);
997 closedir(dir);
998 fprintf(stderr, "ldb: unable to allocate module list entry\n");
999 return LDB_ERR_UNAVAILABLE;
1001 num_modules++;
1004 closedir(dir);
1006 /* sort the directory, so we get consistent load ordering */
1007 TYPESAFE_QSORT(modlist, num_modules, qsort_string);
1009 for (i=0; i<num_modules; i++) {
1010 int ret = ldb_modules_load_path(modlist[i], version);
1011 if (ret != LDB_SUCCESS) {
1012 fprintf(stderr, "ldb: failed to initialise module %s : %s\n",
1013 modlist[i], ldb_strerror(ret));
1014 talloc_free(tmp_ctx);
1015 return ret;
1019 talloc_free(tmp_ctx);
1021 return LDB_SUCCESS;
1025 load any additional modules from the given directory
1027 void ldb_set_modules_dir(struct ldb_context *ldb, const char *path)
1029 int ret = ldb_modules_load_path(path, LDB_VERSION);
1030 if (ret != LDB_SUCCESS) {
1031 ldb_asprintf_errstring(ldb, "Failed to load modules from: %s\n", path);
1037 load all modules static (builtin) modules
1039 static int ldb_modules_load_static(const char *version)
1041 static bool initialised;
1042 #define _MODULE_PROTO(init) extern int init(const char *);
1043 STATIC_ldb_MODULES_PROTO;
1044 const ldb_module_init_fn static_init_functions[] = { STATIC_ldb_MODULES };
1045 unsigned i;
1047 if (initialised) {
1048 return LDB_SUCCESS;
1050 initialised = true;
1052 for (i=0; static_init_functions[i]; i++) {
1053 int ret = static_init_functions[i](version);
1054 if (ret != LDB_SUCCESS) {
1055 return ret;
1058 return LDB_SUCCESS;
1062 load all modules from the given ldb modules path, colon
1063 separated.
1065 modules are loaded recursively for all subdirectories in the paths
1067 int ldb_modules_load(const char *modules_path, const char *version)
1069 char *tok, *path, *tok_ptr=NULL;
1070 int ret;
1072 ret = ldb_modules_load_static(version);
1073 if (ret != LDB_SUCCESS) {
1074 return ret;
1077 path = talloc_strdup(NULL, modules_path);
1078 if (path == NULL) {
1079 fprintf(stderr, "ldb: failed to allocate modules_path\n");
1080 return LDB_ERR_UNAVAILABLE;
1083 for (tok=strtok_r(path, ":", &tok_ptr);
1084 tok;
1085 tok=strtok_r(NULL, ":", &tok_ptr)) {
1086 ret = ldb_modules_load_path(tok, version);
1087 if (ret != LDB_SUCCESS) {
1088 talloc_free(path);
1089 return ret;
1092 talloc_free(path);
1094 return LDB_SUCCESS;
1099 return a string representation of the calling chain for the given
1100 ldb request
1102 char *ldb_module_call_chain(struct ldb_request *req, TALLOC_CTX *mem_ctx)
1104 char *ret;
1105 unsigned int i = 0;
1107 ret = talloc_strdup(mem_ctx, "");
1108 if (ret == NULL) {
1109 return NULL;
1112 while (req && req->handle) {
1113 char *s = talloc_asprintf_append_buffer(ret, "req[%u] %p : %s\n",
1114 i++, req, ldb_req_location(req));
1115 if (s == NULL) {
1116 talloc_free(ret);
1117 return NULL;
1119 ret = s;
1120 req = req->handle->parent;
1122 return ret;
1127 return the next module in the chain
1129 struct ldb_module *ldb_module_next(struct ldb_module *module)
1131 return module->next;
1135 set the next module in the module chain
1137 void ldb_module_set_next(struct ldb_module *module, struct ldb_module *next)
1139 module->next = next;
1144 get the popt_options pointer in the ldb structure. This allows a ldb
1145 module to change the command line parsing
1147 struct poptOption **ldb_module_popt_options(struct ldb_context *ldb)
1149 return &ldb->popt_options;
1154 return the current ldb flags LDB_FLG_*
1156 uint32_t ldb_module_flags(struct ldb_context *ldb)
1158 return ldb->flags;