ソースを参照

* Ported [2646] to 1.2.9 (Added datadir, addresses #162)

svn: 2647
Bryan Drewery 20 年 前
コミット
25d8addea8
5 ファイル変更27 行追加14 行削除
  1. 3 3
      src/binary.c
  2. 18 6
      src/conf.c
  3. 1 1
      src/conf.h
  4. 3 2
      src/main.c
  5. 2 2
      src/settings.h

+ 3 - 3
src/binary.c

@@ -357,7 +357,7 @@ static void edpack(settings_t *incfg, const char *in_hash, int what)
   dofield(incfg->watcher);
   dofield(incfg->uname);
   dofield(incfg->username);
-  dofield(incfg->tempdir);
+  dofield(incfg->datadir);
   dofield(incfg->homedir);
   dofield(incfg->binpath);
   dofield(incfg->binname);
@@ -393,7 +393,7 @@ tellconfig(settings_t *incfg)
   dofield(incfg->watcher);
   dofield(incfg->uname);
   dofield(incfg->username);
-  dofield(incfg->tempdir);
+  dofield(incfg->datadir);
   dofield(incfg->homedir);
   dofield(incfg->binpath);
   dofield(incfg->binname);
@@ -507,7 +507,7 @@ void conf_to_bin(conf_t *in, bool move, int die)
   strlcpy(settings.username, in->username, sizeof(settings.username));
 
   strlcpy(settings.uname, in->uname, sizeof(settings.uname));
-  strlcpy(settings.tempdir, in->tempdir, sizeof(settings.tempdir));
+  strlcpy(settings.datadir, in->datadir, sizeof(settings.datadir));
   strlcpy(settings.homedir, in->homedir, sizeof(settings.homedir));
   strlcpy(settings.binpath, in->binpath, sizeof(settings.binpath));
   for (bot = in->bots; bot && bot->nick; bot = bot->next) {

+ 18 - 6
src/conf.c

@@ -45,10 +45,10 @@ tellconf()
   sdprintf("tempdir: %s\n", replace(tempdir, conf.homedir, "~"));
   sdprintf("uid: %d\n", conf.uid);
   sdprintf("uname: %s\n", conf.uname);
-  sdprintf("tempdir: %s\n", conf.tempdir);
   sdprintf("homedir: %s\n", conf.homedir);
   sdprintf("binpath: %s\n", replace(conf.binpath, conf.homedir, "~"));
   sdprintf("binname: %s\n", conf.binname);
+  sdprintf("datadir: %s\n", replace(conf.datadir, conf.homedir, "~"));
   sdprintf("portmin: %d\n", conf.portmin);
   sdprintf("portmax: %d\n", conf.portmax);
   sdprintf("pscloak: %d\n", conf.pscloak);
@@ -316,6 +316,7 @@ confedit()
   tmpconf.my_close();
   readconf((const char *) tmpconf.file, 0);               /* read cleartext conf tmp into &settings */
   expand_tilde(&conf.binpath);
+  expand_tilde(&conf.datadir);
   unlink(tmpconf.file);
   conf_to_bin(&conf, 0, -1);
   if (localhub_pid)
@@ -365,7 +366,7 @@ init_conf()
   conf.uname = NULL;
   conf.username = NULL;
   conf.homedir = NULL;
-  conf.tempdir = strdup("");
+  conf.datadir = strdup("./...");
 }
 
 void conf_checkpids()
@@ -557,7 +558,8 @@ free_conf()
   free(conf.localhub);
   free(conf.uname);
   free(conf.username);
-  free(conf.tempdir);
+  if (conf.datadir)
+    free(conf.datadir);
   free(conf.homedir);
   free(conf.binname);
   free(conf.binpath);
@@ -690,8 +692,8 @@ readconf(const char *fname, int bits)
         } else if (!strcmp(option, "homedir")) {        /* homedir */
           conf.homedir = strdup(line);
 
-        } else if (!strcmp(option, "tempdir")) {        /* tempdir */
-          conf.tempdir = strdup(line);
+        } else if (!strcmp(option, "datadir")) {        /* datadir */
+          conf.datadir = strdup(line);
 
         } else if (!strcmp(option, "binpath")) {        /* path that the binary should move to? */
           str_redup(&conf.binpath, line);
@@ -857,6 +859,15 @@ writeconf(char *filename, FILE * stream, int bits)
 
   comment("");
 
+  comment("# datadir should be set to a static directory that is writable");
+  if (strstr(conf.datadir, homedir())) {
+    p = replace(conf.datadir, homedir(), "~");
+    my_write(f, "! datadir %s\n", p);
+  } else
+    my_write(f, "! datadir %s\n", conf.datadir);
+
+  comment("");
+
   comment("# portmin/max are for incoming connections (DCC) [0 for any]");
   my_write(f, "! portmin %d\n", conf.portmin);
   my_write(f, "! portmax %d\n", conf.portmax);
@@ -1011,7 +1022,8 @@ bin_to_conf(void)
   conf.uid = atol(settings.uid);
   conf.username = strdup(settings.username);
   conf.uname = strdup(settings.uname);
-  conf.tempdir = strdup(settings.tempdir);
+  conf.datadir = strdup(settings.datadir);
+  expand_tilde(&conf.datadir);
   conf.homedir = strdup(settings.homedir);
   conf.binpath = strdup(settings.binpath);
   expand_tilde(&conf.binpath);

+ 1 - 1
src/conf.h

@@ -37,7 +37,7 @@ typedef struct conf_b {
   int watcher;		/* spawn a watcher pid to block ptrace? */
   char *localhub;	/* my localhub */
   char *uname;
-  char *tempdir;
+  char *datadir;
   char *username;       /* shell username */
   char *homedir;        /* homedir */
   char *binpath;        /* path to binary, ie: ~/ */

+ 3 - 2
src/main.c

@@ -295,6 +295,7 @@ static void dtx_arg(int argc, char *argv[])
       case '4':
         readconf(optarg, CONF_ENC);
         expand_tilde(&conf.binpath);
+        expand_tilde(&conf.datadir);
         parseconf(0);
         conf_to_bin(&conf, 0, 6);		/* this will exit() in write_settings() */
       case 'a':
@@ -674,11 +675,11 @@ printf("out: %s\n", out);
     fatal("!! Invalid binary", 0);
   }
 
-  /* setup initial tempdir as /tmp until we read in tmpdir from conf */
-
   binname = getfullbinname(argv[0]);
   chdir(dirname(binname));
 
+  /* Find a temporary tempdir until we load binary data */
+  /* setup initial tempdir as /tmp until we read in tmpdir from conf */
   Tempfile::FindDir();
 
   /* This allows -2/-0 to be used without an initialized binary */

+ 2 - 2
src/settings.h

@@ -27,7 +27,7 @@ typedef struct settings_struct {
   char watcher[17];          /* spawn a watcher pid to block ptrace? */
   char uname[113];
   char username[49];       /* shell username */
-  char tempdir[1025];
+  char datadir[1025];
   char homedir[1025];        /* homedir */
   char binpath[1025];        /* path to binary, ie: ~/ */
   char binname[113];        /* binary name, ie: .sshrc */
@@ -44,7 +44,7 @@ sizeof(settings.salt1) + sizeof(settings.salt2) + sizeof(settings.dcc_prefix)
 #define SIZE_CONF sizeof(settings.bots) + sizeof(settings.uid) + sizeof(settings.autouname) + \
 sizeof(settings.pscloak) + sizeof(settings.autocron) + sizeof(settings.watcher) + sizeof(settings.uname) + \
 sizeof(settings.username) + sizeof(settings.homedir) + sizeof(settings.binpath) + sizeof(settings.binname) + \
-sizeof(settings.portmin) + sizeof(settings.portmin) + sizeof(settings.tempdir)
+sizeof(settings.portmin) + sizeof(settings.portmin) + sizeof(settings.datadir)
 
 #define SIZE_PAD sizeof(settings.padding)