diff options
-rw-r--r-- | source3/Makefile.in | 16 | ||||
-rw-r--r-- | source3/configure.in | 7 | ||||
-rw-r--r-- | source3/dynconfig.c | 31 | ||||
-rw-r--r-- | source3/include/dynconfig.h | 4 | ||||
-rw-r--r-- | source3/lib/util.c | 33 |
5 files changed, 88 insertions, 3 deletions
diff --git a/source3/Makefile.in b/source3/Makefile.in index a1da65a507..baa18283d4 100644 --- a/source3/Makefile.in +++ b/source3/Makefile.in @@ -127,6 +127,13 @@ SWATDIR = @swatdir@ # the directory where lock files go LOCKDIR = @lockdir@ +# FHS directories; equal to LOCKDIR if not using --with-fhs +CACHEDIR = @cachedir@ +STATEDIR = @statedir@ + +# Where to look for (and install) codepage databases. +CODEPAGEDIR = @codepagedir@ + # the directory where pid files go PIDDIR = @piddir@ @@ -154,7 +161,10 @@ PATH_FLAGS = -DSMB_PASSWD_FILE=\"$(SMB_PASSWD_FILE)\" \ -DLOGFILEBASE=\"$(LOGFILEBASE)\" \ -DSHLIBEXT=\"@SHLIBEXT@\" \ -DCTDBDIR=\"$(CTDBDIR)\" \ - -DCONFIGDIR=\"$(CONFIGDIR)\" + -DCONFIGDIR=\"$(CONFIGDIR)\" \ + -DCODEPAGEDIR=\"$(CODEPAGEDIR)\" \ + -DCACHEDIR=\"$(CACHEDIR)\" \ + -DSTATEDIR=\"$(STATEDIR)\" # Note that all executable programs now provide for an optional executable suffix. @@ -1761,10 +1771,10 @@ installscripts: installdirs @$(SHELL) $(srcdir)/script/installscripts.sh $(INSTALLPERMS_BIN) $(DESTDIR)$(BINDIR) $(SCRIPTS) installdat: installdirs - @$(SHELL) $(srcdir)/script/installdat.sh $(DESTDIR) $(LIBDIR) $(srcdir) + @$(SHELL) $(srcdir)/script/installdat.sh $(DESTDIR) $(CODEPAGEDIR) $(srcdir) installmsg: installdirs - @$(SHELL) $(srcdir)/script/installmsg.sh $(DESTDIR) $(LIBDIR) $(srcdir) + @$(SHELL) $(srcdir)/script/installmsg.sh $(DESTDIR) $(CODEPAGEDIR) $(srcdir) installswat: installdirs installmsg @$(SHELL) $(srcdir)/script/installswat.sh $(DESTDIR) $(SWATDIR) $(srcdir) diff --git a/source3/configure.in b/source3/configure.in index 9e1ebeffe7..227ab4033d 100644 --- a/source3/configure.in +++ b/source3/configure.in @@ -65,6 +65,10 @@ AC_ARG_WITH(fhs, libdir="\${prefix}/lib/samba" configdir="\${sysconfdir}/samba" swatdir="\${DATADIR}/samba/swat" + codepagedir="\${prefix}/lib/samba" + statedir="\${VARDIR}/lib/samba" + cachedir="\${VARDIR}/lib/samba" + AC_DEFINE(FHS_COMPATIBLE, 1, [Whether to use fully FHS-compatible paths]) ;; esac]) @@ -284,6 +288,9 @@ AC_SUBST(privatedir) AC_SUBST(swatdir) AC_SUBST(bindir) AC_SUBST(sbindir) +AC_SUBST(codepagedir) +AC_SUBST(statedir) +AC_SUBST(cachedir) AC_SUBST(rootsbindir) AC_SUBST(pammodulesdir) diff --git a/source3/dynconfig.c b/source3/dynconfig.c index 6a40a07554..01460b8363 100644 --- a/source3/dynconfig.c +++ b/source3/dynconfig.c @@ -52,6 +52,13 @@ pstring dyn_LOGFILEBASE = LOGFILEBASE; pstring dyn_LMHOSTSFILE = LMHOSTSFILE; /** + * @brief Samba data directory. + * + * @sa data_path() to get the path to a file inside the CODEPAGEDIR. + **/ +pstring dyn_CODEPAGEDIR = CODEPAGEDIR; + +/** * @brief Samba library directory. * * @sa lib_path() to get the path to a file inside the LIBDIR. @@ -69,3 +76,27 @@ pstring dyn_PIDDIR = PIDDIR; pstring dyn_SMB_PASSWD_FILE = SMB_PASSWD_FILE; pstring dyn_PRIVATE_DIR = PRIVATE_DIR; + + +/* 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. + */ + +char *dyn_STATEDIR(void) +{ +#ifdef FHS_COMPATIBLE + return STATEDIR; +#else + return lp_lockdir(); +#endif +} + +char *dyn_CACHEDIR(void) +{ +#ifdef FHS_COMPATIBLE + return CACHEDIR; +#else + return lp_lockdir(); +#endif +} diff --git a/source3/include/dynconfig.h b/source3/include/dynconfig.h index 7091aa81b5..996cf61492 100644 --- a/source3/include/dynconfig.h +++ b/source3/include/dynconfig.h @@ -30,8 +30,12 @@ extern char const *dyn_SBINDIR, extern pstring dyn_CONFIGFILE; extern pstring dyn_LOGFILEBASE, dyn_LMHOSTSFILE; extern pstring dyn_LIBDIR; +extern pstring dyn_CODEPAGEDIR; extern fstring dyn_SHLIBEXT; extern pstring dyn_LOCKDIR; extern pstring dyn_PIDDIR; extern pstring dyn_SMB_PASSWD_FILE; extern pstring dyn_PRIVATE_DIR; + +char *dyn_STATEDIR(void); +char *dyn_CACHEDIR(void); diff --git a/source3/lib/util.c b/source3/lib/util.c index 53200ad02a..c8f0c3121f 100644 --- a/source3/lib/util.c +++ b/source3/lib/util.c @@ -2435,6 +2435,39 @@ char *lib_path(const char *name) } /** + * @brief Returns an absolute path to a file in the Samba data directory. + * + * @param name File to find, relative to CODEPAGEDIR. + * + * @retval Pointer to a talloc'ed string containing the full path. + **/ + +char *data_path(const char *name) +{ + return talloc_asprintf(talloc_tos(), "%s/%s", dyn_CODEPAGEDIR, name); +} + +/***************************************************************** +a useful function for returning a path in the Samba state directory + *****************************************************************/ +char *state_path(char *name) +{ + pstring fname; + + pstrcpy(fname,dyn_STATEDIR()); + trim_string(fname,"","/"); + + if (!directory_exist(fname,NULL)) { + mkdir(fname,0755); + } + + pstrcat(fname,"/"); + pstrcat(fname,name); + + return talloc_strdup(talloc_tos(), fname); +} + +/** * @brief Returns the platform specific shared library extension. * * @retval Pointer to a static #fstring containing the extension. |