diff options
author | Andrew Tridgell <tridge@samba.org> | 2008-06-17 13:11:29 +1000 |
---|---|---|
committer | Andrew Tridgell <tridge@samba.org> | 2008-06-17 13:11:29 +1000 |
commit | 310875e637fd237752770027b28675ed970352dd (patch) | |
tree | c89feb3d60d311f064c5e266c11e85aed2e240a8 | |
parent | 370f95acfc197759f9140876b31ac127d3a0e10c (diff) | |
download | samba-310875e637fd237752770027b28675ed970352dd.tar.gz samba-310875e637fd237752770027b28675ed970352dd.tar.bz2 samba-310875e637fd237752770027b28675ed970352dd.zip |
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.
(This used to be commit 1b0621068998590e7b1e9528b78744dcd2cd5909)
-rw-r--r-- | source4/include/includes.h | 6 | ||||
-rw-r--r-- | source4/lib/ldb/common/ldb.c | 10 | ||||
-rw-r--r-- | source4/lib/ldb/common/ldb_modules.c | 10 | ||||
-rw-r--r-- | source4/param/util.c | 2 |
4 files changed, 7 insertions, 21 deletions
diff --git a/source4/include/includes.h b/source4/include/includes.h index 1a92e46657..df0d8f7713 100644 --- a/source4/include/includes.h +++ b/source4/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/source4/lib/ldb/common/ldb.c b/source4/lib/ldb/common/ldb.c index d0570c5382..cac0a383d8 100644 --- a/source4/lib/ldb/common/ldb.c +++ b/source4/lib/ldb/common/ldb.c @@ -185,16 +185,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); if (symbol_name == NULL) { diff --git a/source4/lib/ldb/common/ldb_modules.c b/source4/lib/ldb/common/ldb_modules.c index ddbe0f23a6..fbfb5e5322 100644 --- a/source4/lib/ldb/common/ldb_modules.c +++ b/source4/lib/ldb/common/ldb_modules.c @@ -224,16 +224,6 @@ int ldb_load_modules_list(struct ldb_context *ldb, const char **module_list, str 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]); if (symbol_name == NULL) { diff --git a/source4/param/util.c b/source4/param/util.c index 15e3b4768c..ec192939d0 100644 --- a/source4/param/util.c +++ b/source4/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())); |