diff -Naurp samba-3.2.13/source/configure samba-3.2.13.oden/source/configure --- samba-3.2.13/source/configure 2009-06-22 23:35:48.000000000 +0200 +++ samba-3.2.13.oden/source/configure 2009-07-12 14:03:13.000000000 +0200 @@ -822,6 +822,7 @@ CC smbtorture4_path selftest_prefix pammodulesdir +modulesdir rootsbindir cachedir statedir @@ -1630,7 +1631,7 @@ Optional Packages: --with-configdir=DIR Where to put configuration files ($libdir) --with-logfilebase=DIR Where to put log files ($VARDIR) --with-ctdb=DIR Where to find ctdb sources - --with-libdir=DIR Where to put libdir ($libdir) + --with-modulesdir=DIR Where to put shared modules ($libdir) --with-pammodulesdir=DIR Which directory to use for PAM modules ($ac_default_prefix/$libdir/security) @@ -2394,10 +2395,11 @@ test "${mandir}" || mandir="\${prefix}/m logfilebase="\${VARDIR}" privatedir="\${prefix}/private" test "${libdir}" || libdir="\${prefix}/lib" -pammodulesdir="\${LIBDIR}/security" -configdir="\${LIBDIR}" +modulesdir="${libdir}" +pammodulesdir="${libdir}/security" +configdir="${libdir}" swatdir="\${prefix}/swat" -codepagedir="\${LIBDIR}" +codepagedir="\${MODULESDIR}" statedir="\${LOCKDIR}" cachedir="\${LOCKDIR}" @@ -2411,10 +2413,11 @@ if test "${with_fhs+set}" = set; then mandir="\${prefix}/share/man" logfilebase="\${VARDIR}/log/samba" privatedir="\${CONFIGDIR}/private" - test "${libdir}" || libdir="\${prefix}/lib/samba" + test "${libdir}" || libdir="\${prefix}/lib" + modulesdir="${libdir}/samba" configdir="\${sysconfdir}/samba" swatdir="\${DATADIR}/samba/swat" - codepagedir="\${LIBDIR}" + codepagedir="\${MODULESDIR}" statedir="\${VARDIR}/lib/samba" cachedir="\${VARDIR}/lib/samba" @@ -2586,20 +2589,20 @@ fi ################################################# -# set lib directory location +# set shared modules (internal lib) directory location -# Check whether --with-libdir was given. -if test "${with_libdir+set}" = set; then - withval=$with_libdir; case "$withval" in +# Check whether --with-modulesdir was given. +if test "${with_modulesdir+set}" = set; then + withval=$with_modulesdir; case "$withval" in yes|no) # # Just in case anybody does it # - { $as_echo "$as_me:$LINENO: WARNING: --with-libdir without argument - will use default" >&5 -$as_echo "$as_me: WARNING: --with-libdir without argument - will use default" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: --with-modulesdir without argument - will use default" >&5 +$as_echo "$as_me: WARNING: --with-modulesdir without argument - will use default" >&2;} ;; * ) - libdir="$withval" + modulesdir="$withval" ;; esac fi @@ -2660,6 +2663,7 @@ fi + ################################################# # set prefix for 'make test' selftest_prefix="./st" diff -Naurp samba-3.2.13/source/dynconfig.c samba-3.2.13.oden/source/dynconfig.c --- samba-3.2.13/source/dynconfig.c 2009-06-22 23:05:38.000000000 +0200 +++ samba-3.2.13.oden/source/dynconfig.c 2009-07-12 13:58:36.000000000 +0200 @@ -40,12 +40,6 @@ * table? There's kind of a chicken-and-egg situation there... **/ -#if 0 -static char const *dyn_SBINDIR = SBINDIR; -static char const *dyn_BINDIR = BINDIR; -static char const *dyn_SWATDIR = SWATDIR; -#endif - #define DEFINE_DYN_CONFIG_PARAM(name) \ static char *dyn_##name; \ \ @@ -79,222 +73,13 @@ DEFINE_DYN_CONFIG_PARAM(LOGFILEBASE) /** DEFINE_DYN_CONFIG_PARAM(LMHOSTSFILE) /** Statically configured LanMan hosts. **/ DEFINE_DYN_CONFIG_PARAM(CODEPAGEDIR) DEFINE_DYN_CONFIG_PARAM(LIBDIR) +DEFINE_DYN_CONFIG_PARAM(MODULESDIR) DEFINE_DYN_CONFIG_PARAM(SHLIBEXT) DEFINE_DYN_CONFIG_PARAM(LOCKDIR) DEFINE_DYN_CONFIG_PARAM(PIDDIR) DEFINE_DYN_CONFIG_PARAM(SMB_PASSWD_FILE) DEFINE_DYN_CONFIG_PARAM(PRIVATE_DIR) -#if 0 -static char *dyn_CONFIGFILE; /**< Location of smb.conf file. **/ - -const char *get_dyn_CONFIGFILE(void) -{ - if (dyn_CONFIGFILE == NULL) { - return CONFIGFILE; - } - return dyn_CONFIGFILE; -} - -const char *set_dyn_CONFIGFILE(const char *newpath) -{ - if (dyn_CONFIGFILE) { - SAFE_FREE(dyn_CONFIGFILE); - } - dyn_CONFIGFILE = SMB_STRDUP(newpath); - return dyn_CONFIGFILE; -} - -/** Log file directory. **/ -static char *dyn_LOGFILEBASE; - -const char *get_dyn_LOGFILEBASE(void) -{ - if (dyn_LOGFILEBASE == NULL) { - return LOGFILEBASE; - } - return dyn_LOGFILEBASE; -} - -const char *set_dyn_LOGFILEBASE(const char *newpath) -{ - if (dyn_LOGFILEBASE) { - SAFE_FREE(dyn_LOGFILEBASE); - } - dyn_LOGFILEBASE = SMB_STRDUP(newpath); - return dyn_LOGFILEBASE; -} - -/** Statically configured LanMan hosts. **/ -static char *dyn_LMHOSTSFILE; - -const char *get_dyn_LMHOSTSFILE(void) -{ - if (dyn_LMHOSTSFILE == NULL) { - return LMHOSTSFILE; - } - return dyn_LMHOSTSFILE; -} - -const char *set_dyn_LMHOSTSFILE(const char *newpath) -{ - if (dyn_LMHOSTSFILE) { - SAFE_FREE(dyn_LMHOSTSFILE); - } - dyn_LMHOSTSFILE = SMB_STRDUP(newpath); - return dyn_LMHOSTSFILE; -} - -/** - * @brief Samba data directory. - * - * @sa data_path() to get the path to a file inside the CODEPAGEDIR. - **/ -static char *dyn_CODEPAGEDIR; - -const char *get_dyn_CODEPAGEDIR(void) -{ - if (dyn_CODEPAGEDIR == NULL) { - return CODEPAGEDIR; - } - return dyn_CODEPAGEDIR; -} - -const char *set_dyn_CODEPAGEDIR(const char *newpath) -{ - if (dyn_CODEPAGEDIR) { - SAFE_FREE(dyn_CODEPAGEDIR); - } - dyn_CODEPAGEDIR = SMB_STRDUP(newpath); - return dyn_CODEPAGEDIR; -} - -/** - * @brief Samba library directory. - * - * @sa lib_path() to get the path to a file inside the LIBDIR. - **/ -static char *dyn_LIBDIR; - -const char *get_dyn_LIBDIR(void) -{ - if (dyn_LIBDIR == NULL) { - return LIBDIR; - } - return dyn_CODEPAGEDIR; -} - -const char *set_dyn_LIBDIR(const char *newpath) -{ - if (dyn_LIBDIR) { - SAFE_FREE(dyn_LIBDIR); - } - dyn_LIBDIR = SMB_STRDUP(newpath); - return dyn_LIBDIR; -} - -static char *dyn_SHLIBEXT; - -const char *get_dyn_SHLIBEXT(void) -{ - if (dyn_SHLIBEXT == NULL) { - return SHLIBEXT; - } - return dyn_SHLIBEXT; -} - -const char *set_dyn_SHLIBEXT(const char *newpath) -{ - if (dyn_SHLIBEXT) { - SAFE_FREE(dyn_SHLIBEXT); - } - dyn_SHLIBEXT = SMB_STRDUP(newpath); - return dyn_SHLIBEXT; -} - -/** - * @brief Directory holding lock files. - * - * Not writable, but used to set a default in the parameter table. - **/ - -static char *dyn_LOCKDIR; - -const char *get_dyn_LOCKDIR(void) -{ - if (dyn_LOCKDIR == NULL) { - return LOCKDIR; - } - return dyn_LOCKDIR; -} - -const char *set_dyn_LOCKDIR(const char *newpath) -{ - if (dyn_LOCKDIR) { - SAFE_FREE(dyn_LOCKDIR); - } - dyn_LOCKDIR = SMB_STRDUP(newpath); - return dyn_LOCKDIR; -} - -static char *dyn_PIDDIR; - -const char *get_dyn_PIDDIR(void) -{ - if (dyn_PIDDIR == NULL) { - return PIDDIR; - } - return dyn_PIDDIR; -} - -const char *set_dyn_PIDDIR(const char *newpath) -{ - if (dyn_PIDDIR) { - SAFE_FREE(dyn_PIDDIR); - } - dyn_PIDDIR = SMB_STRDUP(newpath); - return dyn_PIDDIR; -} - -static char *dyn_SMB_PASSWD_FILE; - -const char *get_dyn_SMB_PASSWD_FILE(void) -{ - if (dyn_SMB_PASSWD_FILE == NULL) { - return SMB_PASSWD_FILE; - } - return dyn_SMB_PASSWD_FILE; -} - -const char *set_dyn_SMB_PASSWD_FILE(const char *newpath) -{ - if (dyn_SMB_PASSWD_FILE) { - SAFE_FREE(dyn_SMB_PASSWD_FILE); - } - dyn_SMB_PASSWD_FILE = SMB_STRDUP(newpath); - return dyn_SMB_PASSWD_FILE; -} - -static char *dyn_PRIVATE_DIR; - -const char *get_dyn_PRIVATE_DIR(void) -{ - if (dyn_PRIVATE_DIR == NULL) { - return PRIVATE_DIR; - } - return dyn_PRIVATE_DIR; -} - -const char *set_dyn_PRIVATE_DIR(const char *newpath) -{ - if (dyn_PRIVATE_DIR) { - SAFE_FREE(dyn_PRIVATE_DIR); - } - dyn_PRIVATE_DIR = SMB_STRDUP(newpath); - return dyn_PRIVATE_DIR; -} -#endif - /* In non-FHS mode, these should be configurable using 'lock dir ='; but in FHS mode, they are their own directory. Implement as wrapper functions so that everything can still be kept in dynconfig.c. diff -Naurp samba-3.2.13/source/include/dynconfig.h samba-3.2.13.oden/source/include/dynconfig.h --- samba-3.2.13/source/include/dynconfig.h 2009-06-22 23:05:38.000000000 +0200 +++ samba-3.2.13.oden/source/include/dynconfig.h 2009-07-12 13:58:36.000000000 +0200 @@ -23,22 +23,6 @@ * @brief Exported global configurations. **/ -#if 0 -const char *get_dyn_SBINDIR(void); -const char *get_dyn_BINDIR(void); -const char *get_dyn_SWATDIR(void); - -extern char dyn_CONFIGFILE[1024]; -extern char dyn_LOGFILEBASE[1024], dyn_LMHOSTSFILE[1024]; -extern char dyn_LIBDIR[1024]; -extern char dyn_CODEPAGEDIR[1024]; -extern fstring dyn_SHLIBEXT; -extern char dyn_LOCKDIR[1024]; -extern char dyn_PIDDIR[1024]; -extern char dyn_SMB_PASSWD_FILE[1024]; -extern char dyn_PRIVATE_DIR[1024]; -#endif - const char *get_dyn_SBINDIR(void); const char *set_dyn_SBINDIR(const char *newpath); bool is_default_dyn_SBINDIR(void); @@ -71,6 +55,10 @@ const char *get_dyn_LIBDIR(void); const char *set_dyn_LIBDIR(const char *newpath); bool is_default_dyn_LIBDIR(void); +const char *get_dyn_MODULESDIR(void); +const char *set_dyn_MODULESDIR(const char *newpath); +bool is_default_dyn_MODULESDIR(void); + const char *get_dyn_SHLIBEXT(void); const char *set_dyn_SHLIBEXT(const char *newpath); bool is_default_dyn_SHLIBEXT(void); diff -Naurp samba-3.2.13/source/lib/module.c samba-3.2.13.oden/source/lib/module.c --- samba-3.2.13/source/lib/module.c 2009-06-22 23:05:38.000000000 +0200 +++ samba-3.2.13.oden/source/lib/module.c 2009-07-12 13:58:36.000000000 +0200 @@ -118,7 +118,7 @@ NTSTATUS smb_probe_module(const char *su full_path = talloc_asprintf(ctx, "%s/%s.%s", - lib_path(subsystem), + modules_path(subsystem), module, shlib_ext()); if (!full_path) { diff -Naurp samba-3.2.13/source/lib/popt_common.c samba-3.2.13.oden/source/lib/popt_common.c --- samba-3.2.13/source/lib/popt_common.c 2009-06-22 23:05:38.000000000 +0200 +++ samba-3.2.13.oden/source/lib/popt_common.c 2009-07-12 13:58:36.000000000 +0200 @@ -171,6 +171,12 @@ struct poptOption popt_common_version[] POPT_TABLEEND }; +struct poptOption popt_common_debuglevel[] = { + { NULL, 0, POPT_ARG_CALLBACK, (void *)popt_common_callback }, + { "debuglevel", 'd', POPT_ARG_STRING, NULL, 'd', "Set debug level", "DEBUGLEVEL" }, + POPT_TABLEEND +}; + /* Handle command line options: * --sbindir @@ -178,6 +184,7 @@ struct poptOption popt_common_version[] * --swatdir * --lmhostsfile * --libdir + * --modulesdir * --shlibext * --lockdir * --piddir @@ -191,6 +198,7 @@ enum dyn_item{ DYN_SWATDIR, DYN_LMHOSTSFILE, DYN_LIBDIR, + DYN_MODULESDIR, DYN_SHLIBEXT, DYN_LOCKDIR, DYN_PIDDIR, @@ -236,6 +244,12 @@ static void popt_dynconfig_callback(popt } break; + case DYN_MODULESDIR: + if (arg) { + set_dyn_MODULESDIR(arg); + } + break; + case DYN_SHLIBEXT: if (arg) { set_dyn_SHLIBEXT(arg); @@ -283,6 +297,8 @@ const struct poptOption popt_common_dync "Path to lmhosts file", "LMHOSTSFILE" }, { "libdir", '\0' , POPT_ARG_STRING, NULL, DYN_LIBDIR, "Path to shared library directory", "LIBDIR" }, + { "modulesdir", '\0' , POPT_ARG_STRING, NULL, DYN_MODULESDIR, + "Path to shared modules directory", "MODULESDIR" }, { "shlibext", '\0' , POPT_ARG_STRING, NULL, DYN_SHLIBEXT, "Shared library extension", "SHLIBEXT" }, { "lockdir", '\0' , POPT_ARG_STRING, NULL, DYN_LOCKDIR, diff -Naurp samba-3.2.13/source/lib/util.c samba-3.2.13.oden/source/lib/util.c --- samba-3.2.13/source/lib/util.c 2009-06-22 23:05:38.000000000 +0200 +++ samba-3.2.13.oden/source/lib/util.c 2009-07-12 13:58:36.000000000 +0200 @@ -2607,6 +2607,19 @@ char *lib_path(const char *name) } /** + * @brief Returns an absolute path to a file in the Samba modules directory. + * + * @param name File to find, relative to MODULESDIR. + * + * @retval Pointer to a string containing the full path. + **/ + +char *modules_path(const char *name) +{ + return talloc_asprintf(talloc_tos(), "%s/%s", get_dyn_MODULESDIR(), name); +} + +/** * @brief Returns an absolute path to a file in the Samba data directory. * * @param name File to find, relative to CODEPAGEDIR. diff -Naurp samba-3.2.13/source/m4/check_path.m4 samba-3.2.13.oden/source/m4/check_path.m4 --- samba-3.2.13/source/m4/check_path.m4 2009-06-22 23:05:38.000000000 +0200 +++ samba-3.2.13.oden/source/m4/check_path.m4 2009-07-12 13:58:36.000000000 +0200 @@ -22,10 +22,11 @@ test "${mandir}" || mandir="\${prefix}/m logfilebase="\${VARDIR}" privatedir="\${prefix}/private" test "${libdir}" || libdir="\${prefix}/lib" -pammodulesdir="\${LIBDIR}/security" -configdir="\${LIBDIR}" +modulesdir="${libdir}" +pammodulesdir="${libdir}/security" +configdir="${libdir}" swatdir="\${prefix}/swat" -codepagedir="\${LIBDIR}" +codepagedir="\${MODULESDIR}" statedir="\${LOCKDIR}" cachedir="\${LOCKDIR}" @@ -38,10 +39,11 @@ AC_ARG_WITH(fhs, mandir="\${prefix}/share/man" logfilebase="\${VARDIR}/log/samba" privatedir="\${CONFIGDIR}/private" - test "${libdir}" || libdir="\${prefix}/lib/samba" + test "${libdir}" || libdir="\${prefix}/lib" + modulesdir="${libdir}/samba" configdir="\${sysconfdir}/samba" swatdir="\${DATADIR}/samba/swat" - codepagedir="\${LIBDIR}" + codepagedir="\${MODULESDIR}" statedir="\${VARDIR}/lib/samba" cachedir="\${VARDIR}/lib/samba" AC_DEFINE(FHS_COMPATIBLE, 1, [Whether to use fully FHS-compatible paths]) @@ -175,18 +177,18 @@ AC_ARG_WITH(ctdb, esac]) ################################################# -# set lib directory location -AC_ARG_WITH(libdir, -[AS_HELP_STRING([--with-libdir=DIR], [Where to put libdir ($libdir)])], +# set shared modules (internal lib) directory location +AC_ARG_WITH(modulesdir, +[AS_HELP_STRING([--with-modulesdir=DIR], [Where to put shared modules ($libdir)])], [ case "$withval" in yes|no) # # Just in case anybody does it # - AC_MSG_WARN([--with-libdir without argument - will use default]) + AC_MSG_WARN([--with-modulesdir without argument - will use default]) ;; * ) - libdir="$withval" + modulesdir="$withval" ;; esac]) @@ -236,6 +238,7 @@ AC_SUBST(statedir) AC_SUBST(cachedir) AC_SUBST(rootsbindir) AC_SUBST(pammodulesdir) +AC_SUBST(modulesdir) ################################################# # set prefix for 'make test' diff -Naurp samba-3.2.13/source/Makefile.in samba-3.2.13.oden/source/Makefile.in --- samba-3.2.13/source/Makefile.in 2009-06-22 23:05:38.000000000 +0200 +++ samba-3.2.13.oden/source/Makefile.in 2009-07-12 13:58:36.000000000 +0200 @@ -99,16 +99,18 @@ BINDIR = @bindir@ SBINDIR = @sbindir@ ROOTSBINDIR = @rootsbindir@ LIBDIR = @libdir@ +MODULESDIR = @modulesdir@ INCLUDEDIR=@includedir@ PAMMODULESDIR = @pammodulesdir@ -VFSLIBDIR = $(LIBDIR)/vfs -PDBLIBDIR = $(LIBDIR)/pdb -RPCLIBDIR = $(LIBDIR)/rpc -IDMAPLIBDIR = $(LIBDIR)/idmap -NSSINFOLIBDIR = $(LIBDIR)/nss_info -CHARSETLIBDIR = $(LIBDIR)/charset -AUTHLIBDIR = $(LIBDIR)/auth -CONFIGLIBDIR = $(LIBDIR)/config +VFSLIBDIR = $(MODULESDIR)/vfs +PDBLIBDIR = $(MODULESDIR)/pdb +RPCLIBDIR = $(MODULESDIR)/rpc +IDMAPLIBDIR = $(MODULESDIR)/idmap +NSSINFOLIBDIR = $(MODULESDIR)/nss_info +CHARSETLIBDIR = $(MODULESDIR)/charset +AUTHLIBDIR = $(MODULESDIR)/auth +CONFIGLIBDIR = $(MODULESDIR)/config +GPEXTLIBDIR = $(MODULESDIR)/gpext CONFIGDIR = @configdir@ VARDIR = @localstatedir@ MANDIR = @mandir@ @@ -165,6 +167,7 @@ PATH_FLAGS = -DSMB_PASSWD_FILE=\"$(SMB_P -DLOCKDIR=\"$(LOCKDIR)\" \ -DPIDDIR=\"$(PIDDIR)\" \ -DLIBDIR=\"$(LIBDIR)\" \ + -DMODULESDIR=\"$(MODULESDIR)\" \ -DLOGFILEBASE=\"$(LOGFILEBASE)\" \ -DSHLIBEXT=\"@SHLIBEXT@\" \ -DCTDBDIR=\"$(CTDBDIR)\" \ @@ -2506,6 +2509,7 @@ showlayout:: @echo " bindir: $(BINDIR)" @echo " sbindir: $(SBINDIR)" @echo " libdir: $(LIBDIR)" + @echo " modulesdir: $(MODULESDIR)" @echo " vardir: $(VARDIR)" @echo " mandir: $(MANDIR)" @echo " privatedir: $(PRIVATE_DIR)" diff -Naurp samba-3.2.13/source/services/services_db.c samba-3.2.13.oden/source/services/services_db.c --- samba-3.2.13/source/services/services_db.c 2009-06-22 23:05:38.000000000 +0200 +++ samba-3.2.13.oden/source/services/services_db.c 2009-07-12 13:58:36.000000000 +0200 @@ -199,7 +199,7 @@ static bool read_init_file( const char * /* attempt the file open */ - filepath = talloc_asprintf(info, "%s/%s/%s", get_dyn_LIBDIR(), + filepath = talloc_asprintf(info, "%s/%s/%s", get_dyn_MODULESDIR(), SVCCTL_SCRIPT_DIR, servicename); if (!filepath) { TALLOC_FREE(info); @@ -277,7 +277,7 @@ static void fill_service_values( const c if ( strequal( name, builtin_svcs[i].servicename ) ) { char *pstr = NULL; if (asprintf(&pstr, "%s/%s/%s", - get_dyn_LIBDIR(), SVCCTL_SCRIPT_DIR, + get_dyn_MODULESDIR(), SVCCTL_SCRIPT_DIR, builtin_svcs[i].daemon) > 0) { init_unistr2( &ipath, pstr, UNI_STR_TERMINATE ); SAFE_FREE(pstr); @@ -297,7 +297,7 @@ static void fill_service_values( const c char *dispname = NULL; struct rcinit_file_information *init_info = NULL; - if (asprintf(&pstr, "%s/%s/%s",get_dyn_LIBDIR(), + if (asprintf(&pstr, "%s/%s/%s",get_dyn_MODULESDIR(), SVCCTL_SCRIPT_DIR, name) > 0) { init_unistr2( &ipath, pstr, UNI_STR_TERMINATE ); SAFE_FREE(pstr); diff -Naurp samba-3.2.13/source/services/svc_rcinit.c samba-3.2.13.oden/source/services/svc_rcinit.c --- samba-3.2.13/source/services/svc_rcinit.c 2009-06-22 23:05:38.000000000 +0200 +++ samba-3.2.13.oden/source/services/svc_rcinit.c 2009-07-12 13:58:36.000000000 +0200 @@ -28,7 +28,7 @@ static WERROR rcinit_stop( const char *s int ret, fd; if (asprintf(&command, "%s/%s/%s stop", - get_dyn_LIBDIR(), SVCCTL_SCRIPT_DIR, service) < 0) { + get_dyn_MODULESDIR(), SVCCTL_SCRIPT_DIR, service) < 0) { return WERR_NOMEM; } @@ -60,7 +60,7 @@ static WERROR rcinit_start( const char * int ret, fd; if (asprintf(&command, "%s/%s/%s start", - get_dyn_LIBDIR(), SVCCTL_SCRIPT_DIR, service) < 0) { + get_dyn_MODULESDIR(), SVCCTL_SCRIPT_DIR, service) < 0) { return WERR_NOMEM; } @@ -87,7 +87,7 @@ static WERROR rcinit_status( const char int ret, fd; if (asprintf(&command, "%s/%s/%s status", - get_dyn_LIBDIR(), SVCCTL_SCRIPT_DIR, service) < 0) { + get_dyn_MODULESDIR(), SVCCTL_SCRIPT_DIR, service) < 0) { return WERR_NOMEM; }