diff options
author | George Kadianakis <desnacked@riseup.net> | 2013-06-12 17:12:39 +0300 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2013-07-18 08:45:03 -0400 |
commit | 1ee3a0cf4440f34c024ff61a320e0b16553a3558 (patch) | |
tree | 9f116c2e14ecf8b5a1ee2c0fa20d87ba7d366fef /src/or/transports.c | |
parent | 1a0cf08841904940ed46b2fcfd79cf65c65a1a6c (diff) | |
download | tor-1ee3a0cf4440f34c024ff61a320e0b16553a3558.tar.gz tor-1ee3a0cf4440f34c024ff61a320e0b16553a3558.zip |
Place the options in the environment after processing them properly.
Diffstat (limited to 'src/or/transports.c')
-rw-r--r-- | src/or/transports.c | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/src/or/transports.c b/src/or/transports.c index 6b6882ae73..2b129cb0ff 100644 --- a/src/or/transports.c +++ b/src/or/transports.c @@ -1100,6 +1100,48 @@ parse_cmethod_line(const char *line, managed_proxy_t *mp) return r; } +/** Return a newly allocated string that tor should place in + * TOR_PT_SERVER_TRANSPORT_OPTIONS while configuring the server + * manged proxy in <b>mp</b>. Return NULL if no such options are found. */ +static char * +get_transport_options_for_server_proxy(const managed_proxy_t *mp) +{ + char *options_string = NULL; + smartlist_t *string_sl = smartlist_new(); + + tor_assert(mp->is_server); + + /** Loop over the transports of the proxy. If we have options for + any of them, format them appropriately and place them in our + smartlist. Finally, join our smartlist to get the final + string. */ + SMARTLIST_FOREACH_BEGIN(mp->transports_to_launch, const char *, transport) { + smartlist_t *options_tmp_sl = NULL; + options_tmp_sl = get_options_for_server_transport(transport); + if (!options_tmp_sl) + continue; + + /** Loop over the options of this transport, escape them, and + place them in the smartlist. */ + SMARTLIST_FOREACH_BEGIN(options_tmp_sl, const char *, options) { + char *escaped_opts = tor_escape_str_for_pt_args(options, ":;\\"); + smartlist_add_asprintf(string_sl, "%s:%s", + transport, escaped_opts); + tor_free(escaped_opts); + } SMARTLIST_FOREACH_END(options); + + SMARTLIST_FOREACH(options_tmp_sl, char *, c, tor_free(c)); + smartlist_free(options_tmp_sl); + } SMARTLIST_FOREACH_END(transport); + + options_string = smartlist_join_strings(string_sl, ";", 0, NULL); + + SMARTLIST_FOREACH(string_sl, char *, t, tor_free(t)); + smartlist_free(string_sl); + + return options_string; +} + /** Return the string that tor should place in TOR_PT_SERVER_BINDADDR * while configuring the server managed proxy in <b>mp</b>. The * string is stored in the heap, and it's the the responsibility of @@ -1181,6 +1223,14 @@ create_managed_proxy_environment(const managed_proxy_t *mp) tor_free(bindaddr_tmp); } + { + char *server_transport_options = + get_transport_options_for_server_proxy(mp); + smartlist_add_asprintf(envs, "TOR_PT_SERVER_TRANSPORT_OPTIONS=%s", + server_transport_options); + tor_free(server_transport_options); + } + /* XXX024 Remove the '=' here once versions of obfsproxy which * assert that this env var exists are sufficiently dead. * |