From 1b0621068998590e7b1e9528b78744dcd2cd5909 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Tue, 17 Jun 2008 13:11:29 +1000 Subject: [PATCH] Change our module code to not use the special symbol name init_module() 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. --- source/include/includes.h | 6 ++++++ source/lib/ldb/common/ldb.c | 10 ---------- source/lib/ldb/common/ldb_modules.c | 10 ---------- source/param/util.c | 2 +- 4 files changed, 7 insertions(+), 21 deletions(-) diff --git a/source/include/includes.h b/source/include/includes.h index 1a92e4665718..df0d8f77132b 100644 --- a/source/include/includes.h +++ b/source/include/includes.h @@ -54,4 +54,10 @@ #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 */ diff --git a/source/lib/ldb/common/ldb.c b/source/lib/ldb/common/ldb.c index d0570c538211..cac0a383d8d6 100644 --- a/source/lib/ldb/common/ldb.c +++ b/source/lib/ldb/common/ldb.c @@ -184,16 +184,6 @@ int ldb_connect_backend(struct ldb_context *ldb, 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); diff --git a/source/lib/ldb/common/ldb_modules.c b/source/lib/ldb/common/ldb_modules.c index ddbe0f23a60c..fbfb5e5322fd 100644 --- a/source/lib/ldb/common/ldb_modules.c +++ b/source/lib/ldb/common/ldb_modules.c @@ -223,16 +223,6 @@ int ldb_load_modules_list(struct ldb_context *ldb, const char **module_list, str 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]); diff --git a/source/param/util.c b/source/param/util.c index 15e3b4768ceb..ec192939d0a1 100644 --- a/source/param/util.c +++ b/source/param/util.c @@ -182,7 +182,7 @@ init_module_fn load_module(TALLOC_CTX *mem_ctx, const char *path) 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())); -- 2.34.1