Refuse to use RunAsDaemon when torrc is a relative path. Fixes bug 229.

svn:r5767
This commit is contained in:
Nick Mathewson 2006-01-10 20:00:20 +00:00
parent e1d1ce3da8
commit 7fc62029d4
3 changed files with 20 additions and 2 deletions

View File

@ -1314,6 +1314,17 @@ tor_listdir(const char *dirname)
return result;
}
/** Return true iff <b>filename</b> is a relative path. (XXXX doesn't work on
* windows.) */
int
path_is_relative(const char *filename)
{
if (filename && filename[0] == '/')
return 0;
else
return 1;
}
/* =====
* Net helpers
* ===== */

View File

@ -158,6 +158,7 @@ char *read_file_to_str(const char *filename, int bin);
char *parse_line_from_str(char *line, char **key_out, char **value_out);
char *expand_filename(const char *filename);
struct smartlist_t *tor_listdir(const char *dirname);
int path_is_relative(const char *filename);
/* Net helpers */
int is_internal_IP(uint32_t ip, int for_listening);

View File

@ -1887,6 +1887,11 @@ options_validate(or_options_t *old_options, or_options_t *options)
result = -1;
}
#ifndef MS_WINDOWS
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 (options->SocksPort < 0 || options->SocksPort > 65535)
REJECT("SocksPort option out of bounds.");
@ -2502,6 +2507,9 @@ options_init_from_torrc(int argc, char **argv)
tor_assert(fname);
log(LOG_DEBUG, LD_CONFIG, "Opening config file \"%s\"", fname);
tor_free(torrc_fname);
torrc_fname = fname;
/* get config lines, assign them */
if (file_status(fname) != FN_FILE ||
!(cf = read_file_to_str(fname,0))) {
@ -2543,8 +2551,6 @@ options_init_from_torrc(int argc, char **argv)
if (set_options(newoptions))
goto err; /* frees and replaces old options */
tor_free(torrc_fname);
torrc_fname = fname;
return 0;
err:
tor_free(fname);