From 3f8a12a63a5a1d8b4d40451586377423c95bda09 Mon Sep 17 00:00:00 2001 From: David Goulet Date: Wed, 27 Jun 2018 12:20:39 -0400 Subject: [PATCH] control: Make HSPOST properly parse HSADDRESS= param For HSv3, the HSADDRESS= wasn't properly parsed for the HSPOST command. It now correctly use it and furthermore sends back a "200 OK" in case the command is successful for a v3 descriptor. Fixes #26523 Signed-off-by: David Goulet --- changes/bug26523 | 5 +++++ src/or/control.c | 13 +++++++++---- 2 files changed, 14 insertions(+), 4 deletions(-) create mode 100644 changes/bug26523 diff --git a/changes/bug26523 b/changes/bug26523 new file mode 100644 index 0000000000..a739d240e9 --- /dev/null +++ b/changes/bug26523 @@ -0,0 +1,5 @@ + o Minor bugfixes (hidden service, control port): + - The HSPOST command wasn't parsing properly the HSADDRESS= parameter and + thus not using it. It now handles it correctly. Fixes bug 26523; bugfix on + 0.3.3.1-alpha. Patch by "akwizgran". + diff --git a/src/or/control.c b/src/or/control.c index 028339f498..06360586ee 100644 --- a/src/or/control.c +++ b/src/or/control.c @@ -4342,8 +4342,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; @@ -4366,11 +4368,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); @@ -4385,6 +4388,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;