Merge remote-tracking branch 'dgoulet/bug26523_033_01' into maint-0.3.3

This commit is contained in:
Nick Mathewson 2018-07-01 10:22:18 -04:00
commit 9aeef05f8f
2 changed files with 14 additions and 4 deletions

5
changes/bug26523 Normal file
View File

@ -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".

View File

@ -4342,8 +4342,10 @@ handle_control_hspost(control_connection_t *conn,
smartlist_t *args = smartlist_new(); smartlist_t *args = smartlist_new();
/* If any SERVER= options were specified, try parse the options line */ /* If any SERVER= or HSADDRESS= options were specified, try to parse
if (!strcasecmpstart(argline, opt_server)) { * the options line. */
if (!strcasecmpstart(argline, opt_server) ||
!strcasecmpstart(argline, opt_hsaddress)) {
/* encoded_desc begins after a newline character */ /* encoded_desc begins after a newline character */
cp = cp + 1; cp = cp + 1;
encoded_desc = cp; encoded_desc = cp;
@ -4366,11 +4368,12 @@ handle_control_hspost(control_connection_t *conn,
hs_dirs = smartlist_new(); hs_dirs = smartlist_new();
smartlist_add(hs_dirs, node->rs); smartlist_add(hs_dirs, node->rs);
} else if (!strcasecmpstart(arg, opt_hsaddress)) { } 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"); connection_printf_to_buf(conn, "512 Malformed onion address\r\n");
goto done; goto done;
} }
onion_address = arg; onion_address = address;
} else { } else {
connection_printf_to_buf(conn, "512 Unexpected argument \"%s\"\r\n", connection_printf_to_buf(conn, "512 Unexpected argument \"%s\"\r\n",
arg); arg);
@ -4385,6 +4388,8 @@ handle_control_hspost(control_connection_t *conn,
read_escaped_data(encoded_desc, encoded_desc_len, &desc_str); read_escaped_data(encoded_desc, encoded_desc_len, &desc_str);
if (hs_control_hspost_command(desc_str, onion_address, hs_dirs) < 0) { if (hs_control_hspost_command(desc_str, onion_address, hs_dirs) < 0) {
connection_printf_to_buf(conn, "554 Invalid descriptor\r\n"); connection_printf_to_buf(conn, "554 Invalid descriptor\r\n");
} else {
send_control_done(conn);
} }
tor_free(desc_str); tor_free(desc_str);
goto done; goto done;