[PATCH] module path stuff
Stefan (metze) Metzmacher
metze at metzemix.de
Fri Dec 6 09:57:00 GMT 2002
Hi Jelmer,
here is a new patch for the modules stuff:
- it adds 'modules path' and 'modules' as per share parameter
(vfs path is now an alias for modules path)
- it add two new parameters to the smb_load_modules function
int smb_load_modules(const char **modules, int snum, SMB_MODULE_TYPES types)
int snum - is the number of the current service
(share) GLOBAL_SECTION_SNUM (-1) for the global section.
SMB_MODULE_TYPES types - this is the bitmask witch module types should be
loaded here, ( we don't need a winsdb module in smbd... also
smb_register_winsdb() is not linked to smbd, witch would cause trouble)
now we can use
smb_load_modules(lp_modules(GLOBAL_SECTION_SNUM),GLOBAL_SECTION_SNUM,MODULE_TYPE_CHARSET)
to load the charsets before the fork in smbd
smb_load_modules(lp_modules(SNUM(conn)),SNUM(conn),MODULE_TYPE_VFS) for
loading the vfs modules per share..
lp_module_path is dyn_LIBDIR by default...
lib_path() for loading upcase.dat,... is replaced by data_path() witch is
default dyn_DATADIR
for making jerry and jht happy I use :
DATADIR = @libdir@ in Makefile.in but it should be changed to
DATADIR = @datadir@
metze
-----------------------------------------------------------------------------
Stefan "metze" Metzmacher <metze at metzemix.de>
-------------- next part --------------
diff -Npur --exclude=CVS --exclude=*.bak --exclude=*.o --exclude=*.po --exclude=.#* HEAD/source/Makefile.in HEAD-modules/source/Makefile.in
--- HEAD/source/Makefile.in Mon Dec 2 15:46:11 2002
+++ HEAD-modules/source/Makefile.in Fri Dec 6 09:22:43 2002
@@ -52,6 +52,9 @@ PDBLIBDIR = $(LIBDIR)/pdb
CONFIGDIR = @configdir@
VARDIR = @localstatedir@
MANDIR = @mandir@
+# This is where valid.dat,upcase.dat,lowcase.dat are installed and searched by default
+# DATADIR = @datadir@ change this if jerry and jht agree
+DATADIR = @libdir@
# The permissions to give the executables
INSTALLPERMS = 0755
@@ -94,12 +97,11 @@ FLAGS32 = $(ISA32) $(FLAGS5)
PASSWD_FLAGS = -DSMB_PASSWD_FILE=\"$(SMB_PASSWD_FILE)\" -DPRIVATE_DIR=\"$(PRIVATE_DIR)\"
PATH_FLAGS1 = -DCONFIGFILE=\"$(CONFIGFILE)\" -DSBINDIR=\"$(SBINDIR)\"
-PATH_FLAGS2 = $(PATH_FLAGS1) -DBINDIR=\"$(BINDIR)\" -DDRIVERFILE=\"$(DRIVERFILE)\"
-PATH_FLAGS3 = $(PATH_FLAGS2) -DLMHOSTSFILE=\"$(LMHOSTSFILE)\"
-PATH_FLAGS4 = $(PATH_FLAGS3) -DSWATDIR=\"$(SWATDIR)\" -DLOCKDIR=\"$(LOCKDIR)\" -DPIDDIR=\"$(PIDDIR)\"
-PATH_FLAGS5 = $(PATH_FLAGS4) -DLIBDIR=\"$(LIBDIR)\" -DLOGFILEBASE=\"$(LOGFILEBASE)\"
-PATH_FLAGS6 = $(PATH_FLAGS5) -DCONFIGDIR=\"$(CONFIGFIR)\"
-PATH_FLAGS = $(PATH_FLAGS6) $(PASSWD_FLAGS)
+PATH_FLAGS2 = $(PATH_FLAGS1) -DBINDIR=\"$(BINDIR)\" -DLMHOSTSFILE=\"$(LMHOSTSFILE)\"
+PATH_FLAGS3 = $(PATH_FLAGS2) -DSWATDIR=\"$(SWATDIR)\" -DLOCKDIR=\"$(LOCKDIR)\" -DPIDDIR=\"$(PIDDIR)\"
+PATH_FLAGS4 = $(PATH_FLAGS3) -DLIBDIR=\"$(LIBDIR)\" -DLOGFILEBASE=\"$(LOGFILEBASE)\"
+PATH_FLAGS5 = $(PATH_FLAGS4) -DCONFIGDIR=\"$(CONFIGDIR)\" -DDATADIR=\"$(DATADIR)\"
+PATH_FLAGS = $(PATH_FLAGS5) $(PASSWD_FLAGS)
# Note that all executable programs now provide for an optional executable suffix.
@@ -918,24 +920,26 @@ install: installbin installman installsc
# is not used
installdirs:
- @$(SHELL) $(srcdir)/script/installdirs.sh $(DESTDIR)$(BASEDIR) $(DESTDIR)$(BINDIR) $(DESTDIR)$(SBINDIR) $(DESTDIR)$(LIBDIR) $(DESTDIR)$(VARDIR) $(DESTDIR)$(PRIVATEDIR) $(DESTDIR)$(VFSLIBDIR) $(DESTDIR)$(PDBLIBDIR)
+ @$(SHELL) $(srcdir)/script/installdirs.sh $(DESTDIR)$(BASEDIR) $(DESTDIR)$(BINDIR) $(DESTDIR)$(SBINDIR) $(DESTDIR)$(LIBDIR) $(DESTDIR)$(DATADIR) $(DESTDIR)$(VARDIR) $(DESTDIR)$(PRIVATEDIR) $(DESTDIR)$(VFSLIBDIR) $(DESTDIR)$(PDBLIBDIR)
+ @$(SHELL) $(srcdir)/script/installdirs.sh $(DESTDIR)$(BASEDIR) $(DESTDIR)$(BINDIR) $(DESTDIR)$(SBINDIR) $(DESTDIR)$(VARDIR) $(DESTDIR)$(PRIVATEDIR) $(DESTDIR)$(VFSLIBDIR) $(DESTDIR)$(PDBLIBDIR)
installservers: all installdirs
- @$(SHELL) $(srcdir)/script/installbin.sh $(INSTALLPERMS) $(DESTDIR)$(BASEDIR) $(DESTDIR)$(SBINDIR) $(DESTDIR)$(LIBDIR) $(DESTDIR)$(VARDIR) $(SBIN_PROGS)
+ @$(SHELL) $(srcdir)/script/installbin.sh $(INSTALLPERMS) $(DESTDIR)$(BASEDIR) $(DESTDIR)$(SBINDIR) $(DESTDIR)$(DATADIR) $(DESTDIR)$(VARDIR) $(SBIN_PROGS)
installbin: all installdirs
- @$(SHELL) $(srcdir)/script/installbin.sh $(INSTALLPERMS) $(DESTDIR)$(BASEDIR) $(DESTDIR)$(SBINDIR) $(DESTDIR)$(LIBDIR) $(DESTDIR)$(VARDIR) $(SBIN_PROGS)
- @$(SHELL) $(srcdir)/script/installbin.sh $(INSTALLPERMS) $(DESTDIR)$(BASEDIR) $(DESTDIR)$(BINDIR) $(DESTDIR)$(LIBDIR) $(DESTDIR)$(VARDIR) $(BIN_PROGS)
+ @$(SHELL) $(srcdir)/script/installbin.sh $(INSTALLPERMS) $(DESTDIR)$(BASEDIR) $(DESTDIR)$(SBINDIR) $(DESTDIR)$(DATADIR) $(DESTDIR)$(VARDIR) $(SBIN_PROGS)
+ @$(SHELL) $(srcdir)/script/installbin.sh $(INSTALLPERMS) $(DESTDIR)$(BASEDIR) $(DESTDIR)$(BINDIR) $(DESTDIR)$(DATADIR) $(DESTDIR)$(VARDIR) $(BIN_PROGS)
-installmodules: all installdirs
+installmodules: modules installdirs
@$(SHELL) $(srcdir)/script/installmodules.sh $(INSTALLPERMS) $(DESTDIR)$(BASEDIR) $(DESTDIR)$(VFSLIBDIR) $(VFS_MODULES)
@$(SHELL) $(srcdir)/script/installmodules.sh $(INSTALLPERMS) $(DESTDIR)$(BASEDIR) $(DESTDIR)$(PDBLIBDIR) $(PDB_MODULES)
+ @$(SHELL) $(srcdir)/script/installmodules.sh $(INSTALLPERMS) $(DESTDIR)$(BASEDIR) $(DESTDIR)$(LIBDIR) $(DESTDIR)$(MODULES)
installscripts: installdirs
@$(SHELL) $(srcdir)/script/installscripts.sh $(INSTALLPERMS) $(DESTDIR)$(BINDIR) $(SCRIPTS)
installdat: installdirs
- @$(SHELL) $(srcdir)/script/installdat.sh $(DESTDIR)$(LIBDIR) $(srcdir)
+ @$(SHELL) $(srcdir)/script/installdat.sh $(DESTDIR)$(DATADIR) $(srcdir)
installswat: installdirs
@$(SHELL) $(srcdir)/script/installswat.sh $(DESTDIR)$(SWATDIR) $(srcdir)
@@ -1016,6 +1020,7 @@ showlayout:
@echo " libdir: $(LIBDIR)"
@echo " vardir: $(VARDIR)"
@echo " mandir: $(MANDIR)"
+ @echo " datadir: $(DATADIR)"
uninstall: uninstallman uninstallbin uninstallscripts
@@ -1024,8 +1029,8 @@ uninstallman:
@$(SHELL) $(srcdir)/script/uninstallman.sh $(DESTDIR)$(MANDIR) $(srcdir) $(man_langs)
uninstallbin:
- @$(SHELL) $(srcdir)/script/uninstallbin.sh $(INSTALLPERMS) $(DESTDIR)$(BASEDIR) $(DESTDIR)$(SBINDIR) $(DESTDIR)$(LIBDIR) $(DESTDIR)$(VARDIR) $(DESTDIR)$(SBIN_PROGS)
- @$(SHELL) $(srcdir)/script/uninstallbin.sh $(INSTALLPERMS) $(DESTDIR)$(BASEDIR) $(DESTDIR)$(BINDIR) $(DESTDIR)$(LIBDIR) $(DESTDIR)$(VARDIR) $(DESTDIR)$(BIN_PROGS)
+ @$(SHELL) $(srcdir)/script/uninstallbin.sh $(INSTALLPERMS) $(DESTDIR)$(BASEDIR) $(DESTDIR)$(SBINDIR) $(DESTDIR)$(DATADIR) $(DESTDIR)$(VARDIR) $(DESTDIR)$(SBIN_PROGS)
+ @$(SHELL) $(srcdir)/script/uninstallbin.sh $(INSTALLPERMS) $(DESTDIR)$(BASEDIR) $(DESTDIR)$(BINDIR) $(DESTDIR)$(DATADIR) $(DESTDIR)$(VARDIR) $(DESTDIR)$(BIN_PROGS)
uninstallmodules:
@$(SHELL) $(srcdir)/script/uninstallmodules.sh $(INSTALLPERMS) $(DESTDIR)$(BASEDIR) $(DESTDIR)$(VFSLIBDIR) $(DESTDIR)$(VFS_MODULES)
@@ -1121,7 +1126,7 @@ realclean: clean delheaders
distclean: realclean
-rm -f include/stamp-h
- -rm -f include/config.h Makefile
+ -rm -f include/config.h Makefile modules/Makefile.ext_modules
-rm -f config.status config.cache so_locations
-rm -rf .deps
diff -Npur --exclude=CVS --exclude=*.bak --exclude=*.o --exclude=*.po --exclude=.#* HEAD/source/configure.in HEAD-modules/source/configure.in
--- HEAD/source/configure.in Thu Dec 5 09:43:42 2002
+++ HEAD-modules/source/configure.in Fri Dec 6 09:22:43 2002
@@ -17,9 +17,10 @@ AC_ARG_WITH(fhs,
logfilebase="\${VARDIR}/log/samba"
privatedir="\${CONFIGDIR}/private"
libdir="\${prefix}/lib/samba"
- swatdir="\${DATADIR}/samba/swat",
- configdir="\${LIBDIR}"
- logfilebase="\${VARDIR}"
+ swatdir="${datadir}/samba/swat"
+ datadir="${datadir}/samba",
+ configdir="\$(LIBDIR)"
+ logfilebase="\$(VARDIR)"
lockdir="\${VARDIR}/locks"
piddir="\${VARDIR}/locks"
privatedir="\${prefix}/private"
@@ -129,6 +130,7 @@ AC_SUBST(privatedir)
AC_SUBST(swatdir)
AC_SUBST(bindir)
AC_SUBST(sbindir)
+AC_SUBST(datadir)
dnl Unique-to-Samba variables we'll be playing with.
AC_SUBST(SHELL)
@@ -630,7 +632,7 @@ test "${with_readline+set}" != "set" &&
# test for where we get readline() from
AC_MSG_CHECKING(whether to use readline)
AC_ARG_WITH(readline,
-[ --with-readline[=DIR] Look for readline include/libs in DIR (default=auto) ],
+[ --with-readline[=DIR] Look for readline include/libs in DIR (default=auto) ],
[ case "$with_readline" in
yes)
AC_MSG_RESULT(yes)
@@ -1969,7 +1971,7 @@ with_ads_support=yes
AC_MSG_CHECKING([whether to use Active Directory])
AC_ARG_WITH(ads,
-[ --with-ads Active Directory support (default yes)],
+[ --with-ads Active Directory support (default yes)],
[ case "$withval" in
no)
with_ads_support=no
@@ -2069,7 +2071,7 @@ with_ldap_support=yes
AC_MSG_CHECKING([whether to use LDAP])
AC_ARG_WITH(ldap,
-[ --with-ldap LDAP support (default yes)],
+[ --with-ldap LDAP support (default yes)],
[ case "$withval" in
no)
with_ldap_support=no
@@ -2265,7 +2267,7 @@ AC_ARG_WITH(sam,
# check for a LDAP password database configuration backwards compatibility
AC_MSG_CHECKING(whether to use LDAP SAM 2.2 compatible configuration)
AC_ARG_WITH(ldapsam,
-[ --with-ldapsam Include LDAP SAM 2.2 compatible configuration (default=no)],
+[ --with-ldapsam Include LDAP SAM 2.2 compatible configuration (default=no)],
[ case "$withval" in
yes)
AC_MSG_RESULT(yes)
@@ -2782,7 +2784,7 @@ samba_cv_HAVE_ACL_GET_PERM_NP=yes,samba_
with_sendfile_support=yes
AC_MSG_CHECKING(whether to check to support sendfile)
AC_ARG_WITH(sendfile-support,
-[ --with-sendfile-support Check for sendfile support (default=yes)],
+[ --with-sendfile-support Check for sendfile support (default=yes)],
[ case "$withval" in
yes)
diff -Npur --exclude=CVS --exclude=*.bak --exclude=*.o --exclude=*.po --exclude=.#* HEAD/source/dynconfig.c HEAD-modules/source/dynconfig.c
--- HEAD/source/dynconfig.c Tue Nov 5 16:25:26 2002
+++ HEAD-modules/source/dynconfig.c Fri Dec 6 09:22:43 2002
@@ -54,9 +54,9 @@ pstring dyn_LMHOSTSFILE = LMHOSTSFILE;
/**
* @brief Samba library directory.
*
- * @sa lib_path() to get the path to a file inside the LIBDIR.
+ * @sa data_path() to get the path to a file inside the DATADIR.
**/
-pstring dyn_LIBDIR = LIBDIR;
+pstring dyn_DATADIR = DATADIR;
/**
* @brief Directory holding lock files.
@@ -68,3 +68,6 @@ const pstring dyn_PIDDIR = PIDDIR;
const pstring dyn_SMB_PASSWD_FILE = SMB_PASSWD_FILE;
const pstring dyn_PRIVATE_DIR = PRIVATE_DIR;
+
+/** default for lp_modules_path(int snum) **/
+const pstring dyn_LIBDIR = LIBDIR;
diff -Npur --exclude=CVS --exclude=*.bak --exclude=*.o --exclude=*.po --exclude=.#* HEAD/source/include/dynconfig.h HEAD-modules/source/include/dynconfig.h
--- HEAD/source/include/dynconfig.h Tue Nov 5 16:25:26 2002
+++ HEAD-modules/source/include/dynconfig.h Fri Dec 6 09:22:43 2002
@@ -29,8 +29,9 @@ extern char const *dyn_SBINDIR,
extern pstring dyn_CONFIGFILE;
extern pstring dyn_LOGFILEBASE, dyn_LMHOSTSFILE;
-extern pstring dyn_LIBDIR;
+extern pstring dyn_DATADIR;
extern const pstring dyn_LOCKDIR;
extern const pstring dyn_PIDDIR;
extern const pstring dyn_SMB_PASSWD_FILE;
extern const pstring dyn_PRIVATE_DIR;
+extern const pstring dyn_LIBDIR;
\ No newline at end of file
diff -Npur --exclude=CVS --exclude=*.bak --exclude=*.o --exclude=*.po --exclude=.#* HEAD/source/include/includes.h HEAD-modules/source/include/includes.h
--- HEAD/source/include/includes.h Wed Dec 4 07:18:40 2002
+++ HEAD-modules/source/include/includes.h Fri Dec 6 09:22:43 2002
@@ -730,6 +730,7 @@ extern int errno;
#include "version.h"
#include "smb.h"
+#include "modules.h"
#include "smbw.h"
#include "nameserv.h"
diff -Npur --exclude=CVS --exclude=*.bak --exclude=*.o --exclude=*.po --exclude=.#* HEAD/source/include/modules.h HEAD-modules/source/include/modules.h
--- HEAD/source/include/modules.h Thu Jan 1 01:00:00 1970
+++ HEAD-modules/source/include/modules.h Fri Dec 6 09:37:02 2002
@@ -0,0 +1,59 @@
+/*
+ * Unix SMB/CIFS implementation.
+ * module loading system
+
+ * Cpoyright (C) Stefan (metze) Metzmacher 2002
+ *
+ * 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.
+ */
+
+#ifndef _MODULES_H
+#define _MODULES_H
+
+typedef SMB_BIG_UINT SMB_MODULE_TYPES;
+
+#define MODULE_TYPE_NONE 0x0000000000000000
+#define MODULE_TYPE_PDB 0x0000000000000001
+#define MODULE_TYPE_VFS 0x0000000000000002
+#define MODULE_TYPE_WINSDB 0x0000000000000004
+#define MODULE_TYPE_SAM 0x0000000000000008
+#define MODULE_TYPE_CHARSET 0x0000000000000010
+
+#define MODULE_TYPES_ALL 0xFFFFFFFFFFFFFFFF
+
+#ifdef WITH_SAM
+#define MODULE_TYPES_SMBD MODULE_TYPE_CHARSET | MODULE_TYPE_PDB | MODULE_TYPE_VFS | MODULE_TYPE_SAM
+#else
+#define MODULE_TYPES_SMBD MODULE_TYPE_CHARSET | MODULE_TYPE_PDB | MODULE_TYPE_VFS
+#endif /* WITH_SAM */
+
+#define MODULE_TYPES_PER_SHARE MODULE_TYPE_VFS
+
+#define MODULE_TYPES_NMBD MODULE_TYPE_CHARSET | MODULE_TYPE_WINSDB
+
+#define MODULE_TYPES_WINBINDD MODULE_TYPE_NONE
+
+#define MODULE_TYPES_WREPLD MODULE_TYPES_NMBD
+
+#define MODULE_TYPES_NET MODULE_TYPES_SMBD
+#define MODULE_TYPES_SMBPASSWD MODULE_TYPES_SMBD
+#define MODULE_TYPES_SMBGROUPEDIT MODULE_TYPES_SMBD
+#define MODULE_TYPES_PDBEDIT MODULE_TYPES_SMBD
+#define MODULE_TYPES_VFSTEST MODULE_TYPES_SMBD
+
+/* Module support */
+typedef NTSTATUS (init_module_function) (SMB_MODULE_TYPES);
+
+#endif /* _MODULES_H */
\ No newline at end of file
diff -Npur --exclude=CVS --exclude=*.bak --exclude=*.o --exclude=*.po --exclude=.#* HEAD/source/include/smb.h HEAD-modules/source/include/smb.h
--- HEAD/source/include/smb.h Thu Dec 5 09:43:43 2002
+++ HEAD-modules/source/include/smb.h Fri Dec 6 09:22:43 2002
@@ -1707,7 +1707,4 @@ extern struct poptOption popt_common_ver
extern struct poptOption popt_common_netbios_name[];
extern struct poptOption popt_common_log_base[];
-/* Module support */
-typedef NTSTATUS (init_module_function) (void);
-
#endif /* _SMB_H */
diff -Npur --exclude=CVS --exclude=*.bak --exclude=*.o --exclude=*.po --exclude=.#* HEAD/source/include/smb_macros.h HEAD-modules/source/include/smb_macros.h
--- HEAD/source/include/smb_macros.h Thu Dec 5 09:43:43 2002
+++ HEAD-modules/source/include/smb_macros.h Fri Dec 6 09:22:43 2002
@@ -95,8 +95,11 @@
#define ERROR_WAS_LOCK_DENIED(status) (NT_STATUS_EQUAL((status), NT_STATUS_LOCK_NOT_GRANTED) || \
NT_STATUS_EQUAL((status), NT_STATUS_FILE_LOCK_CONFLICT) )
+/* the service number for the [globals] defaults */
+#define GLOBAL_SECTION_SNUM (-1)
/* translates a connection number into a service number */
-#define SNUM(conn) ((conn)?(conn)->service:-1)
+#define SNUM(conn) ((conn)?(conn)->service:GLOBAL_SECTION_SNUM)
+
/* access various service details */
#define SERVICE(snum) (lp_servicename(snum))
diff -Npur --exclude=CVS --exclude=*.bak --exclude=*.o --exclude=*.po --exclude=.#* HEAD/source/intl/lang_tdb.c HEAD-modules/source/intl/lang_tdb.c
--- HEAD/source/intl/lang_tdb.c Sat Nov 23 17:52:43 2002
+++ HEAD-modules/source/intl/lang_tdb.c Fri Dec 6 09:22:43 2002
@@ -123,7 +123,7 @@ BOOL lang_tdb_init(const char *lang)
/* if no lang then we don't translate */
if (!lang) return True;
- asprintf(&msg_path, "%s.msg", lib_path((char *)lang));
+ asprintf(&msg_path, "%s.msg", data_path((char *)lang));
if (stat(msg_path, &st) != 0) {
/* the msg file isn't available */
free(msg_path);
diff -Npur --exclude=CVS --exclude=*.bak --exclude=*.o --exclude=*.po --exclude=.#* HEAD/source/lib/module.c HEAD-modules/source/lib/module.c
--- HEAD/source/lib/module.c Wed Nov 13 19:52:32 2002
+++ HEAD-modules/source/lib/module.c Fri Dec 6 09:22:43 2002
@@ -22,46 +22,64 @@
#include "includes.h"
#ifdef HAVE_DLOPEN
-NTSTATUS smb_load_module(const char *module_name)
+NTSTATUS smb_load_module(const char *module_name, int snum, SMB_MODULE_TYPES types)
{
void *handle;
init_module_function *init;
NTSTATUS nt_status;
+ pstring full_module_name;
+
+ if (module_name[0]=='/') {
+ pstrcpy(full_module_name,module_name);
+ } else {
+ pstrcpy(full_module_name,lp_modules_path(snum));
+ pstrcat(full_module_name,"/");
+ pstrcat(full_module_name,module_name);
+ }
/* 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 = sys_dlopen(module_name, RTLD_LAZY);
+ handle = sys_dlopen(full_module_name, RTLD_LAZY);
if(!handle) {
- DEBUG(0, ("Error loading module '%s': %s\n", module_name, sys_dlerror()));
+ DEBUG(0, ("Error loading module '%s': %s\n", full_module_name, sys_dlerror()));
return NT_STATUS_UNSUCCESSFUL;
}
init = sys_dlsym(handle, "init_module");
if(!init) {
- DEBUG(0, ("Error trying to resolve symbol 'init_module' in %s: %s\n", module_name, sys_dlerror()));
+ DEBUG(0, ("Error trying to resolve symbol 'init_module' in %s: %s\n", full_module_name, sys_dlerror()));
return NT_STATUS_UNSUCCESSFUL;
}
- nt_status = init();
+ nt_status = init(types);
- DEBUG(2, ("Module '%s' loaded\n", module_name));
+ DEBUG(2, ("Module '%s' loaded\n", full_module_name));
return nt_status;
}
/* Load all modules in list and return number of
* modules that has been successfully loaded */
-int smb_load_modules(const char **modules)
+int smb_load_modules(const char **modules, int snum, SMB_MODULE_TYPES types)
{
int i;
int success = 0;
+ if (snum>GLOBAL_SECTION_SNUM &&
+ lp_modules(GLOBAL_SECTION_SNUM)==modules) {
+ /* don't load modules of the global section
+ * when snum != GLOBAL_SECTION_SNUM !!!
+ */
+ DEBUG(5,("smb_load_modules: don't reload global modules on connection start\n"));
+ return success;
+ }
+
for(i = 0; modules[i]; i++){
- if(NT_STATUS_IS_OK(smb_load_module(modules[i]))) {
+ if(NT_STATUS_IS_OK(smb_load_module(modules[i],snum,types))) {
success++;
}
}
@@ -73,13 +91,13 @@ int smb_load_modules(const char **module
#else /* HAVE_DLOPEN */
-NTSTATUS smb_load_module(const char *module_name)
+NTSTATUS smb_load_module(const char *module_name, int snum, SMB_MODULE_TYPES types)
{
DEBUG(0,("This samba executable has not been build with plugin support"));
return NT_STATUS_NOT_SUPPORTED;
}
-int smb_load_modules(const char **modules)
+int smb_load_modules(const char **modules, int snum, SMB_MODULE_TYPES types)
{
DEBUG(0,("This samba executable has not been build with plugin support"));
return -1;
diff -Npur --exclude=CVS --exclude=*.bak --exclude=*.o --exclude=*.po --exclude=.#* HEAD/source/lib/util.c HEAD-modules/source/lib/util.c
--- HEAD/source/lib/util.c Wed Dec 4 07:18:40 2002
+++ HEAD-modules/source/lib/util.c Fri Dec 6 09:22:43 2002
@@ -2156,15 +2156,15 @@ char *pid_path(const char *name)
/**
* @brief Returns an absolute path to a file in the Samba lib directory.
*
- * @param name File to find, relative to LIBDIR.
+ * @param name File to find, relative to DATADIR.
*
* @retval Pointer to a static #pstring containing the full path.
**/
-char *lib_path(const char *name)
+char *data_path(const char *name)
{
static pstring fname;
- snprintf(fname, sizeof(fname), "%s/%s", dyn_LIBDIR, name);
+ snprintf(fname, sizeof(fname), "%s/%s", dyn_DATADIR, name);
return fname;
}
diff -Npur --exclude=CVS --exclude=*.bak --exclude=*.o --exclude=*.po --exclude=.#* HEAD/source/lib/util_unistr.c HEAD-modules/source/lib/util_unistr.c
--- HEAD/source/lib/util_unistr.c Sun Nov 10 00:34:38 2002
+++ HEAD-modules/source/lib/util_unistr.c Fri Dec 6 09:22:43 2002
@@ -43,8 +43,8 @@ void load_case_tables(void)
if (initialised) return;
initialised = 1;
- upcase_table = map_file(lib_path("upcase.dat"), 0x20000);
- lowcase_table = map_file(lib_path("lowcase.dat"), 0x20000);
+ upcase_table = map_file(data_path("upcase.dat"), 0x20000);
+ lowcase_table = map_file(data_path("lowcase.dat"), 0x20000);
/* we would like Samba to limp along even if these tables are
not available */
@@ -108,7 +108,7 @@ void init_valid_table(void)
if (initialised && mapped_file) return;
initialised = 1;
- valid_table = map_file(lib_path("valid.dat"), 0x10000);
+ valid_table = map_file(data_path("valid.dat"), 0x10000);
if (valid_table) {
mapped_file = 1;
return;
diff -Npur --exclude=CVS --exclude=*.bak --exclude=*.o --exclude=*.po --exclude=.#* HEAD/source/modules/developer.c HEAD-modules/source/modules/developer.c
--- HEAD/source/modules/developer.c Wed Nov 13 20:07:34 2002
+++ HEAD-modules/source/modules/developer.c Fri Dec 6 10:15:44 2002
@@ -125,8 +125,10 @@ static size_t weird_push(void *cd, char
struct charset_functions weird_functions = {"WEIRD", weird_pull, weird_push};
-int init_module(void)
+NTSTATUS init_module(SMB_MODULE_TYPES types)
{
- smb_register_charset(&weird_functions);
- return 0;
+ if (types & MODULE_TYPE_CHARSET)
+ smb_register_charset(&weird_functions);
+
+ return NT_STATUS_OK;
}
diff -Npur --exclude=CVS --exclude=*.bak --exclude=*.o --exclude=*.po --exclude=.#* HEAD/source/modules/mysql.c HEAD-modules/source/modules/mysql.c
--- HEAD/source/modules/mysql.c Fri Nov 15 18:01:23 2002
+++ HEAD-modules/source/modules/mysql.c Fri Dec 6 10:11:04 2002
@@ -1032,12 +1032,15 @@ static NTSTATUS mysqlsam_init(struct pdb
return NT_STATUS_OK;
}
-int init_module(void);
-
-int init_module()
+NTSTATUS init_module(SMB_MODULE_TYPES types)
{
- if(smb_register_passdb("mysql", mysqlsam_init, PASSDB_INTERFACE_VERSION))
- return 0;
-
- return 1;
-}
+ if (types & MODULE_TYPE_PDB) {
+ if (smb_register_passdb("mysql", mysqlsam_init, PASSDB_INTERFACE_VERSION)) {
+ return NT_STATUS_OK;
+ } else {
+ return NT_STATUS_UNSUCCESSFUL;
+ }
+ }
+
+ return NT_STATUS_OK;
+}
\ No newline at end of file
diff -Npur --exclude=CVS --exclude=*.bak --exclude=*.o --exclude=*.po --exclude=.#* HEAD/source/modules/xml.c HEAD-modules/source/modules/xml.c
--- HEAD/source/modules/xml.c Fri Nov 15 18:01:23 2002
+++ HEAD-modules/source/modules/xml.c Fri Dec 6 10:14:20 2002
@@ -564,12 +564,15 @@ NTSTATUS xmlsam_init(PDB_CONTEXT * pdb_c
return NT_STATUS_OK;
}
-int init_module(void);
-
-int init_module()
+NTSTATUS init_module(SMB_MODULE_TYPES types)
{
- if(smb_register_passdb("xml", xmlsam_init, PASSDB_INTERFACE_VERSION))
- return 0;
-
- return 1;
+ if (types & MODULE_TYPE_PDB) {
+ if (smb_register_passdb("xml", xmlsam_init, PASSDB_INTERFACE_VERSION)) {
+ return NT_STATUS_OK;
+ } else {
+ return NT_STATUS_UNSUCCESSFUL;
+ }
+ }
+
+ return NT_STATUS_OK;
}
diff -Npur --exclude=CVS --exclude=*.bak --exclude=*.o --exclude=*.po --exclude=.#* HEAD/source/nmbd/nmbd.c HEAD-modules/source/nmbd/nmbd.c
--- HEAD/source/nmbd/nmbd.c Wed Nov 13 19:52:36 2002
+++ HEAD-modules/source/nmbd/nmbd.c Fri Dec 6 09:22:43 2002
@@ -631,6 +631,9 @@ static BOOL open_sockets(BOOL isdaemon,
if ( !reload_nmbd_services(False) )
return(-1);
+ if (lp_modules(GLOBAL_SECTION_SNUM))
+ smb_load_modules(lp_modules(GLOBAL_SECTION_SNUM),GLOBAL_SECTION_SNUM,MODULE_TYPES_NMBD);
+
if(!init_names())
return -1;
diff -Npur --exclude=CVS --exclude=*.bak --exclude=*.o --exclude=*.po --exclude=.#* HEAD/source/nsswitch/winbindd.c HEAD-modules/source/nsswitch/winbindd.c
--- HEAD/source/nsswitch/winbindd.c Mon Dec 2 15:46:20 2002
+++ HEAD-modules/source/nsswitch/winbindd.c Fri Dec 6 09:22:43 2002
@@ -828,6 +828,9 @@ static void usage(void)
exit(1);
}
+ if (lp_modules(GLOBAL_SECTION_SNUM))
+ smb_load_modules(lp_modules(GLOBAL_SECTION_SNUM),GLOBAL_SECTION_SNUM,MODULE_TYPES_WINBINDD);
+
/* Setup names. */
if (!init_names())
diff -Npur --exclude=CVS --exclude=*.bak --exclude=*.o --exclude=*.po --exclude=.#* HEAD/source/smbd/conn.c HEAD-modules/source/smbd/conn.c
--- HEAD/source/smbd/conn.c Tue Aug 20 12:48:38 2002
+++ HEAD-modules/source/smbd/conn.c Fri Dec 6 09:22:43 2002
@@ -191,6 +191,7 @@ void conn_free(connection_struct *conn)
handle = conn->vfs_private;
while(handle) {
/* Close dlopen() handle */
+ /* we should do this on loading... */
done_fptr = (void (*)(connection_struct *))sys_dlsym(handle->handle, "vfs_done");
if (done_fptr == NULL) {
@@ -198,6 +199,7 @@ void conn_free(connection_struct *conn)
} else {
done_fptr(conn);
}
+ /* we should not unload modules */
sys_dlclose(handle->handle);
DLIST_REMOVE(conn->vfs_private, handle);
thandle = handle->next;
diff -Npur --exclude=CVS --exclude=*.bak --exclude=*.o --exclude=*.po --exclude=.#* HEAD/source/smbd/server.c HEAD-modules/source/smbd/server.c
--- HEAD/source/smbd/server.c Tue Nov 26 14:11:04 2002
+++ HEAD-modules/source/smbd/server.c Fri Dec 6 09:22:43 2002
@@ -374,8 +374,8 @@ static BOOL open_sockets_smbd(BOOL is_da
}
/* Load DSO's */
- if(lp_modules())
- smb_load_modules(lp_modules());
+ if (lp_modules(GLOBAL_SECTION_SNUM))
+ smb_load_modules(lp_modules(GLOBAL_SECTION_SNUM),GLOBAL_SECTION_SNUM,MODULE_TYPES_SMBD);
return True;
}
diff -Npur --exclude=CVS --exclude=*.bak --exclude=*.o --exclude=*.po --exclude=.#* HEAD/source/smbd/service.c HEAD-modules/source/smbd/service.c
--- HEAD/source/smbd/service.c Thu Nov 21 07:34:44 2002
+++ HEAD-modules/source/smbd/service.c Fri Dec 6 09:22:43 2002
@@ -564,16 +564,7 @@ static connection_struct *make_connectio
}
}
}
- /* Initialise VFS function pointers */
- if (!smbd_vfs_init(conn)) {
- DEBUG(0, ("vfs_init failed for service %s\n", lp_servicename(SNUM(conn))));
- conn_free(conn);
- *status = NT_STATUS_UNSUCCESSFUL;
- return NULL;
- }
-
-/* ROOT Activities: */
/* check number of connections */
if (!claim_connection(conn,
lp_servicename(SNUM(conn)),
@@ -583,7 +574,22 @@ static connection_struct *make_connectio
conn_free(conn);
*status = NT_STATUS_INSUFFICIENT_RESOURCES;
return NULL;
- }
+ }
+
+ /* load per share modules */
+ if (lp_modules(SNUM(conn)))
+ smb_load_modules(lp_modules(SNUM(conn)),SNUM(conn),MODULE_TYPES_PER_SHARE);
+
+ /* Initialise VFS function pointers */
+
+ if (!smbd_vfs_init(conn)) {
+ DEBUG(0, ("vfs_init failed for service %s\n", lp_servicename(SNUM(conn))));
+ conn_free(conn);
+ *status = NT_STATUS_UNSUCCESSFUL;
+ return NULL;
+ }
+
+/* ROOT Activities: */
/* Preexecs are done here as they might make the dir we are to ChDir to below */
/* execute any "root preexec = " line */
diff -Npur --exclude=CVS --exclude=*.bak --exclude=*.o --exclude=*.po --exclude=.#* HEAD/source/smbd/vfs.c HEAD-modules/source/smbd/vfs.c
--- HEAD/source/smbd/vfs.c Wed Dec 4 07:18:44 2002
+++ HEAD-modules/source/smbd/vfs.c Fri Dec 6 09:22:43 2002
@@ -232,7 +232,7 @@ BOOL smbd_vfs_init(connection_struct *co
/* We are using default separators: ' \t\r\n' */
vfs_objects = toktocliplist(&nobj, NULL);
if (vfs_objects) {
- vfs_path = lp_vfs_path(SNUM(conn));
+ vfs_path = lp_modules_path(SNUM(conn));
conn->vfs_private = NULL;
for(i=nobj-1; i>=0; i--) {
handle = (struct smb_vfs_handle_struct *) smb_xmalloc(sizeof(smb_vfs_handle_struct));
diff -Npur --exclude=CVS --exclude=*.bak --exclude=*.o --exclude=*.po --exclude=.#* HEAD/source/torture/cmd_vfs.c HEAD-modules/source/torture/cmd_vfs.c
--- HEAD/source/torture/cmd_vfs.c Sat Nov 23 17:52:50 2002
+++ HEAD-modules/source/torture/cmd_vfs.c Fri Dec 6 09:22:43 2002
@@ -28,7 +28,7 @@ static char *null_string = "";
static NTSTATUS cmd_load_module(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int argc, char **argv)
{
struct smb_vfs_handle_struct *handle;
- char *path = lp_vfs_path(0);
+ char *path = lp_modules_path(SNUM(vfs->conn));
char name[PATH_MAX];
if (argc != 2) {
diff -Npur --exclude=CVS --exclude=*.bak --exclude=*.o --exclude=*.po --exclude=.#* HEAD/source/torture/vfstest.c HEAD-modules/source/torture/vfstest.c
--- HEAD/source/torture/vfstest.c Thu Sep 5 11:40:32 2002
+++ HEAD-modules/source/torture/vfstest.c Fri Dec 6 10:36:53 2002
@@ -527,6 +527,9 @@ int main(int argc, char *argv[])
/* TODO: check output */
reload_services(False);
+
+ if (lp_modules(GLOBAL_SECTION_SNUM))
+ smb_load_modules(lp_modules(GLOBAL_SECTION_SNUM),GLOBAL_SECTION_SNUM,MODULE_TYPES_VFSTEST);
/* the following functions are part of the Samba debugging
facilities. See lib/debug.c */
diff -Npur --exclude=CVS --exclude=*.bak --exclude=*.o --exclude=*.po --exclude=.#* HEAD/source/utils/net.c HEAD-modules/source/utils/net.c
--- HEAD/source/utils/net.c Wed Nov 13 19:52:41 2002
+++ HEAD-modules/source/utils/net.c Fri Dec 6 09:22:43 2002
@@ -608,7 +608,10 @@ static struct functable net_func[] = {
if (!opt_target_workgroup) {
opt_target_workgroup = strdup(lp_workgroup());
}
-
+
+ if (lp_modules(GLOBAL_SECTION_SNUM))
+ smb_load_modules(lp_modules(GLOBAL_SECTION_SNUM),GLOBAL_SECTION_SNUM, MODULE_TYPES_NET);
+
if (!init_names())
exit(1);
diff -Npur --exclude=CVS --exclude=*.bak --exclude=*.o --exclude=*.po --exclude=.#* HEAD/source/utils/pdbedit.c HEAD-modules/source/utils/pdbedit.c
--- HEAD/source/utils/pdbedit.c Wed Nov 13 19:52:42 2002
+++ HEAD-modules/source/utils/pdbedit.c Fri Dec 6 09:22:43 2002
@@ -503,8 +503,8 @@ int main (int argc, char **argv)
exit(1);
}
- if(lp_modules())
- smb_load_modules(lp_modules());
+ if (lp_modules(GLOBAL_SECTION_SNUM))
+ smb_load_modules(lp_modules(GLOBAL_SECTION_SNUM),GLOBAL_SECTION_SNUM,MODULE_TYPES_PDBEDIT);
if (!init_names())
exit(1);
diff -Npur --exclude=CVS --exclude=*.bak --exclude=*.o --exclude=*.po --exclude=.#* HEAD/source/utils/smbgroupedit.c HEAD-modules/source/utils/smbgroupedit.c
--- HEAD/source/utils/smbgroupedit.c Wed Nov 13 19:52:42 2002
+++ HEAD-modules/source/utils/smbgroupedit.c Fri Dec 6 09:22:43 2002
@@ -279,6 +279,9 @@ int main (int argc, char **argv)
exit(1);
}
+ if (lp_modules(GLOBAL_SECTION_SNUM))
+ smb_load_modules(lp_modules(GLOBAL_SECTION_SNUM),GLOBAL_SECTION_SNUM,MODULE_TYPES_SMBGROUPEDIT);
+
if (!init_names())
exit(1);
diff -Npur --exclude=CVS --exclude=*.bak --exclude=*.o --exclude=*.po --exclude=.#* HEAD/source/utils/smbpasswd.c HEAD-modules/source/utils/smbpasswd.c
--- HEAD/source/utils/smbpasswd.c Wed Nov 13 19:52:43 2002
+++ HEAD-modules/source/utils/smbpasswd.c Fri Dec 6 09:22:43 2002
@@ -579,6 +579,9 @@ int main(int argc, char **argv)
setup_logging("smbpasswd", True);
+ if (lp_modules(GLOBAL_SECTION_SNUM))
+ smb_load_modules(lp_modules(GLOBAL_SECTION_SNUM),GLOBAL_SECTION_SNUM,MODULE_TYPES_SMBPASSWD);
+
/*
* Set the machine NETBIOS name if not already
* set from the config file.
diff -Npur --exclude=CVS --exclude=*.bak --exclude=*.o --exclude=*.po --exclude=.#* HEAD/source/wrepld/server.c HEAD-modules/source/wrepld/server.c
--- HEAD/source/wrepld/server.c Wed Nov 13 19:52:43 2002
+++ HEAD-modules/source/wrepld/server.c Fri Dec 6 09:22:43 2002
@@ -661,6 +661,9 @@ static void process(void)
if (!reload_services(False))
return(-1);
+ if (lp_modules(GLOBAL_SECTION_SNUM))
+ smb_load_modules(lp_modules(GLOBAL_SECTION_SNUM),GLOBAL_SECTION_SNUM, MODULE_TYPES_WREPLD);
+
if (!init_names())
return -1;
diff -Npur --exclude=CVS --exclude=*.bak --exclude=*.o --exclude=*.po --exclude=.#* HEAD/source/param/loadparm.c HEAD-modules/source/param/loadparm.c
--- HEAD/source/param/loadparm.c Mon Nov 25 06:45:26 2002
+++ HEAD-modules/source/param/loadparm.c Fri Dec 6 10:47:54 2002
@@ -111,7 +111,6 @@ typedef struct
char *szPrivateDir;
char **szPassdbBackend;
char **szSamBackend;
- char **szModules;
char *szPasswordServer;
char *szSocketOptions;
char *szRealm;
@@ -317,7 +316,8 @@ typedef struct
char *fstype;
char *szVfsObjectFile;
char *szVfsOptions;
- char *szVfsPath;
+ char *szModulesPath;
+ char **szModules;
int iMinPrintSpace;
int iMaxPrintJobs;
int iWriteCacheSize;
@@ -435,7 +435,8 @@ static service sDefault = {
NULL, /* fstype */
NULL, /* vfs object */
NULL, /* vfs options */
- NULL, /* vfs path */
+ (char *)dyn_LIBDIR, /* modules path */
+ NULL, /* modules */
0, /* iMinPrintSpace */
1000, /* iMaxPrintJobs */
0, /* iWriteCacheSize */
@@ -796,7 +797,8 @@ static struct parm_struct parm_table[] =
{"allow hosts", P_LIST, P_LOCAL, &sDefault.szHostsallow, NULL, NULL, FLAG_HIDE},
{"hosts deny", P_LIST, P_LOCAL, &sDefault.szHostsdeny, NULL, NULL, FLAG_GLOBAL | FLAG_BASIC | FLAG_ADVANCED | FLAG_SHARE | FLAG_PRINT | FLAG_DEVELOPER},
{"deny hosts", P_LIST, P_LOCAL, &sDefault.szHostsdeny, NULL, NULL, FLAG_HIDE},
- {"modules", P_LIST, P_GLOBAL, &Globals.szModules, NULL, NULL, FLAG_BASIC | FLAG_GLOBAL},
+ {"modules path", P_STRING, P_LOCAL, &sDefault.szModulesPath, NULL, NULL, FLAG_BASIC | FLAG_SHARE| FLAG_GLOBAL | FLAG_ADVANCED | FLAG_DEVELOPER},
+ {"modules", P_LIST, P_LOCAL, &sDefault.szModules, NULL, NULL, FLAG_BASIC | FLAG_SHARE | FLAG_GLOBAL},
{"Logging Options", P_SEP, P_SEPARATOR},
@@ -1073,9 +1075,8 @@ static struct parm_struct parm_table[] =
{"vfs object", P_STRING, P_LOCAL, &sDefault.szVfsObjectFile, handle_vfs_object, NULL, FLAG_SHARE},
{"vfs options", P_STRING, P_LOCAL, &sDefault.szVfsOptions, NULL, NULL, FLAG_SHARE},
- {"vfs path", P_STRING, P_LOCAL, &sDefault.szVfsPath, NULL, NULL, FLAG_SHARE},
-
-
+ {"vfs path", P_STRING, P_LOCAL, &sDefault.szModulesPath, NULL, NULL, FLAG_HIDE},
+
{"msdfs root", P_BOOL, P_LOCAL, &sDefault.bMSDfsRoot, NULL, NULL, FLAG_SHARE},
{"host msdfs", P_BOOL, P_GLOBAL, &Globals.bHostMSDfs, NULL, NULL, FLAG_ADVANCED | FLAG_DEVELOPER},
@@ -1566,7 +1567,6 @@ static FN_GLOBAL_STRING(lp_announce_vers
FN_GLOBAL_LIST(lp_netbios_aliases, &Globals.szNetbiosAliases)
FN_GLOBAL_LIST(lp_passdb_backend, &Globals.szPassdbBackend)
FN_GLOBAL_LIST(lp_sam_backend, &Globals.szSamBackend)
-FN_GLOBAL_LIST(lp_modules, &Globals.szModules)
FN_GLOBAL_STRING(lp_panic_action, &Globals.szPanicAction)
FN_GLOBAL_STRING(lp_adduser_script, &Globals.szAddUserScript)
FN_GLOBAL_STRING(lp_deluser_script, &Globals.szDelUserScript)
@@ -1722,7 +1722,8 @@ FN_LOCAL_LIST(lp_printer_admin, printer_
FN_LOCAL_STRING(lp_fstype, fstype)
FN_LOCAL_STRING(lp_vfsobj, szVfsObjectFile)
FN_LOCAL_STRING(lp_vfs_options, szVfsOptions)
-FN_LOCAL_STRING(lp_vfs_path, szVfsPath)
+FN_LOCAL_STRING(lp_modules_path, szModulesPath)
+FN_LOCAL_LIST(lp_modules, szModules)
static FN_LOCAL_STRING(lp_volume, volume)
FN_LOCAL_STRING(lp_mangled_map, szMangledMap)
FN_LOCAL_STRING(lp_veto_files, szVetoFiles)
More information about the samba-technical
mailing list