diff options
author | rl1987 <rl1987@sdf.lonestar.org> | 2015-01-25 16:42:42 +0200 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2015-02-02 13:31:56 -0500 |
commit | fe328d192e76324ab788436318000ed1f20f8786 (patch) | |
tree | 9f552016512677082f5c9d57b067e064e13edb87 /src | |
parent | 8f9fb3e8fae31e3c14811911f23537cfecc6b780 (diff) | |
download | tor-fe328d192e76324ab788436318000ed1f20f8786.tar.gz tor-fe328d192e76324ab788436318000ed1f20f8786.zip |
Allow reading torrc from stdin.
Diffstat (limited to 'src')
-rw-r--r-- | src/or/config.c | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/src/or/config.c b/src/or/config.c index 568baec703..3ff60e5fc5 100644 --- a/src/or/config.c +++ b/src/or/config.c @@ -4204,6 +4204,17 @@ find_torrc_filename(config_line_t *cmd_arg, return fname; } +/** Read the torrc from standard input and return it as a string. + * Upon failure, return NULL. + */ +static char * +load_torrc_from_stdin(config_line_t *cmd_arg) +{ + size_t sz_out; + + return read_file_to_str_until_eof(STDIN_FILENO,SIZE_MAX,&sz_out); +} + /** Load a configuration file from disk, setting torrc_fname or * torrc_defaults_fname if successful. * @@ -4344,7 +4355,19 @@ options_init_from_torrc(int argc, char **argv) cf = tor_strdup(""); } else { cf_defaults = load_torrc_from_disk(cmdline_only_options, 1); - cf = load_torrc_from_disk(cmdline_only_options, 0); + + const config_line_t *f_line = config_line_find(cmdline_only_options, + "-f"); + + const int read_torrc_from_stdin = + (f_line != NULL && strcmp(f_line->value, "-") == 0); + + if (read_torrc_from_stdin) { + cf = load_torrc_from_stdin(cmdline_only_options); + } else { + cf = load_torrc_from_disk(cmdline_only_options, 0); + } + if (!cf) { if (config_line_find(cmdline_only_options, "--allow-missing-torrc")) { cf = tor_strdup(""); |