summaryrefslogtreecommitdiff
path: root/src/or/config.c
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2015-01-04 19:34:38 -0500
committerNick Mathewson <nickm@torproject.org>2015-01-04 19:34:38 -0500
commitb06b783fa0644f5166211a6c328e0f5d8b280962 (patch)
tree02e3afc73dbf075ad4c3931525d964f7795a31e2 /src/or/config.c
parenteda5cebd6c334c3e6fa82c6623f33592a8f77e60 (diff)
downloadtor-b06b783fa0644f5166211a6c328e0f5d8b280962.tar.gz
tor-b06b783fa0644f5166211a6c328e0f5d8b280962.zip
Tolerate relative paths for torrc files with RunAsDaemon
We had a check to block these, but the patch we merged as a1c1fc72 broke this check by making them absolute on demand every time we opened them. That's not so great though. Instead, we should make them absolute on startup, and not let them change after that. Fixes bug 13397; bugfix on 0.2.3.11-alpha.
Diffstat (limited to 'src/or/config.c')
-rw-r--r--src/or/config.c20
1 files changed, 9 insertions, 11 deletions
diff --git a/src/or/config.c b/src/or/config.c
index e7891a5bd3..cf42f30f7a 100644
--- a/src/or/config.c
+++ b/src/or/config.c
@@ -2584,11 +2584,6 @@ options_validate(or_options_t *old_options, or_options_t *options,
REJECT("Failed to resolve/guess local address. See logs for details.");
}
-#ifndef _WIN32
- if (options->RunAsDaemon && torrc_fname && path_is_relative(torrc_fname))
- REJECT("Can't use a relative path to torrc when RunAsDaemon is set.");
-#endif
-
if (server_mode(options) && options->RendConfigLines)
log_warn(LD_CONFIG,
"Tor is currently configured as a relay and a hidden service. "
@@ -4152,14 +4147,17 @@ load_torrc_from_disk(config_line_t *cmd_arg, int defaults_file)
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);
- tor_assert(fname);
+ 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);
- tor_free(*fname_var);
- *fname_var = fname;
-
/* Open config file */
if (file_status(fname) != FN_FILE ||
!(cf = read_file_to_str(fname,0,NULL))) {