diff options
author | Nick Mathewson <nickm@torproject.org> | 2018-07-01 10:22:21 -0400 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2018-07-01 10:22:21 -0400 |
commit | cf8c3abff179b4550404bb9978a9d2b5ad18fc34 (patch) | |
tree | 1133dc61331490a8267a019cb4485e51b891f456 /src/or | |
parent | e042727cf02fbeb0dd193f5faa60f7caf1f19aea (diff) | |
parent | 9aeef05f8f56f16c9ff7e147ca313cc7bab88eda (diff) | |
download | tor-cf8c3abff179b4550404bb9978a9d2b5ad18fc34.tar.gz tor-cf8c3abff179b4550404bb9978a9d2b5ad18fc34.zip |
Merge branch 'maint-0.3.3' into maint-0.3.4
Diffstat (limited to 'src/or')
-rw-r--r-- | src/or/control.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/src/or/control.c b/src/or/control.c index bb68925f8c..09cf833e37 100644 --- a/src/or/control.c +++ b/src/or/control.c @@ -4449,8 +4449,10 @@ handle_control_hspost(control_connection_t *conn, smartlist_t *args = smartlist_new(); - /* If any SERVER= options were specified, try parse the options line */ - if (!strcasecmpstart(argline, opt_server)) { + /* If any SERVER= or HSADDRESS= options were specified, try to parse + * the options line. */ + if (!strcasecmpstart(argline, opt_server) || + !strcasecmpstart(argline, opt_hsaddress)) { /* encoded_desc begins after a newline character */ cp = cp + 1; encoded_desc = cp; @@ -4473,11 +4475,12 @@ handle_control_hspost(control_connection_t *conn, hs_dirs = smartlist_new(); smartlist_add(hs_dirs, node->rs); } else if (!strcasecmpstart(arg, opt_hsaddress)) { - if (!hs_address_is_valid(arg)) { + const char *address = arg + strlen(opt_hsaddress); + if (!hs_address_is_valid(address)) { connection_printf_to_buf(conn, "512 Malformed onion address\r\n"); goto done; } - onion_address = arg; + onion_address = address; } else { connection_printf_to_buf(conn, "512 Unexpected argument \"%s\"\r\n", arg); @@ -4492,6 +4495,8 @@ handle_control_hspost(control_connection_t *conn, read_escaped_data(encoded_desc, encoded_desc_len, &desc_str); if (hs_control_hspost_command(desc_str, onion_address, hs_dirs) < 0) { connection_printf_to_buf(conn, "554 Invalid descriptor\r\n"); + } else { + send_control_done(conn); } tor_free(desc_str); goto done; |