2 Samba4 module loading module (for secrets)
4 Copyright (C) Andrew Bartlett <abartlet@samba.org> 2009
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 3 of the License, or
9 (at your option) any later version.
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with this program. If not, see <http://www.gnu.org/licenses/>.
23 * Component: Samba4 module loading module (for secrets.ldb)
25 * Description: Implement a single 'module' in the secrets.ldb database
27 * This is to avoid forcing a reprovision of the ldb databases when we change the internal structure of the code
29 * Author: Andrew Bartlett
34 #include <ldb_errors.h>
35 #include <ldb_module.h>
36 #include "dsdb/samdb/ldb_modules/util.h"
37 #include "dsdb/samdb/samdb.h"
40 static int samba_secrets_init(struct ldb_module
*module
)
42 struct ldb_context
*ldb
= ldb_module_get_ctx(module
);
44 TALLOC_CTX
*tmp_ctx
= talloc_new(module
);
45 struct ldb_module
*backend_module
, *module_chain
;
46 const char **reverse_module_list
;
48 Add modules to the list to activate them by default
49 beware often order is important
51 The list is presented here as a set of declarations to show the
54 static const char *modules_list
[] = {"update_keytab",
63 /* Now prepare the module chain. Oddly, we must give it to ldb_load_modules_list in REVERSE */
64 for (len
= 0; modules_list
[len
]; len
++) { /* noop */};
66 reverse_module_list
= talloc_array(tmp_ctx
, const char *, len
+1);
67 if (!reverse_module_list
) {
71 for (i
=0; i
< len
; i
++) {
72 reverse_module_list
[i
] = modules_list
[(len
- 1) - i
];
74 reverse_module_list
[i
] = NULL
;
76 /* The backend (at least until the partitions module
77 * reconfigures things) is the next module in the currently
79 backend_module
= ldb_module_next(module
);
80 ret
= ldb_module_load_list(ldb
, reverse_module_list
, backend_module
, &module_chain
);
81 if (ret
!= LDB_SUCCESS
) {
87 /* Set this as the 'next' module, so that we effectivly append it to module chain */
88 ldb_module_set_next(module
, module_chain
);
90 return ldb_next_init(module
);
93 static const struct ldb_module_ops ldb_samba_secrets_module_ops
= {
94 .name
= "samba_secrets",
95 .init_context
= samba_secrets_init
,
98 int ldb_samba_secrets_module_init(const char *version
)
100 LDB_MODULE_CHECK_VERSION(version
);
101 return ldb_register_module(&ldb_samba_secrets_module_ops
);