s4:param: add "state dir" and "cache dir" options
authorStefan Metzmacher <metze@samba.org>
Tue, 12 Jul 2011 11:04:08 +0000 (13:04 +0200)
committerStefan Metzmacher <metze@samba.org>
Tue, 12 Jul 2011 12:58:34 +0000 (14:58 +0200)
metze

source4/param/loadparm.c
source4/param/util.c
source4/scripting/python/samba/provision/__init__.py
source4/setup/provision.smb.conf.dc
source4/setup/provision.smb.conf.member
source4/setup/provision.smb.conf.standalone
source4/smbd/server.c

index b890ad81a9565a3a999f5af9ccfabc766ef87c3c..df8b054d30ab8e7e088f6e936fe48e6217223b09 100644 (file)
@@ -1082,6 +1082,22 @@ static struct parm_struct parm_table[] = {
                .special        = NULL,
                .enum_list      = NULL
        },
+       {
+               .label          = "state dir",
+               .type           = P_STRING,
+               .p_class        = P_GLOBAL,
+               .offset         = GLOBAL_VAR(szStateDir),
+               .special        = NULL,
+               .enum_list      = NULL
+       },
+       {
+               .label          = "cache dir",
+               .type           = P_STRING,
+               .p_class        = P_GLOBAL,
+               .offset         = GLOBAL_VAR(szCacheDir),
+               .special        = NULL,
+               .enum_list      = NULL
+       },
        {
                .label          = "pid directory",
                .type           = P_STRING,
@@ -1476,6 +1492,8 @@ FN_GLOBAL_BOOL(idmap_trusted_only, bIdmapTrustedOnly)
 FN_GLOBAL_STRING(private_dir, szPrivateDir)
 FN_GLOBAL_STRING(serverstring, szServerString)
 FN_GLOBAL_STRING(lockdir, szLockDir)
+FN_GLOBAL_STRING(statedir, szStateDir)
+FN_GLOBAL_STRING(cachedir, szCacheDir)
 FN_GLOBAL_STRING(ncalrpc_dir, ncalrpc_dir)
 FN_GLOBAL_STRING(dos_charset, dos_charset)
 FN_GLOBAL_STRING(unix_charset, unix_charset)
@@ -3263,6 +3281,8 @@ struct loadparm_context *loadparm_init(TALLOC_CTX *mem_ctx)
 
        lpcfg_do_global_parameter(lp_ctx, "pid directory", dyn_PIDDIR);
        lpcfg_do_global_parameter(lp_ctx, "lock dir", dyn_LOCKDIR);
+       lpcfg_do_global_parameter(lp_ctx, "state dir", dyn_STATEDIR);
+       lpcfg_do_global_parameter(lp_ctx, "cache dir", dyn_CACHEDIR);
        lpcfg_do_global_parameter(lp_ctx, "ncalrpc dir", dyn_NCALRPCDIR);
 
        lpcfg_do_global_parameter(lp_ctx, "socket address", "");
index b1a7a571e65ea8c3230d25f9fa2597de4935724c..92672ecba2c6b85dde2814beab5a312e675cece8 100644 (file)
@@ -100,6 +100,62 @@ char *lpcfg_lock_path(TALLOC_CTX* mem_ctx, struct loadparm_context *lp_ctx,
        return fname;
 }
 
+/**
+ A useful function for returning a path in the Samba state directory.
+**/
+char *lpcfg_state_path(TALLOC_CTX* mem_ctx, struct loadparm_context *lp_ctx,
+                      const char *name)
+{
+       char *fname, *dname;
+       if (name == NULL) {
+               return NULL;
+       }
+       if (name[0] == 0 || name[0] == '/' || strstr(name, ":/")) {
+               return talloc_strdup(mem_ctx, name);
+       }
+
+       dname = talloc_strdup(mem_ctx, lpcfg_statedir(lp_ctx));
+       trim_string(dname,"","/");
+
+       if (!directory_exist(dname)) {
+               mkdir(dname,0755);
+       }
+
+       fname = talloc_asprintf(mem_ctx, "%s/%s", dname, name);
+
+       talloc_free(dname);
+
+       return fname;
+}
+
+/**
+ A useful function for returning a path in the Samba cache directory.
+**/
+char *lpcfg_cache_path(TALLOC_CTX* mem_ctx, struct loadparm_context *lp_ctx,
+                      const char *name)
+{
+       char *fname, *dname;
+       if (name == NULL) {
+               return NULL;
+       }
+       if (name[0] == 0 || name[0] == '/' || strstr(name, ":/")) {
+               return talloc_strdup(mem_ctx, name);
+       }
+
+       dname = talloc_strdup(mem_ctx, lpcfg_cachedir(lp_ctx));
+       trim_string(dname,"","/");
+
+       if (!directory_exist(dname)) {
+               mkdir(dname,0755);
+       }
+
+       fname = talloc_asprintf(mem_ctx, "%s/%s", dname, name);
+
+       talloc_free(dname);
+
+       return fname;
+}
+
 /**
  * @brief Returns an absolute path to a file in the directory containing the current config file
  *
index 91c4ef7f80681690dc7af303ed6432e8222b189f..b20e58477638675ab26c4975aad67cafa6478c32 100644 (file)
@@ -714,11 +714,17 @@ def make_smbconf(smbconf, hostname, domain, realm, serverrole,
     if targetdir is not None:
         privatedir_line = "private dir = " + os.path.abspath(os.path.join(targetdir, "private"))
         lockdir_line = "lock dir = " + os.path.abspath(targetdir)
+        statedir_line = "state dir = " + os.path.abspath(targetdir)
+        cachedir_line = "cache dir = " + os.path.abspath(targetdir)
 
         lp.set("lock dir", os.path.abspath(targetdir))
+        lp.set("state dir", os.path.abspath(targetdir))
+        lp.set("cache dir", os.path.abspath(targetdir))
     else:
         privatedir_line = ""
         lockdir_line = ""
+        statedir_line = ""
+        cachedir_line = ""
 
     sysvol = os.path.join(lp.get("lock dir"), "sysvol")
     netlogon = os.path.join(sysvol, realm.lower(), "scripts")
@@ -732,7 +738,9 @@ def make_smbconf(smbconf, hostname, domain, realm, serverrole,
             "NETLOGONPATH": netlogon,
             "SYSVOLPATH": sysvol,
             "PRIVATEDIR_LINE": privatedir_line,
-            "LOCKDIR_LINE": lockdir_line
+            "LOCKDIR_LINE": lockdir_line,
+            "STATEDIR_LINE": statedir_line,
+            "CACHEDIR_LINE": cachedir_line
             })
 
     # reload the smb.conf
index f489f59ff9dd4540927e105f8b5c83776c38cd6b..3fd2e77770125b0413c436b4834048b9db76f4c5 100644 (file)
@@ -5,6 +5,8 @@
        server role     = ${SERVERROLE}
        ${PRIVATEDIR_LINE}
        ${LOCKDIR_LINE}
+       ${STATEDIR_LINE}
+       ${CACHEDIR_LINE}
 
 [netlogon]
        path = ${NETLOGONPATH}
index 96e5d0c2e5a41183437facd9c8f1ff4cfc3eeb0b..6c57b5a8d3f5f4c7cab9d0fb5a13f36bb8c23a6f 100644 (file)
@@ -5,3 +5,5 @@
        server role     = ${SERVERROLE}
        ${PRIVATEDIR_LINE}
        ${LOCKDIR_LINE}
+       ${STATEDIR_LINE}
+       ${CACHEDIR_LINE}
index 96e5d0c2e5a41183437facd9c8f1ff4cfc3eeb0b..6c57b5a8d3f5f4c7cab9d0fb5a13f36bb8c23a6f 100644 (file)
@@ -5,3 +5,5 @@
        server role     = ${SERVERROLE}
        ${PRIVATEDIR_LINE}
        ${LOCKDIR_LINE}
+       ${STATEDIR_LINE}
+       ${CACHEDIR_LINE}
index 1be3b2885f6424df23f9ebd0aa49124bcce78872..b0f683ba93f7ed718d18df5a01756736c8da5db2 100644 (file)
@@ -252,6 +252,8 @@ static void show_build(void)
                CONFIG_OPTION(DATADIR),
                CONFIG_OPTION(MODULESDIR),
                CONFIG_OPTION(LOCKDIR),
+               CONFIG_OPTION(STATEDIR),
+               CONFIG_OPTION(CACHEDIR),
                CONFIG_OPTION(PIDDIR),
                CONFIG_OPTION(PRIVATE_DIR),
                CONFIG_OPTION(SWATDIR),