diff options
Diffstat (limited to 'source4')
-rw-r--r-- | source4/build/m4/public.m4 | 9 | ||||
-rw-r--r-- | source4/lib/basic.mk | 3 | ||||
-rw-r--r-- | source4/lib/ldb/config.m4 | 5 | ||||
-rw-r--r-- | source4/lib/module.c | 93 | ||||
-rw-r--r-- | source4/lib/registry/config.m4 | 10 | ||||
-rw-r--r-- | source4/lib/tdb/config.m4 | 5 |
6 files changed, 96 insertions, 29 deletions
diff --git a/source4/build/m4/public.m4 b/source4/build/m4/public.m4 index c70514bdb6..69bce86f4d 100644 --- a/source4/build/m4/public.m4 +++ b/source4/build/m4/public.m4 @@ -16,8 +16,6 @@ dnl SMB_EXT_LIB_FROM_PKGCONFIG(name,pkg-config name) dnl dnl SMB_EXT_LIB(name,libs,cflags,cppflags,ldflags) dnl -dnl SMB_LIBRARY_ENABLE(name,default_build) -dnl dnl SMB_BINARY_ENABLE(name,default_build) dnl dnl ####################################################### @@ -150,13 +148,6 @@ LDFLAGS = $5 " ]) -dnl SMB_LIBRARY_ENABLE(name,default_build) -AC_DEFUN([SMB_LIBRARY_ENABLE], -[ -SMB_INFO_ENABLES="$SMB_INFO_ENABLES -\$enabled{$1} = \"$2\";" -]) - dnl SMB_BINARY_ENABLE(name,default_build) AC_DEFUN([SMB_BINARY_ENABLE], [ diff --git a/source4/lib/basic.mk b/source4/lib/basic.mk index 3ed5381908..6debed79c9 100644 --- a/source4/lib/basic.mk +++ b/source4/lib/basic.mk @@ -55,6 +55,9 @@ INIT_OBJ_FILES = \ OBJ_FILES = \ gencache.o \ +[SUBSYSTEM::MODULE] +OBJ_FILES = module.o + ############################## # Start SUBSYSTEM LIBBASIC [SUBSYSTEM::LIBBASIC] diff --git a/source4/lib/ldb/config.m4 b/source4/lib/ldb/config.m4 index 2b251befbb..551bacf5c9 100644 --- a/source4/lib/ldb/config.m4 +++ b/source4/lib/ldb/config.m4 @@ -2,8 +2,3 @@ SMB_MODULE_DEFAULT(libldb_sqlite3,NOT) if test x"$with_sqlite3_support" = x"yes"; then SMB_MODULE_DEFAULT(libldb_sqlite3,STATIC) fi - -SMB_LIBRARY_ENABLE(libldb,NO) -if test x"$experimental" = x"yes"; then - SMB_LIBRARY_ENABLE(libldb,YES) -fi diff --git a/source4/lib/module.c b/source4/lib/module.c new file mode 100644 index 0000000000..b46d2b317c --- /dev/null +++ b/source4/lib/module.c @@ -0,0 +1,93 @@ +/* + Unix SMB/CIFS implementation. + + Copyright (C) Jelmer Vernooij 2005 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#include "includes.h" +#include "dynconfig.h" +#include "system/dir.h" + +static BOOL load_module(TALLOC_CTX *mem_ctx, const char *dir, const char *name) +{ + char *path; + void *handle; + BOOL (*init_module_fn) (void); + BOOL ret; + + path = talloc_asprintf(mem_ctx, "%s/%s", dir, name); + + handle = dlopen(path, 0); + if (handle == NULL) { + DEBUG(0, ("Unable to open %s: %s\n", path, dlerror())); + return False; + } + + init_module_fn = dlsym(handle, "init_module"); + + if (init_module_fn == NULL) { + DEBUG(0, ("Unable to find init_module() in %s: %s\n", path, dlerror())); + return False; + } + + ret = init_module_fn(); + if (!ret) { + DEBUG(1, ("Loading module '%s' failed\n", path)); + } + + dlclose(handle); + + talloc_free(path); + + return ret; +} + +BOOL load_modules(const char *subsystem) +{ + DIR *dir; + struct dirent *entry; + char *dir_path; + BOOL ret; + TALLOC_CTX *mem_ctx; + + mem_ctx = talloc_init(NULL); + + dir_path = talloc_asprintf(mem_ctx, "%s/%s", dyn_LIBDIR, subsystem); + if (!dir_path) { + talloc_free(mem_ctx); + return False; + } + + dir = opendir(subsystem); + if (dir == NULL) { + talloc_free(mem_ctx); + return False; + } + + while((entry = readdir(dir))) { + if (!strcmp(entry->d_name, ".") || !strcmp(entry->d_name, "..")) + continue; + + ret &= load_module(mem_ctx, dir_path, entry->d_name); + } + + closedir(dir); + + talloc_free(mem_ctx); + + return ret; +} diff --git a/source4/lib/registry/config.m4 b/source4/lib/registry/config.m4 index 27e55c63b4..ffea96c829 100644 --- a/source4/lib/registry/config.m4 +++ b/source4/lib/registry/config.m4 @@ -1,10 +1,4 @@ # Registry backends - -if test t$BLDSHARED = ttrue; then - LIBWINREG_SHARED=bin/libwinregistry.$SHLIBEXT -fi -LIBWINREG=libwinregistry - SMB_MODULE_DEFAULT(registry_gconf, NOT) SMB_EXT_LIB_FROM_PKGCONFIG(gconf, gconf-2.0) @@ -16,7 +10,3 @@ AC_ARG_ENABLE(reg-gconf, SMB_MODULE_DEFAULT(registry_gconf, STATIC) fi ]) - -if test x"$experimental" = x"yes"; then - SMB_LIBRARY_ENABLE(libwinregistry, YES) -fi diff --git a/source4/lib/tdb/config.m4 b/source4/lib/tdb/config.m4 index f1aa95df54..bf3949790a 100644 --- a/source4/lib/tdb/config.m4 +++ b/source4/lib/tdb/config.m4 @@ -5,8 +5,3 @@ AC_DEFINE([_GNU_SOURCE],[],[Pull in GNU extensions]) AC_HAVE_DECL(pread, [#include <unistd.h>]) AC_HAVE_DECL(pwrite, [#include <unistd.h>]) - -if test x"$experimental" = x"yes"; then - SMB_LIBRARY_ENABLE(libtdb,YES) -fi - |