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
33 #include "lib/ldb/include/ldb.h"
34 #include "lib/ldb/include/ldb_errors.h"
35 #include "lib/ldb/include/ldb_module.h"
36 #include "lib/ldb/include/ldb_private.h"
38 #include "dsdb/samdb/ldb_modules/util.h"
39 #include "dsdb/samdb/samdb.h"
42 static int samba_secrets_init(struct ldb_module
*module
)
44 struct ldb_context
*ldb
= ldb_module_get_ctx(module
);
46 TALLOC_CTX
*tmp_ctx
= talloc_new(module
);
47 struct ldb_module
*backend_module
, *module_chain
;
48 const char **reverse_module_list
;
50 Add modules to the list to activate them by default
51 beware often order is important
53 The list is presented here as a set of declarations to show the
56 static const char *modules_list
[] = {"update_keytab",
63 return LDB_ERR_OPERATIONS_ERROR
;
66 /* Now prepare the module chain. Oddly, we must give it to ldb_load_modules_list in REVERSE */
67 for (len
= 0; modules_list
[len
]; len
++) { /* noop */};
69 reverse_module_list
= talloc_array(tmp_ctx
, const char *, len
+1);
70 if (!reverse_module_list
) {
73 return LDB_ERR_OPERATIONS_ERROR
;
75 for (i
=0; i
< len
; i
++) {
76 reverse_module_list
[i
] = modules_list
[(len
- 1) - i
];
78 reverse_module_list
[i
] = NULL
;
80 /* The backend (at least until the partitions module
81 * reconfigures things) is the next module in the currently
83 backend_module
= module
->next
;
84 ret
= ldb_load_modules_list(ldb
, reverse_module_list
, backend_module
, &module_chain
);
85 if (ret
!= LDB_SUCCESS
) {
91 /* Set this as the 'next' module, so that we effectivly append it to module chain */
92 module
->next
= module_chain
;
94 return ldb_next_init(module
);
97 _PUBLIC_
const struct ldb_module_ops ldb_samba_secrets_module_ops
= {
98 .name
= "samba_secrets",
99 .init_context
= samba_secrets_init
,