]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Merge remote-tracking branch 'public/ticket13037'
authorNick Mathewson <nickm@torproject.org>
Sun, 18 Jan 2015 21:07:08 +0000 (16:07 -0500)
committerNick Mathewson <nickm@torproject.org>
Sun, 18 Jan 2015 21:07:08 +0000 (16:07 -0500)
Conflicts:
src/or/config.c

1  2 
configure.ac
src/or/config.c
src/or/control.c

diff --cc configure.ac
Simple merge
diff --cc src/or/config.c
index 1995cb750f3ff53a2aca83936a4973178acc5171,b9a567b741b52b261690d8fdd34577315dc9c073..64bc54b3ddfd0932f2ee0de9bbdeb0738b3000a1
@@@ -4178,22 -4148,16 +4181,22 @@@ find_torrc_filename(config_line_t *cmd_
      } else {
  #ifndef _WIN32
        char *fn = NULL;
 -      if (!defaults_file)
 +      if (!defaults_file) {
          fn = expand_filename("~/.torrc");
 -      if (fn && (file_status(fn) == FN_FILE || dflt == NULL)) {
 -        fname = fn;
 +      }
 +      if (fn) {
 +        file_status_t hmst = file_status(fn);
-         if (hmst == FN_FILE || hmst == FN_EMPTY) {
++        if (hmst == FN_FILE || hmst == FN_EMPTY || dflt == NULL) {
 +          fname = fn;
 +        } else {
 +          tor_free(fn);
 +          fname = tor_strdup(dflt);
 +        }
        } else {
-         fname = tor_strdup(dflt);
 -        tor_free(fn);
+         fname = dflt ? tor_strdup(dflt) : NULL;
        }
  #else
-       fname = tor_strdup(dflt);
+       fname = dflt ? tor_strdup(dflt) : NULL;
  #endif
      }
    }
@@@ -4216,20 -4180,17 +4219,20 @@@ load_torrc_from_disk(config_line_t *cmd
    int ignore_missing_torrc = 0;
    char **fname_var = defaults_file ? &torrc_defaults_fname : &torrc_fname;
  
 -  fname = find_torrc_filename(cmd_arg, defaults_file,
 -                              &using_default_torrc, &ignore_missing_torrc);
 -
 +  if (*fname_var == NULL) {
 +    fname = find_torrc_filename(cmd_arg, defaults_file,
 +                                &using_default_torrc, &ignore_missing_torrc);
-     tor_assert(fname);
 +    tor_free(*fname_var);
 +    *fname_var = fname;
 +  } else {
 +    fname = *fname_var;
 +  }
-   log_debug(LD_CONFIG, "Opening config file \"%s\"", fname);
+   log_debug(LD_CONFIG, "Opening config file \"%s\"", fname?fname:"<NULL>");
  
 -  tor_free(*fname_var);
 -  *fname_var = fname;
 -
    /* Open config file */
-   file_status_t st = file_status(fname);
-   if (!(st == FN_FILE || st == FN_EMPTY) ||
++  file_status_t st = fname ? file_status(fname) : FN_EMPTY;
+   if (fname == NULL ||
 -      file_status(fname) != FN_FILE ||
++      !(st == FN_FILE || st == FN_EMPTY) ||
        !(cf = read_file_to_str(fname,0,NULL))) {
      if (using_default_torrc == 1 || ignore_missing_torrc) {
        if (!defaults_file)
@@@ -6559,12 -6438,11 +6554,13 @@@ write_configuration_file(const char *fn
    char *old_val=NULL, *new_val=NULL, *new_conf=NULL;
    int rename_old = 0, r;
  
-   tor_assert(fname);
+   if (!fname)
+     return -1;
  
    switch (file_status(fname)) {
 +    /* create backups of old config files, even if they're empty */
      case FN_FILE:
 +    case FN_EMPTY:
        old_val = read_file_to_str(fname, 0, NULL);
        if (!old_val || strcmpstart(old_val, GENERATED_FILE_PREFIX)) {
          rename_old = 1;
index 9ff71c9541b065e55ab6e28e256647286178bf8f,a569c962c4308be08aee0f83ddfb90659be5a89d..00cb4311fb9c7ea3c69f3ba237959d0f31c63d5f
@@@ -1438,12 -1438,14 +1438,16 @@@ getinfo_helper_misc(control_connection_
    (void) conn;
    if (!strcmp(question, "version")) {
      *answer = tor_strdup(get_version());
 +  } else if (!strcmp(question, "bw-event-cache")) {
 +    *answer = get_bw_samples();
    } else if (!strcmp(question, "config-file")) {
-     *answer = tor_strdup(get_torrc_fname(0));
+     const char *a = get_torrc_fname(0);
+     if (a)
+       *answer = tor_strdup(a);
    } else if (!strcmp(question, "config-defaults-file")) {
-     *answer = tor_strdup(get_torrc_fname(1));
+     const char *a = get_torrc_fname(1);
+     if (a)
+       *answer = tor_strdup(a);
    } else if (!strcmp(question, "config-text")) {
      *answer = options_dump(get_options(), OPTIONS_DUMP_MINIMAL);
    } else if (!strcmp(question, "info/names")) {