Commit 8b4e7f9a authored by Nick Mathewson's avatar Nick Mathewson 🥔
Browse files

Merge branch 'bug1101_squashed'

parents 878a6843 e0651bb1
Loading
Loading
Loading
Loading

changes/bug1101

0 → 100644
+3 −0
Original line number Diff line number Diff line
  o Minor features:
    - Use absolute path names when reporting the torrc filename, so
      that a controller can more easily find it. Resolves bug 1101.
+36 −0
Original line number Diff line number Diff line
@@ -1634,6 +1634,42 @@ get_parent_directory(char *fname)
  return -1;
}

/** Expand possibly relative path <b>fname</b> to an absolute path.
 * Return a newly allocated string, possibly equal to <b>fname</b>. */
char *
make_path_absolute(char *fname)
{
#ifdef WINDOWS
  char *absfname_malloced = _fullpath(NULL, fname, 1);

  /* We don't want to assume that tor_free can free a string allocated
   * with malloc.  On failure, return fname (it's better than nothing). */
  char *absfname = tor_strdup(absfname_malloced ? absfname_malloced : fname);
  if (absfname_malloced) free(absfname_malloced);

  return absfname;
#else
  char path[PATH_MAX+1];
  char *absfname = NULL;

  tor_assert(fname);

  if(fname[0] == '/') {
    absfname = tor_strdup(fname);
  } else {
    if (getcwd(path, PATH_MAX) != NULL) {
      tor_asprintf(&absfname, "%s/%s", path, fname);
    } else {
      /* If getcwd failed, the best we can do here is keep using the
       * relative path.  (Perhaps / isn't readable by this UID/GID.) */
      absfname = tor_strdup(fname);
    }
  }

  return absfname;
#endif
}

/** Set *addr to the IP address (in dotted-quad notation) stored in c.
 * Return 1 on success, 0 if c is badly formatted.  (Like inet_aton(c,addr),
 * but works on Windows and Solaris.)
+1 −0
Original line number Diff line number Diff line
@@ -571,6 +571,7 @@ char *get_user_homedir(const char *username);
#endif

int get_parent_directory(char *fname);
char *make_path_absolute(char *fname);

int spawn_func(void (*func)(void *), void *data);
void spawn_exit(void) ATTR_NORETURN;
+8 −0
Original line number Diff line number Diff line
@@ -4356,6 +4356,14 @@ find_torrc_filename(int argc, char **argv,
        tor_free(fname);
      }
      fname = expand_filename(argv[i+1]);

      {
        char *absfname;
        absfname = make_path_absolute(fname);
        tor_free(fname);
        fname = absfname;
      }

      *using_default_torrc = 0;
      ++i;
    } else if (ignore_opt && !strcmp(argv[i],ignore_opt)) {