From 05bc4de083b993e3db06fdb2a3e1198021526a71 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Sat, 3 Dec 2011 07:03:35 +0100 Subject: Revert making public of the samba-module library. This library was tiny - containing just two public functions than were themselves trivial. The amount of overhead this causes isn't really worth the benefits of sharing the code with other projects like OpenChange. In addition, this code isn't really generically useful anyway, as it can only load from the module path set for Samba at configure time. Adding a new library was breaking the API/ABI anyway, so OpenChange had to be updated to cope with the new situation one way or another. I've added a simpler (compatible) routine for loading modules to OpenChange, which is less than 100 lines of code. Autobuild-User: Jelmer Vernooij Autobuild-Date: Sat Dec 3 08:36:33 CET 2011 on sn-devel-104 --- auth/gensec/gensec_start.c | 14 +- auth/gensec/wscript_build | 2 +- buildtools/wafsamba/wafsamba.py | 2 +- lib/util/ABI/samba-module-0.0.1.sigs | 2 - lib/util/internal_module.c | 203 -------------------------- lib/util/internal_module.h | 42 ------ lib/util/modules.c | 240 +++++++++++++++++++++++++++++++ lib/util/samba-module.pc.in | 11 -- lib/util/samba_module.c | 62 -------- lib/util/samba_module.h | 49 ------- lib/util/samba_modules.h | 59 ++++++++ lib/util/wscript_build | 16 +-- source3/Makefile.in | 2 +- source3/exports/modules-darwin.syms | 2 +- source3/include/includes.h | 2 +- source3/m4/aclocal.m4 | 2 +- source3/modules/perfcount_test.c | 2 +- source3/winbindd/idmap_ad.c | 2 +- source3/winbindd/idmap_adex/idmap_adex.c | 2 +- source3/winbindd/idmap_autorid.c | 2 +- source3/winbindd/idmap_hash/idmap_hash.c | 2 +- source3/winbindd/idmap_rid.c | 2 +- source3/winbindd/idmap_tdb2.c | 2 +- source3/wscript | 2 +- source3/wscript_build | 2 +- source4/auth/ntlm/auth.c | 6 +- source4/auth/ntlm/wscript_build | 2 +- source4/ntptr/ntptr_base.c | 10 +- source4/ntvfs/ntvfs_base.c | 12 +- source4/ntvfs/posix/pvfs_acl.c | 12 +- source4/ntvfs/posix/wscript_build | 2 +- source4/ntvfs/sysdep/sys_lease.c | 6 +- source4/ntvfs/sysdep/sys_notify.c | 6 +- source4/ntvfs/wscript_build | 2 +- source4/param/share.c | 6 +- source4/param/wscript_build | 2 +- source4/rpc_server/dcerpc_server.c | 12 +- source4/smbd/process_model.c | 12 +- source4/smbd/server.c | 12 +- source4/smbd/wscript_build | 2 +- source4/torture/smbtorture.c | 4 +- source4/torture/torture.c | 10 +- 42 files changed, 383 insertions(+), 463 deletions(-) delete mode 100644 lib/util/ABI/samba-module-0.0.1.sigs delete mode 100644 lib/util/internal_module.c delete mode 100644 lib/util/internal_module.h create mode 100644 lib/util/modules.c delete mode 100644 lib/util/samba-module.pc.in delete mode 100644 lib/util/samba_module.c delete mode 100644 lib/util/samba_module.h create mode 100644 lib/util/samba_modules.h diff --git a/auth/gensec/gensec_start.c b/auth/gensec/gensec_start.c index a48606f7cd..c38b97050f 100644 --- a/auth/gensec/gensec_start.c +++ b/auth/gensec/gensec_start.c @@ -29,7 +29,7 @@ #include "auth/gensec/gensec.h" #include "lib/param/param.h" #include "lib/util/tsort.h" -#include "lib/util/samba_module.h" +#include "lib/util/samba_modules.h" /* the list of currently registered GENSEC backends */ static struct gensec_security_ops **generic_security_ops; @@ -878,19 +878,19 @@ _PUBLIC_ NTSTATUS gensec_init(void) #define _MODULE_PROTO(init) extern NTSTATUS init(void); #ifdef STATIC_gensec_MODULES STATIC_gensec_MODULES_PROTO; - samba_module_init_fn static_init[] = { STATIC_gensec_MODULES }; + init_module_fn static_init[] = { STATIC_gensec_MODULES }; #else - samba_module_init_fn *static_init = NULL; + init_module_fn *static_init = NULL; #endif - samba_module_init_fn *shared_init; + init_module_fn *shared_init; if (initialized) return NT_STATUS_OK; initialized = true; - shared_init = samba_module_init_fns_for_subsystem(NULL, "gensec"); + shared_init = load_samba_modules(NULL, "gensec"); - samba_module_init_fns_run(static_init); - samba_module_init_fns_run(shared_init); + run_init_functions(static_init); + run_init_functions(shared_init); talloc_free(shared_init); diff --git a/auth/gensec/wscript_build b/auth/gensec/wscript_build index 6514a064b7..e3e9372c3d 100644 --- a/auth/gensec/wscript_build +++ b/auth/gensec/wscript_build @@ -3,7 +3,7 @@ bld.SAMBA_LIBRARY('gensec', source='gensec.c gensec_start.c', pc_files='gensec.pc', autoproto='gensec_toplevel_proto.h', - public_deps='tevent-util samba-util errors LIBPACKET auth_system_session samba-module gensec_util', + public_deps='tevent-util samba-util errors LIBPACKET auth_system_session samba-modules gensec_util', public_headers='gensec.h', deps='com_err', vnum='0.0.1' diff --git a/buildtools/wafsamba/wafsamba.py b/buildtools/wafsamba/wafsamba.py index 5e4f40d2c4..fd72cf3229 100644 --- a/buildtools/wafsamba/wafsamba.py +++ b/buildtools/wafsamba/wafsamba.py @@ -390,7 +390,7 @@ def SAMBA_MODULE(bld, modname, source, includes='', subsystem=None, init_function=None, - module_init_name='samba_module_init', + module_init_name='samba_init_module', autoproto=None, autoproto_extra_source='', cflags='', diff --git a/lib/util/ABI/samba-module-0.0.1.sigs b/lib/util/ABI/samba-module-0.0.1.sigs deleted file mode 100644 index ee728d4eed..0000000000 --- a/lib/util/ABI/samba-module-0.0.1.sigs +++ /dev/null @@ -1,2 +0,0 @@ -samba_module_init_fns_for_subsystem: samba_module_init_fn *(TALLOC_CTX *, const char *) -samba_module_init_fns_run: bool (samba_module_init_fn *) diff --git a/lib/util/internal_module.c b/lib/util/internal_module.c deleted file mode 100644 index a10d1f3a3b..0000000000 --- a/lib/util/internal_module.c +++ /dev/null @@ -1,203 +0,0 @@ -/* - Unix SMB/CIFS implementation. - Samba utility functions - Copyright (C) Jelmer Vernooij 2002-2003,2005-2007 - Copyright (C) Stefan (metze) Metzmacher 2003 - Copyright (C) Andrew Bartlett 2011 - - 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 3 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, see . -*/ - -#include "includes.h" -#include "dynconfig/dynconfig.h" -#include "lib/util/internal_module.h" -#include "system/filesys.h" -#include "system/dir.h" - -/** - * Obtain the init function from a shared library file - */ -samba_module_init_fn load_module(const char *path, bool is_probe, void **handle_out) -{ - void *handle; - void *init_fn; - char *error; - -#if _SAMBA_BUILD_ == 3 - /* Always try to use LAZY symbol resolving; if the plugin has - * backwards compatibility, there might be symbols in the - * plugin referencing to old (removed) functions - */ - handle = dlopen(path, RTLD_LAZY); -#else - /* This should be a WAF build, where modules should be built - * with no undefined symbols and are already linked against - * the libraries that they are loaded by */ - handle = dlopen(path, RTLD_NOW); -#endif - - /* This call should reset any possible non-fatal errors that - occured since last call to dl* functions */ - error = dlerror(); - - if (handle == NULL) { - int level = is_probe ? 5 : 0; - DEBUG(level, ("Error loading module '%s': %s\n", path, error ? error : "")); - return NULL; - } - - init_fn = (samba_module_init_fn)dlsym(handle, SAMBA_MODULE_INIT); - - /* we could check dlerror() to determine if it worked, because - dlsym() can validly return NULL, but what would we do with - a NULL pointer as a module init function? */ - - if (init_fn == NULL) { - DEBUG(0, ("Unable to find %s() in %s: %s\n", - SAMBA_MODULE_INIT, path, dlerror())); - DEBUG(1, ("Loading module '%s' failed\n", path)); - dlclose(handle); - return NULL; - } - - if (handle_out) { - *handle_out = handle; - } - - return (samba_module_init_fn)init_fn; -} - -/** - * Obtain list of init functions from the modules in the specified - * directory - */ -samba_module_init_fn *load_modules(TALLOC_CTX *mem_ctx, const char *path) -{ - DIR *dir; - struct dirent *entry; - char *filename; - int success = 0; - samba_module_init_fn *ret = talloc_array(mem_ctx, samba_module_init_fn, 2); - - ret[0] = NULL; - - dir = opendir(path); - if (dir == NULL) { - talloc_free(ret); - return NULL; - } - - while((entry = readdir(dir))) { - if (ISDOT(entry->d_name) || ISDOTDOT(entry->d_name)) - continue; - - filename = talloc_asprintf(mem_ctx, "%s/%s", path, entry->d_name); - - ret[success] = load_module(filename, true, NULL); - if (ret[success]) { - ret = talloc_realloc(mem_ctx, ret, samba_module_init_fn, success+2); - success++; - ret[success] = NULL; - } - - talloc_free(filename); - } - - closedir(dir); - - return ret; -} - -/* Load a dynamic module. Only log a level 0 error if we are not checking - for the existence of a module (probling). */ - -static NTSTATUS do_smb_load_module(const char *module_name, bool is_probe) -{ - void *handle; - samba_module_init_fn init; - NTSTATUS status; - - init = load_module(module_name, is_probe, &handle); - if (!init) { - return NT_STATUS_UNSUCCESSFUL; - } - - DEBUG(2, ("Module '%s' loaded\n", module_name)); - - status = init(); - if (!NT_STATUS_IS_OK(status)) { - DEBUG(0, ("Module '%s' initialization failed: %s\n", - module_name, get_friendly_nt_error_msg(status))); - dlclose(handle); - } - - return status; -} - -/* Load all modules in list and return number of - * modules that has been successfully loaded */ -int smb_load_modules(const char **modules) -{ - int i; - int success = 0; - - for(i = 0; modules[i]; i++){ - if(NT_STATUS_IS_OK(do_smb_load_module(modules[i], false))) { - success++; - } - } - - DEBUG(2, ("%d modules successfully loaded\n", success)); - - return success; -} - -NTSTATUS smb_probe_module(const char *subsystem, const char *module) -{ - char *full_path = NULL; - TALLOC_CTX *ctx = talloc_stackframe(); - NTSTATUS status; - - /* Check for absolute path */ - - /* if we make any 'samba multibyte string' - calls here, we break - for loading string modules */ - - DEBUG(5, ("Probing module '%s'\n", module)); - - if (module[0] == '/') { - status = do_smb_load_module(module, true); - TALLOC_FREE(ctx); - return status; - } - - full_path = talloc_asprintf(ctx, - "%s/%s.%s", - modules_path(ctx, subsystem), - module, - shlib_ext()); - if (!full_path) { - TALLOC_FREE(ctx); - return NT_STATUS_NO_MEMORY; - } - - DEBUG(5, ("Probing module '%s': Trying to load from %s\n", - module, full_path)); - - status = do_smb_load_module(full_path, true); - - TALLOC_FREE(ctx); - return status; -} diff --git a/lib/util/internal_module.h b/lib/util/internal_module.h deleted file mode 100644 index 9cbddeae03..0000000000 --- a/lib/util/internal_module.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - Unix SMB/CIFS implementation. - Handling of idle/exit events - Copyright (C) Stefan (metze) Metzmacher 2003 - Copyright (C) Andrew Bartlett 2011 - - 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 3 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, see . -*/ - -#ifndef _INTERNAL_MODULES_H -#define _INTERNAL_MODULES_H - -#include "lib/util/samba_module.h" - -/** - * Obtain the init function from a shared library file. - * - * The handle to dlclose() in case of error is returns in *handle if handle is not NULL - */ -samba_module_init_fn load_module(const char *path, bool is_probe, void **handle); - -int smb_load_modules(const char **modules); -NTSTATUS smb_probe_module(const char *subsystem, const char *module); - -/** - * Obtain list of init functions from the modules in the specified - * directory - */ -samba_module_init_fn *load_modules(TALLOC_CTX *mem_ctx, const char *path); - -#endif /* _INTERNAL_MODULES_H */ diff --git a/lib/util/modules.c b/lib/util/modules.c new file mode 100644 index 0000000000..52a04be457 --- /dev/null +++ b/lib/util/modules.c @@ -0,0 +1,240 @@ +/* + Unix SMB/CIFS implementation. + Samba utility functions + Copyright (C) Jelmer Vernooij 2002-2003,2005-2007 + Copyright (C) Stefan (metze) Metzmacher 2003 + Copyright (C) Andrew Bartlett 2011 + + 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 3 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, see . +*/ + +#include "includes.h" +#include "dynconfig/dynconfig.h" +#include "lib/util/samba_modules.h" +#include "system/filesys.h" +#include "system/dir.h" + +/** + * Obtain the init function from a shared library file + */ +init_module_fn load_module(const char *path, bool is_probe, void **handle_out) +{ + void *handle; + void *init_fn; + char *error; + +#if _SAMBA_BUILD_ == 3 + /* Always try to use LAZY symbol resolving; if the plugin has + * backwards compatibility, there might be symbols in the + * plugin referencing to old (removed) functions + */ + handle = dlopen(path, RTLD_LAZY); +#else + /* This should be a WAF build, where modules should be built + * with no undefined symbols and are already linked against + * the libraries that they are loaded by */ + handle = dlopen(path, RTLD_NOW); +#endif + + /* This call should reset any possible non-fatal errors that + occured since last call to dl* functions */ + error = dlerror(); + + if (handle == NULL) { + int level = is_probe ? 5 : 0; + DEBUG(level, ("Error loading module '%s': %s\n", path, error ? error : "")); + return NULL; + } + + init_fn = (init_module_fn)dlsym(handle, SAMBA_INIT_MODULE); + + /* we could check dlerror() to determine if it worked, because + dlsym() can validly return NULL, but what would we do with + a NULL pointer as a module init function? */ + + if (init_fn == NULL) { + DEBUG(0, ("Unable to find %s() in %s: %s\n", + SAMBA_INIT_MODULE, path, dlerror())); + DEBUG(1, ("Loading module '%s' failed\n", path)); + dlclose(handle); + return NULL; + } + + if (handle_out) { + *handle_out = handle; + } + + return (init_module_fn)init_fn; +} + +/** + * Obtain list of init functions from the modules in the specified + * directory + */ +static init_module_fn *load_modules(TALLOC_CTX *mem_ctx, const char *path) +{ + DIR *dir; + struct dirent *entry; + char *filename; + int success = 0; + init_module_fn *ret = talloc_array(mem_ctx, init_module_fn, 2); + + ret[0] = NULL; + + dir = opendir(path); + if (dir == NULL) { + talloc_free(ret); + return NULL; + } + + while((entry = readdir(dir))) { + if (ISDOT(entry->d_name) || ISDOTDOT(entry->d_name)) + continue; + + filename = talloc_asprintf(mem_ctx, "%s/%s", path, entry->d_name); + + ret[success] = load_module(filename, true, NULL); + if (ret[success]) { + ret = talloc_realloc(mem_ctx, ret, init_module_fn, success+2); + success++; + ret[success] = NULL; + } + + talloc_free(filename); + } + + closedir(dir); + + return ret; +} + +/** + * Run the specified init functions. + * + * @return true if all functions ran successfully, false otherwise + */ +bool run_init_functions(init_module_fn *fns) +{ + int i; + bool ret = true; + + if (fns == NULL) + return true; + + for (i = 0; fns[i]; i++) { ret &= (bool)NT_STATUS_IS_OK(fns[i]()); } + + return ret; +} + +/** + * Load the initialization functions from DSO files for a specific subsystem. + * + * Will return an array of function pointers to initialization functions + */ + +init_module_fn *load_samba_modules(TALLOC_CTX *mem_ctx, const char *subsystem) +{ + char *path = modules_path(mem_ctx, subsystem); + init_module_fn *ret; + + ret = load_modules(mem_ctx, path); + + talloc_free(path); + + return ret; +} + + +/* Load a dynamic module. Only log a level 0 error if we are not checking + for the existence of a module (probling). */ + +static NTSTATUS do_smb_load_module(const char *module_name, bool is_probe) +{ + void *handle; + init_module_fn init; + NTSTATUS status; + + init = load_module(module_name, is_probe, &handle); + if (!init) { + return NT_STATUS_UNSUCCESSFUL; + } + + DEBUG(2, ("Module '%s' loaded\n", module_name)); + + status = init(); + if (!NT_STATUS_IS_OK(status)) { + DEBUG(0, ("Module '%s' initialization failed: %s\n", + module_name, get_friendly_nt_error_msg(status))); + dlclose(handle); + } + + return status; +} + +/* Load all modules in list and return number of + * modules that has been successfully loaded */ +int smb_load_modules(const char **modules) +{ + int i; + int success = 0; + + for(i = 0; modules[i]; i++){ + if(NT_STATUS_IS_OK(do_smb_load_module(modules[i], false))) { + success++; + } + } + + DEBUG(2, ("%d modules successfully loaded\n", success)); + + return success; +} + +NTSTATUS smb_probe_module(const char *subsystem, const char *module) +{ + char *full_path = NULL; + TALLOC_CTX *ctx = talloc_stackframe(); + NTSTATUS status; + + /* Check for absolute path */ + + /* if we make any 'samba multibyte string' + calls here, we break + for loading string modules */ + + DEBUG(5, ("Probing module '%s'\n", module)); + + if (module[0] == '/') { + status = do_smb_load_module(module, true); + TALLOC_FREE(ctx); + return status; + } + + full_path = talloc_asprintf(ctx, + "%s/%s.%s", + modules_path(ctx, subsystem), + module, + shlib_ext()); + if (!full_path) { + TALLOC_FREE(ctx); + return NT_STATUS_NO_MEMORY; + } + + DEBUG(5, ("Probing module '%s': Trying to load from %s\n", + module, full_path)); + + status = do_smb_load_module(full_path, true); + + TALLOC_FREE(ctx); + return status; +} diff --git a/lib/util/samba-module.pc.in b/lib/util/samba-module.pc.in deleted file mode 100644 index 8f22988cd0..0000000000 --- a/lib/util/samba-module.pc.in +++ /dev/null @@ -1,11 +0,0 @@ -prefix=@prefix@ -exec_prefix=@exec_prefix@ -libdir=@libdir@ -includedir=@includedir@ - -Name: samba-modules -Description: Samba module loading utility functions -Requires: talloc -Version: 0.0.1 -Libs: @LIB_RPATH@ -L${libdir} -lsamba-modules -Cflags: -I${includedir} -DHAVE_IMMEDIATE_STRUCTURES=1 diff --git a/lib/util/samba_module.c b/lib/util/samba_module.c deleted file mode 100644 index b15885be03..0000000000 --- a/lib/util/samba_module.c +++ /dev/null @@ -1,62 +0,0 @@ -/* - Unix SMB/CIFS implementation. - Samba utility functions - Copyright (C) Jelmer Vernooij 2002-2003,2005-2007 - Copyright (C) Stefan (metze) Metzmacher 2003 - Copyright (C) Andrew Bartlett 2011 - - 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 3 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, see . -*/ - -#include "includes.h" -#include "dynconfig/dynconfig.h" -#include "lib/util/internal_module.h" -#include "system/filesys.h" -#include "system/dir.h" - -/** - * Run the specified init functions. - * - * @return true if all functions ran successfully, false otherwise - */ -bool samba_module_init_fns_run(samba_module_init_fn *fns) -{ - int i; - bool ret = true; - - if (fns == NULL) - return true; - - for (i = 0; fns[i]; i++) { ret &= (bool)NT_STATUS_IS_OK(fns[i]()); } - - return ret; -} - -/** - * Load the initialization functions from DSO files for a specific subsystem. - * - * Will return an array of function pointers to initialization functions - */ - -samba_module_init_fn *samba_module_init_fns_for_subsystem(TALLOC_CTX *mem_ctx, const char *subsystem) -{ - char *path = modules_path(mem_ctx, subsystem); - samba_module_init_fn *ret; - - ret = load_modules(mem_ctx, path); - - talloc_free(path); - - return ret; -} diff --git a/lib/util/samba_module.h b/lib/util/samba_module.h deleted file mode 100644 index fa9a6b905d..0000000000 --- a/lib/util/samba_module.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - Unix SMB/CIFS implementation. - Handling of idle/exit events - Copyright (C) Stefan (metze) Metzmacher 2003 - Copyright (C) Andrew Bartlett 2011 - - 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 3 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, see . -*/ - -#ifndef _SAMBA_MODULES_H -#define _SAMBA_MODULES_H - -/* Module support */ -typedef NTSTATUS (*samba_module_init_fn) (void); - -NTSTATUS samba_module_init(void); - -/* 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_MODULE_INIT "samba_module_init" - -/** - * Run the specified init functions. - * - * @return true if all functions ran successfully, false otherwise - */ -bool samba_module_init_fns_run(samba_module_init_fn *fns); - -/** - * Load the initialization functions from DSO files for a specific subsystem. - * - * Will return an array of function pointers to initialization functions - */ -samba_module_init_fn *samba_module_init_fns_for_subsystem(TALLOC_CTX *mem_ctx, const char *subsystem); - -#endif /* _SAMBA_MODULES_H */ diff --git a/lib/util/samba_modules.h b/lib/util/samba_modules.h new file mode 100644 index 0000000000..5eb2a0dd1c --- /dev/null +++ b/lib/util/samba_modules.h @@ -0,0 +1,59 @@ +/* + Unix SMB/CIFS implementation. + Handling of idle/exit events + Copyright (C) Stefan (metze) Metzmacher 2003 + Copyright (C) Andrew Bartlett 2011 + + 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 3 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, see . +*/ + +#ifndef _SAMBA_MODULES_H +#define _SAMBA_MODULES_H + +/* Module support */ +typedef NTSTATUS (*init_module_fn) (void); + +NTSTATUS samba_init_module(void); + +/* 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" + +/** + * Obtain the init function from a shared library file. + * + * The handle to dlclose() in case of error is returns in *handle if handle is not NULL + */ +init_module_fn load_module(const char *path, bool is_probe, void **handle); + +/** + * Run the specified init functions. + * + * @return true if all functions ran successfully, false otherwise + */ +bool run_init_functions(init_module_fn *fns); + +/** + * Load the initialization functions from DSO files for a specific subsystem. + * + * Will return an array of function pointers to initialization functions + */ +init_module_fn *load_samba_modules(TALLOC_CTX *mem_ctx, const char *subsystem); + +int smb_load_modules(const char **modules); +NTSTATUS smb_probe_module(const char *subsystem, const char *module); + +#endif /* _SAMBA_MODULES_H */ diff --git a/lib/util/wscript_build b/lib/util/wscript_build index 63a898ab72..1dc65fab5e 100755 --- a/lib/util/wscript_build +++ b/lib/util/wscript_build @@ -17,21 +17,11 @@ bld.SAMBA_LIBRARY('samba-util', pc_files='samba-util.pc' ) -bld.SAMBA_LIBRARY('samba-module', - source='samba_module.c', - deps='errors samba-util samba-internal-module', - local_include=False, - public_headers='samba_module.h', - vnum='0.0.1', - abi_directory='ABI', - abi_match='samba_module_*', - pc_files='samba-module.pc') - -bld.SAMBA_LIBRARY('samba-internal-module', - source='internal_module.c', +bld.SAMBA_LIBRARY('samba-modules', + source='modules.c', deps='errors samba-util', local_include=False, - private_library=True) + private_library=True) bld.SAMBA_LIBRARY('asn1util', source='asn1.c', diff --git a/source3/Makefile.in b/source3/Makefile.in index 3cdf9b651f..0d89c14fbf 100644 --- a/source3/Makefile.in +++ b/source3/Makefile.in @@ -470,7 +470,7 @@ LIB_OBJ = $(LIBSAMBAUTIL_OBJ) $(UTIL_OBJ) $(CRYPTO_OBJ) $(LIBTSOCKET_OBJ) \ ../lib/util/charset/charset_macosxfs.o intl/lang_tdb.o \ lib/conn_tdb.o lib/adt_tree.o lib/gencache.o \ lib/sessionid_tdb.o \ - ../lib/util/internal_module.o ../lib/util/samba_module.o lib/events.o @LIBTEVENT_OBJ0@ \ + ../lib/util/modules.o lib/events.o @LIBTEVENT_OBJ0@ \ @CCAN_OBJ@ \ lib/server_contexts.o \ lib/server_prefork.o \ diff --git a/source3/exports/modules-darwin.syms b/source3/exports/modules-darwin.syms index b4bd6f3e8b..276543b8de 100644 --- a/source3/exports/modules-darwin.syms +++ b/source3/exports/modules-darwin.syms @@ -1 +1 @@ -_samba_module_init +_samba_init_module diff --git a/source3/include/includes.h b/source3/include/includes.h index 94ff3181e6..562b64ca9a 100644 --- a/source3/include/includes.h +++ b/source3/include/includes.h @@ -524,7 +524,7 @@ typedef char fstring[FSTRING_LEN]; #include "smb.h" #include "../lib/util/byteorder.h" -#include "../lib/util/internal_module.h" +#include "../lib/util/samba_modules.h" #include "../lib/util/talloc_stack.h" #include "../lib/util/smb_threads.h" #include "../lib/util/smb_threads_internal.h" diff --git a/source3/m4/aclocal.m4 b/source3/m4/aclocal.m4 index 8eef69d704..a4db42e5ca 100644 --- a/source3/m4/aclocal.m4 +++ b/source3/m4/aclocal.m4 @@ -25,7 +25,7 @@ AC_DEFUN(SMB_MODULE, fi if test x"$DEST" = xSHARED; then - AC_DEFINE([$1][_init], [samba_module_init], [Whether to build $1 as shared module]) + AC_DEFINE([$1][_init], [samba_init_module], [Whether to build $1 as shared module]) $4_MODULES="$$4_MODULES $3" AC_MSG_RESULT([shared]) [$6] diff --git a/source3/modules/perfcount_test.c b/source3/modules/perfcount_test.c index 5365362783..8d17ee513f 100644 --- a/source3/modules/perfcount_test.c +++ b/source3/modules/perfcount_test.c @@ -381,7 +381,7 @@ static struct smb_perfcount_handlers perfcount_test_handlers = { perfcount_test_end }; -NTSTATUS samba_module_init(void) +NTSTATUS samba_init_module(void) { return smb_register_perfcounter(SMB_PERFCOUNTER_INTERFACE_VERSION, "pc_test", &perfcount_test_handlers); diff --git a/source3/winbindd/idmap_ad.c b/source3/winbindd/idmap_ad.c index 83ed03b6e7..e19bf6893f 100644 --- a/source3/winbindd/idmap_ad.c +++ b/source3/winbindd/idmap_ad.c @@ -1094,7 +1094,7 @@ static struct nss_info_methods nss_sfu20_methods = { Initialize the plugins ***********************************************************************/ -NTSTATUS samba_module_init(void) +NTSTATUS samba_init_module(void) { static NTSTATUS status_idmap_ad = NT_STATUS_UNSUCCESSFUL; static NTSTATUS status_nss_rfc2307 = NT_STATUS_UNSUCCESSFUL; diff --git a/source3/winbindd/idmap_adex/idmap_adex.c b/source3/winbindd/idmap_adex/idmap_adex.c index e2747849a4..7440d5c611 100644 --- a/source3/winbindd/idmap_adex/idmap_adex.c +++ b/source3/winbindd/idmap_adex/idmap_adex.c @@ -383,7 +383,7 @@ static struct nss_info_methods adex_nss_methods = { against the idmap and nss_info interfaces being in a half-registered state. **********************************************************************/ -NTSTATUS samba_module_init(void) +NTSTATUS samba_init_module(void) { static NTSTATUS idmap_status = NT_STATUS_UNSUCCESSFUL; static NTSTATUS nss_status = NT_STATUS_UNSUCCESSFUL; diff --git a/source3/winbindd/idmap_autorid.c b/source3/winbindd/idmap_autorid.c index 8d32f0e349..1a88fd4cb8 100644 --- a/source3/winbindd/idmap_autorid.c +++ b/source3/winbindd/idmap_autorid.c @@ -668,7 +668,7 @@ static struct idmap_methods autorid_methods = { .allocate_id = idmap_autorid_allocate_id }; -NTSTATUS samba_module_init(void) +NTSTATUS samba_init_module(void) { return smb_register_idmap(SMB_IDMAP_INTERFACE_VERSION, "autorid", &autorid_methods); diff --git a/source3/winbindd/idmap_hash/idmap_hash.c b/source3/winbindd/idmap_hash/idmap_hash.c index 4a61f4e7b3..1f36b217ef 100644 --- a/source3/winbindd/idmap_hash/idmap_hash.c +++ b/source3/winbindd/idmap_hash/idmap_hash.c @@ -366,7 +366,7 @@ static struct nss_info_methods hash_nss_methods = { state. **********************************************************************/ -NTSTATUS samba_module_init(void) +NTSTATUS samba_init_module(void) { static NTSTATUS idmap_status = NT_STATUS_UNSUCCESSFUL; static NTSTATUS nss_status = NT_STATUS_UNSUCCESSFUL; diff --git a/source3/winbindd/idmap_rid.c b/source3/winbindd/idmap_rid.c index c01b45b1b4..4112fb860a 100644 --- a/source3/winbindd/idmap_rid.c +++ b/source3/winbindd/idmap_rid.c @@ -187,7 +187,7 @@ static struct idmap_methods rid_methods = { .sids_to_unixids = idmap_rid_sids_to_unixids, }; -NTSTATUS samba_module_init(void) +NTSTATUS samba_init_module(void) { return smb_register_idmap(SMB_IDMAP_INTERFACE_VERSION, "rid", &rid_methods); } diff --git a/source3/winbindd/idmap_tdb2.c b/source3/winbindd/idmap_tdb2.c index 4ffb60a2c8..ac3743e523 100644 --- a/source3/winbindd/idmap_tdb2.c +++ b/source3/winbindd/idmap_tdb2.c @@ -874,7 +874,7 @@ static struct idmap_methods db_methods = { .allocate_id = idmap_tdb2_get_new_id }; -NTSTATUS samba_module_init(void) +NTSTATUS samba_init_module(void) { return smb_register_idmap(SMB_IDMAP_INTERFACE_VERSION, "tdb2", &db_methods); } diff --git a/source3/wscript b/source3/wscript index 4dc4560fc1..cc925a617a 100644 --- a/source3/wscript +++ b/source3/wscript @@ -1747,7 +1747,7 @@ main() { conf.DEFINE('static_init_%s' % p, '{}') if p in shared_list: for entry in shared_list[p]: - conf.DEFINE('%s_init' % entry, 'samba_module_init') + conf.DEFINE('%s_init' % entry, 'samba_init_module') conf.env[shared_env].append('%s' % entry) conf.SAMBA_CONFIG_H('include/config.h') diff --git a/source3/wscript_build b/source3/wscript_build index 386e2b8dc3..8ca98b33b0 100755 --- a/source3/wscript_build +++ b/source3/wscript_build @@ -798,7 +798,7 @@ bld.SAMBA3_SUBSYSTEM('KRBCLIENT', bld.SAMBA3_SUBSYSTEM('samba3core', source=LIB_SRC, - deps='LIBTSOCKET LIBCRYPTO ndr security NDR_SECURITY samba-util NDR_MESSAGING LIBASYNC_REQ tdb-wrap3 UTIL_TDB UTIL_PW SAMBA_VERSION KRB5_WRAP flag_mapping util_reg PTHREADPOOL interfaces cap string_init param util_str CHARSET3 namearray dbwrap util_sec util_malloc memcache ccan errors3 samba-module samba-internal-module', + deps='LIBTSOCKET LIBCRYPTO ndr security NDR_SECURITY samba-util NDR_MESSAGING LIBASYNC_REQ tdb-wrap3 UTIL_TDB UTIL_PW SAMBA_VERSION KRB5_WRAP flag_mapping util_reg PTHREADPOOL interfaces cap string_init param util_str CHARSET3 namearray dbwrap util_sec util_malloc memcache ccan errors3 samba-modules', vars=locals()) bld.SAMBA3_LIBRARY('smbd_shim', diff --git a/source4/auth/ntlm/auth.c b/source4/auth/ntlm/auth.c index 65abeae50b..802bc1b40f 100644 --- a/source4/auth/ntlm/auth.c +++ b/source4/auth/ntlm/auth.c @@ -27,7 +27,7 @@ #include "param/param.h" #include "dsdb/samdb/samdb.h" #include "libcli/wbclient/wbclient.h" -#include "lib/util/samba_module.h" +#include "lib/util/samba_modules.h" /*************************************************************************** Set a fixed challenge @@ -660,12 +660,12 @@ _PUBLIC_ NTSTATUS auth4_init(void) static bool initialized = false; #define _MODULE_PROTO(init) extern NTSTATUS init(void); STATIC_auth4_MODULES_PROTO; - samba_module_init_fn static_init[] = { STATIC_auth4_MODULES }; + init_module_fn static_init[] = { STATIC_auth4_MODULES }; if (initialized) return NT_STATUS_OK; initialized = true; - samba_module_init_fns_run(static_init); + run_init_functions(static_init); return NT_STATUS_OK; } diff --git a/source4/auth/ntlm/wscript_build b/source4/auth/ntlm/wscript_build index bb687d9600..6447bf2ea0 100644 --- a/source4/auth/ntlm/wscript_build +++ b/source4/auth/ntlm/wscript_build @@ -51,7 +51,7 @@ bld.SAMBA_MODULE('auth4_unix', bld.SAMBA_LIBRARY('auth4', source='auth.c auth_util.c auth_simple.c', autoproto='auth_proto.h', - deps='samba-util security samdb samba-credentials tevent-util LIBWBCLIENT_OLD auth_unix_token samba-module', + deps='samba-util security samdb samba-credentials tevent-util LIBWBCLIENT_OLD auth_unix_token samba-modules', private_library=True ) diff --git a/source4/ntptr/ntptr_base.c b/source4/ntptr/ntptr_base.c index 9b89f8a6fc..3fe8960602 100644 --- a/source4/ntptr/ntptr_base.c +++ b/source4/ntptr/ntptr_base.c @@ -25,7 +25,7 @@ #include "includes.h" #include "ntptr/ntptr.h" #include "param/param.h" -#include "lib/util/samba_module.h" +#include "lib/util/samba_modules.h" /* the list of currently registered NTPTR backends */ static struct ntptr_backend { @@ -73,11 +73,11 @@ NTSTATUS ntptr_init(void) { #define _MODULE_PROTO(init) extern NTSTATUS init(void); STATIC_ntptr_MODULES_PROTO; - samba_module_init_fn static_init[] = { STATIC_ntptr_MODULES }; - samba_module_init_fn *shared_init = samba_module_init_fns_for_subsystem(NULL, "ntptr"); + init_module_fn static_init[] = { STATIC_ntptr_MODULES }; + init_module_fn *shared_init = load_samba_modules(NULL, "ntptr"); - samba_module_init_fns_run(static_init); - samba_module_init_fns_run(shared_init); + run_init_functions(static_init); + run_init_functions(shared_init); talloc_free(shared_init); diff --git a/source4/ntvfs/ntvfs_base.c b/source4/ntvfs/ntvfs_base.c index fbf7d12ec3..8058181f89 100644 --- a/source4/ntvfs/ntvfs_base.c +++ b/source4/ntvfs/ntvfs_base.c @@ -26,7 +26,7 @@ #include "../lib/util/dlinklist.h" #include "ntvfs/ntvfs.h" #include "param/param.h" -#include "lib/util/samba_module.h" +#include "lib/util/samba_modules.h" /* the list of currently registered NTVFS backends, note that there * can be more than one backend with the same name, as long as they @@ -230,16 +230,16 @@ NTSTATUS ntvfs_init(struct loadparm_context *lp_ctx) static bool initialized = false; #define _MODULE_PROTO(init) extern NTSTATUS init(void); STATIC_ntvfs_MODULES_PROTO; - samba_module_init_fn static_init[] = { STATIC_ntvfs_MODULES }; - samba_module_init_fn *shared_init; + init_module_fn static_init[] = { STATIC_ntvfs_MODULES }; + init_module_fn *shared_init; if (initialized) return NT_STATUS_OK; initialized = true; - shared_init = samba_module_init_fns_for_subsystem(NULL, "ntvfs"); + shared_init = load_samba_modules(NULL, "ntvfs"); - samba_module_init_fns_run(static_init); - samba_module_init_fns_run(shared_init); + run_init_functions(static_init); + run_init_functions(shared_init); talloc_free(shared_init); diff --git a/source4/ntvfs/posix/pvfs_acl.c b/source4/ntvfs/posix/pvfs_acl.c index 810dcddbd3..1519631769 100644 --- a/source4/ntvfs/posix/pvfs_acl.c +++ b/source4/ntvfs/posix/pvfs_acl.c @@ -27,7 +27,7 @@ #include "libcli/security/security.h" #include "param/param.h" #include "../lib/util/unix_privs.h" -#include "lib/util/samba_module.h" +#include "lib/util/samba_modules.h" /* the list of currently registered ACL backends */ static struct pvfs_acl_backend { @@ -87,16 +87,16 @@ NTSTATUS pvfs_acl_init(void) static bool initialized = false; #define _MODULE_PROTO(init) extern NTSTATUS init(void); STATIC_pvfs_acl_MODULES_PROTO; - samba_module_init_fn static_init[] = { STATIC_pvfs_acl_MODULES }; - samba_module_init_fn *shared_init; + init_module_fn static_init[] = { STATIC_pvfs_acl_MODULES }; + init_module_fn *shared_init; if (initialized) return NT_STATUS_OK; initialized = true; - shared_init = samba_module_init_fns_for_subsystem(NULL, "pvfs_acl"); + shared_init = load_samba_modules(NULL, "pvfs_acl"); - samba_module_init_fns_run(static_init); - samba_module_init_fns_run(shared_init); + run_init_functions(static_init); + run_init_functions(shared_init); talloc_free(shared_init); diff --git a/source4/ntvfs/posix/wscript_build b/source4/ntvfs/posix/wscript_build index eea506fdb2..acceefadf6 100644 --- a/source4/ntvfs/posix/wscript_build +++ b/source4/ntvfs/posix/wscript_build @@ -3,7 +3,7 @@ bld.SAMBA_SUBSYSTEM('pvfs_acl', source='pvfs_acl.c', autoproto='vfs_acl_proto.h', - deps='events samba-module', + deps='events samba-modules', ) diff --git a/source4/ntvfs/sysdep/sys_lease.c b/source4/ntvfs/sysdep/sys_lease.c index 9098610468..9adb898274 100644 --- a/source4/ntvfs/sysdep/sys_lease.c +++ b/source4/ntvfs/sysdep/sys_lease.c @@ -27,7 +27,7 @@ #include "ntvfs/sysdep/sys_lease.h" #include "../lib/util/dlinklist.h" #include "param/param.h" -#include "lib/util/samba_module.h" +#include "lib/util/samba_modules.h" /* list of registered backends */ static struct sys_lease_ops *backends; @@ -113,12 +113,12 @@ _PUBLIC_ NTSTATUS sys_lease_init(void) static bool initialized = false; #define _MODULE_PROTO(init) extern NTSTATUS init(void); STATIC_sys_lease_MODULES_PROTO; - samba_module_init_fn static_init[] = { STATIC_sys_lease_MODULES }; + init_module_fn static_init[] = { STATIC_sys_lease_MODULES }; if (initialized) return NT_STATUS_OK; initialized = true; - samba_module_init_fns_run(static_init); + run_init_functions(static_init); return NT_STATUS_OK; } diff --git a/source4/ntvfs/sysdep/sys_notify.c b/source4/ntvfs/sysdep/sys_notify.c index 76dab63da4..00300cd25a 100644 --- a/source4/ntvfs/sysdep/sys_notify.c +++ b/source4/ntvfs/sysdep/sys_notify.c @@ -28,7 +28,7 @@ #include #include "../lib/util/dlinklist.h" #include "param/param.h" -#include "lib/util/samba_module.h" +#include "lib/util/samba_modules.h" /* list of registered backends */ static struct sys_notify_backend *backends; @@ -137,12 +137,12 @@ _PUBLIC_ NTSTATUS sys_notify_init(void) static bool initialized = false; #define _MODULE_PROTO(init) extern NTSTATUS init(void); STATIC_sys_notify_MODULES_PROTO; - samba_module_init_fn static_init[] = { STATIC_sys_notify_MODULES }; + init_module_fn static_init[] = { STATIC_sys_notify_MODULES }; if (initialized) return NT_STATUS_OK; initialized = true; - samba_module_init_fns_run(static_init); + run_init_functions(static_init); return NT_STATUS_OK; } diff --git a/source4/ntvfs/wscript_build b/source4/ntvfs/wscript_build index 738b7e0fa1..455e7f0b8b 100644 --- a/source4/ntvfs/wscript_build +++ b/source4/ntvfs/wscript_build @@ -67,7 +67,7 @@ bld.SAMBA_MODULE('ntvfs_nbench', bld.SAMBA_LIBRARY('ntvfs', source='ntvfs_base.c ntvfs_generic.c ntvfs_interface.c ntvfs_util.c', autoproto='ntvfs_proto.h', - deps='tevent samba-module', + deps='tevent samba-modules', private_library=True ) diff --git a/source4/param/share.c b/source4/param/share.c index 4d2b5d3ba6..da0470d560 100644 --- a/source4/param/share.c +++ b/source4/param/share.c @@ -22,7 +22,7 @@ #include "includes.h" #include "param/share.h" #include "param/param.h" -#include "lib/util/samba_module.h" +#include "lib/util/samba_modules.h" const char *share_string_option(struct share_config *scfg, const char *opt_name, const char *defval) { @@ -149,9 +149,9 @@ NTSTATUS share_init(void) { #define _MODULE_PROTO(init) extern NTSTATUS init(void); STATIC_share_MODULES_PROTO; - samba_module_init_fn static_init[] = { STATIC_share_MODULES }; + init_module_fn static_init[] = { STATIC_share_MODULES }; - samba_module_init_fns_run(static_init); + run_init_functions(static_init); return NT_STATUS_OK; } diff --git a/source4/param/wscript_build b/source4/param/wscript_build index faeeae6e71..80b2758766 100644 --- a/source4/param/wscript_build +++ b/source4/param/wscript_build @@ -10,7 +10,7 @@ bld.SAMBA_SUBSYSTEM('PROVISION', bld.SAMBA_SUBSYSTEM('share', source='share.c', public_headers='share.h', - deps='samba-util samba-module' + deps='samba-util samba-modules' ) diff --git a/source4/rpc_server/dcerpc_server.c b/source4/rpc_server/dcerpc_server.c index 9dff4e4bb1..a16e6ac9d5 100644 --- a/source4/rpc_server/dcerpc_server.c +++ b/source4/rpc_server/dcerpc_server.c @@ -39,7 +39,7 @@ #include "smbd/process_model.h" #include "lib/messaging/irpc.h" #include "librpc/rpc/rpc_common.h" -#include "lib/util/samba_module.h" +#include "lib/util/samba_modules.h" /* this is only used when the client asks for an unknown interface */ #define DUMMY_ASSOC_GROUP 0x0FFFFFFF @@ -1228,18 +1228,18 @@ void dcerpc_server_init(struct loadparm_context *lp_ctx) static bool initialized; #define _MODULE_PROTO(init) extern NTSTATUS init(void); STATIC_dcerpc_server_MODULES_PROTO; - samba_module_init_fn static_init[] = { STATIC_dcerpc_server_MODULES }; - samba_module_init_fn *shared_init; + init_module_fn static_init[] = { STATIC_dcerpc_server_MODULES }; + init_module_fn *shared_init; if (initialized) { return; } initialized = true; - shared_init = samba_module_init_fns_for_subsystem(NULL, "dcerpc_server"); + shared_init = load_samba_modules(NULL, "dcerpc_server"); - samba_module_init_fns_run(static_init); - samba_module_init_fns_run(shared_init); + run_init_functions(static_init); + run_init_functions(shared_init); talloc_free(shared_init); } diff --git a/source4/smbd/process_model.c b/source4/smbd/process_model.c index b3ac07e4a6..bbcbe3b6ac 100644 --- a/source4/smbd/process_model.c +++ b/source4/smbd/process_model.c @@ -21,7 +21,7 @@ #include "includes.h" #include "smbd/process_model.h" #include "param/param.h" -#include "lib/util/samba_module.h" +#include "lib/util/samba_modules.h" /* the list of currently registered process models */ static struct process_model { @@ -103,8 +103,8 @@ _PUBLIC_ NTSTATUS process_model_init(struct loadparm_context *lp_ctx) { #define _MODULE_PROTO(init) extern NTSTATUS init(void); STATIC_process_model_MODULES_PROTO; - samba_module_init_fn static_init[] = { STATIC_process_model_MODULES }; - samba_module_init_fn *shared_init; + init_module_fn static_init[] = { STATIC_process_model_MODULES }; + init_module_fn *shared_init; static bool initialised; if (initialised) { @@ -112,10 +112,10 @@ _PUBLIC_ NTSTATUS process_model_init(struct loadparm_context *lp_ctx) } initialised = true; - shared_init = samba_module_init_fns_for_subsystem(NULL, "process_model"); + shared_init = load_samba_modules(NULL, "process_model"); - samba_module_init_fns_run(static_init); - samba_module_init_fns_run(shared_init); + run_init_functions(static_init); + run_init_functions(shared_init); talloc_free(shared_init); diff --git a/source4/smbd/server.c b/source4/smbd/server.c index a2f4a785ad..86622c8be9 100644 --- a/source4/smbd/server.c +++ b/source4/smbd/server.c @@ -42,7 +42,7 @@ #include "librpc/gen_ndr/ndr_irpc.h" #include "cluster/cluster.h" #include "dynconfig/dynconfig.h" -#include "lib/util/samba_module.h" +#include "lib/util/samba_modules.h" /* recursively delete a directory tree @@ -292,8 +292,8 @@ static int binary_smbd_main(const char *binary_name, int argc, const char *argv[ poptContext pc; #define _MODULE_PROTO(init) extern NTSTATUS init(void); STATIC_service_MODULES_PROTO; - samba_module_init_fn static_init[] = { STATIC_service_MODULES }; - samba_module_init_fn *shared_init; + init_module_fn static_init[] = { STATIC_service_MODULES }; + init_module_fn *shared_init; struct tevent_context *event_ctx; uint16_t stdin_event_flags; NTSTATUS status; @@ -409,10 +409,10 @@ static int binary_smbd_main(const char *binary_name, int argc, const char *argv[ process_model_init(cmdline_lp_ctx); - shared_init = samba_module_init_fns_for_subsystem(NULL, "service"); + shared_init = load_samba_modules(NULL, "service"); - samba_module_init_fns_run(static_init); - samba_module_init_fns_run(shared_init); + run_init_functions(static_init); + run_init_functions(shared_init); talloc_free(shared_init); diff --git a/source4/smbd/wscript_build b/source4/smbd/wscript_build index 20fabe1a27..ab92e3c920 100644 --- a/source4/smbd/wscript_build +++ b/source4/smbd/wscript_build @@ -76,7 +76,7 @@ bld.SAMBA_MODULE('process_model_onefork', bld.SAMBA_LIBRARY('process_model', source='process_model.c', autoproto='process_model_proto.h', - deps='samba-util samba-hostconfig samba-module', + deps='samba-util samba-hostconfig samba-modules', private_library=True ) diff --git a/source4/torture/smbtorture.c b/source4/torture/smbtorture.c index 8122c14964..934e0a7b2f 100644 --- a/source4/torture/smbtorture.c +++ b/source4/torture/smbtorture.c @@ -32,7 +32,7 @@ #include "librpc/rpc/dcerpc.h" #include "auth/gensec/gensec.h" #include "param/param.h" -#include "lib/util/internal_module.h" +#include "lib/util/samba_modules.h" #if HAVE_READLINE_HISTORY_H #include @@ -602,7 +602,7 @@ int main(int argc,char *argv[]) } if (extra_module != NULL) { - samba_module_init_fn fn = load_module(poptGetOptArg(pc), false, NULL); + init_module_fn fn = load_module(poptGetOptArg(pc), false, NULL); if (fn == NULL) d_printf("Unable to load module from %s\n", poptGetOptArg(pc)); diff --git a/source4/torture/torture.c b/source4/torture/torture.c index dc35073eba..b066d3e1ac 100644 --- a/source4/torture/torture.c +++ b/source4/torture/torture.c @@ -23,7 +23,7 @@ #include "param/param.h" #include "lib/cmdline/popt_common.h" #include "torture/smbtorture.h" -#include "lib/util/samba_module.h" +#include "lib/util/samba_modules.h" _PUBLIC_ int torture_numops=10; _PUBLIC_ int torture_entries=1000; @@ -48,11 +48,11 @@ _PUBLIC_ int torture_init(void) { #define _MODULE_PROTO(init) extern NTSTATUS init(void); STATIC_smbtorture_MODULES_PROTO; - samba_module_init_fn static_init[] = { STATIC_smbtorture_MODULES }; - samba_module_init_fn *shared_init = samba_module_init_fns_for_subsystem(NULL, "smbtorture"); + init_module_fn static_init[] = { STATIC_smbtorture_MODULES }; + init_module_fn *shared_init = load_samba_modules(NULL, "smbtorture"); - samba_module_init_fns_run(static_init); - samba_module_init_fns_run(shared_init); + run_init_functions(static_init); + run_init_functions(shared_init); talloc_free(shared_init); -- cgit