summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2015-02-02 13:32:53 -0500
committerNick Mathewson <nickm@torproject.org>2015-02-02 13:32:53 -0500
commit79c7625e38893920a80451ba420ee45ccd67f79b (patch)
tree67f108afb87191ad78751f94a0c7c72549de75ea
parent69deab8b2a5f09577fa4f15190c3aac181f5b6af (diff)
parent1ebed7cc7758fdfc3786ef9c1edfa4388f43e8e2 (diff)
downloadtor-79c7625e38893920a80451ba420ee45ccd67f79b.tar.gz
tor-79c7625e38893920a80451ba420ee45ccd67f79b.zip
Merge branch 'feature13864_squashed'
-rw-r--r--changes/feature138655
-rw-r--r--doc/tor.1.txt3
-rw-r--r--src/or/config.c25
3 files changed, 31 insertions, 2 deletions
diff --git a/changes/feature13865 b/changes/feature13865
new file mode 100644
index 0000000000..48291b4248
--- /dev/null
+++ b/changes/feature13865
@@ -0,0 +1,5 @@
+ o Minor features:
+ - Implement '-f -' CLI suboption to allow torrc to be read
+ from standard input, thus not requiring to store torrc in file
+ system. Implements feature 13865.
+
diff --git a/doc/tor.1.txt b/doc/tor.1.txt
index 99ab8cb0b3..1349bf35b5 100644
--- a/doc/tor.1.txt
+++ b/doc/tor.1.txt
@@ -42,7 +42,8 @@ COMMAND-LINE OPTIONS
[[opt-f]] **-f** __FILE__::
Specify a new configuration file to contain further Tor configuration
- options. (Default: @CONFDIR@/torrc, or $HOME/.torrc if that file is not
+ options OR pass *-* to make Tor read its configuration from standard
+ input. (Default: @CONFDIR@/torrc, or $HOME/.torrc if that file is not
found)
[[opt-allow-missing-torrc]] **--allow-missing-torrc**::
diff --git a/src/or/config.c b/src/or/config.c
index a0d1346afb..ae33a07996 100644
--- a/src/or/config.c
+++ b/src/or/config.c
@@ -4201,6 +4201,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.
*
@@ -4341,7 +4352,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("");