Commit adcd1d8b authored by Nick Mathewson's avatar Nick Mathewson 🦀
Browse files

Merge branch 'maint-0.3.4'

parents c03958db cf8c3abf
Loading
Loading
Loading
Loading

changes/bug26523

0 → 100644
+5 −0
Original line number Diff line number Diff line
  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".
+9 −4
Original line number Diff line number Diff line
@@ -4499,8 +4499,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;
@@ -4523,11 +4525,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);
@@ -4542,6 +4545,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;