Current glibc libraries include a function called init_module(). If we
use the same name, then a dlsym() can find the glibc function if the
module doesn't have an initialisation function.
In ldb, none of our modules have an init_module(), so we end up calling the libc
functions with bogus arguments.
(This used to be commit
1b0621068998590e7b1e9528b78744dcd2cd5909)
#define TALLOC_ABORT(reason) smb_panic(reason)
#endif
+/* this needs to be a string which is not in the C library. We
+ previously used "init_module", but that meant that modules which
+ did not define this function ended up calling the C library
+ function init_module() which makes a system call */
+#define SAMBA_INIT_MODULE "samba_init_module"
+
#endif /* _INCLUDES_H */
fn = ldb_find_backend(backend);
- if (fn == NULL) {
- int (*init_fn) (void);
-
- init_fn = ldb_dso_load_symbol(ldb, backend,
- "init_module");
- if (init_fn != NULL && init_fn() == 0) {
- fn = ldb_find_backend(backend);
- }
- }
-
if (fn == NULL) {
struct ldb_backend_ops *ops;
char *symbol_name = talloc_asprintf(ldb, "ldb_%s_backend_ops", backend);
const struct ldb_module_ops *ops;
ops = ldb_find_module_ops(module_list[i]);
- if (ops == NULL) {
- int (*init_fn) (void);
-
- init_fn = ldb_dso_load_symbol(ldb, module_list[i],
- "init_module");
- if (init_fn != NULL && init_fn() == 0) {
- ops = ldb_find_module_ops(module_list[i]);
- }
- }
-
if (ops == NULL) {
char *symbol_name = talloc_asprintf(ldb, "ldb_%s_module_ops",
module_list[i]);
return NULL;
}
- init_fn = dlsym(handle, "init_module");
+ init_fn = dlsym(handle, SAMBA_INIT_MODULE);
if (init_fn == NULL) {
DEBUG(0, ("Unable to find init_module() in %s: %s\n", path, dlerror()));