[PATCH] module path stuff

Stefan (metze) Metzmacher metze at metzemix.de
Fri Dec 6 12:00:01 GMT 2002


Hi Jelmer,

I have found a little bug :-(

this patch should work...

-------------------------------
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)
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 12:09:58 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 */
+	NULL,			/* modules path */
+	NULL,			/* modules */
 	0,			/* iMinPrintSpace */
 	1000,			/* iMaxPrintJobs */
 	0,			/* iWriteCacheSize */
@@ -452,7 +453,7 @@ static service sDefault = {
 	DEFAULT_PRINTING,	/* iPrinting */
 	2,			/* iOplockContentionLimit */
 	0,			/* iCSCPolicy */
-	1024,           /* iBlock_size */
+	1024,           	/* iBlock_size */
 	False,			/* bPreexecClose */
 	False,			/* bRootpreexecClose */
 	False,			/* case sensitive */
@@ -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_ADVANCED | FLAG_DEVELOPER},
+	{"modules", P_LIST, P_LOCAL, &sDefault.szModules, NULL, NULL, FLAG_BASIC | FLAG_SHARE },
 
 	{"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},
 
@@ -1229,6 +1230,7 @@ static void init_globals(void)
 				string_set(parm_table[i].ptr, "");
 
 		string_set(&sDefault.fstype, FSTYPE_STRING);
+		string_set(&sDefault.szModulesPath, dyn_LIBDIR);
 
 		init_printer_values();
 
@@ -1566,7 +1568,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 +1723,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