summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source3/Makefile.in16
-rw-r--r--source3/configure.in7
-rw-r--r--source3/dynconfig.c31
-rw-r--r--source3/include/dynconfig.h4
-rw-r--r--source3/lib/util.c33
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.