Commit f748a497 authored by David Goulet's avatar David Goulet 🐼
Browse files

Merge branch 'ticket40476_045_01' into ticket40476_046_01

parents ce5b240c db297a17
Loading
Loading
Loading
Loading

changes/ticket40476

0 → 100644
+8 −0
Original line number Diff line number Diff line
  o Major feature (onion service v2):
    - Tor does NOT allow anymore to create v2 services, to connect as a client
      to a v2 service and for a relay to be a v2 HSDir or introduction point.
      This effectively disable onion service version 2 tor wide. Closes 40476.
    - The control port command HSFETCH and HSPOST don't allow version 2 as well.
      It is also not possible to create a v2 service with ADD_ONION.
    - See https://blog.torproject.org/v2-deprecation-timeline for details on
      how to transition from v2 to v3.
+1 −27
Original line number Diff line number Diff line
@@ -1612,23 +1612,6 @@ consider_plaintext_ports(entry_connection_t *conn, uint16_t port)
  return 0;
}

/** Return true iff <b>query</b> is a syntactically valid service ID (as
 * generated by rend_get_service_id).  */
static int
rend_valid_v2_service_id(const char *query)
{
  /** Length of 'y' portion of 'y.onion' URL. */
#define REND_SERVICE_ID_LEN_BASE32 16

  if (strlen(query) != REND_SERVICE_ID_LEN_BASE32)
    return 0;

  if (strspn(query, BASE32_CHARS) != REND_SERVICE_ID_LEN_BASE32)
    return 0;

  return 1;
}

/** Parse the given hostname in address. Returns true if the parsing was
 * successful and type_out contains the type of the hostname. Else, false is
 * returned which means it was not recognized and type_out is set to
@@ -1692,14 +1675,6 @@ parse_extended_hostname(char *address, hostname_type_t *type_out)
  if (q != address) {
    memmove(address, q, strlen(q) + 1 /* also get \0 */);
  }
  /* v2 onion address check. */
  if (strlen(query) == REND_SERVICE_ID_LEN_BASE32) {
    *type_out = ONION_V2_HOSTNAME;
    if (rend_valid_v2_service_id(query)) {
      goto success;
    }
    goto failed;
  }

  /* v3 onion address check. */
  if (strlen(query) == HS_SERVICE_ADDR_LEN_BASE32) {
@@ -1719,8 +1694,7 @@ parse_extended_hostname(char *address, hostname_type_t *type_out)
 failed:
  /* otherwise, return to previous state and return 0 */
  *s = '.';
  const bool is_onion = (*type_out == ONION_V2_HOSTNAME) ||
    (*type_out == ONION_V3_HOSTNAME);
  const bool is_onion = (*type_out == ONION_V3_HOSTNAME);
  log_warn(LD_APP, "Invalid %shostname %s; rejecting",
           is_onion ? "onion " : "",
           safe_str_client(address));
+2 −0
Original line number Diff line number Diff line
@@ -1569,6 +1569,8 @@ directory_handle_command_post,(dir_connection_t *conn, const char *headers,
  char *url = NULL;
  const or_options_t *options = get_options();

  (void) body_len;

  log_debug(LD_DIRSERV,"Received POST command.");

  conn->base_.state = DIR_CONN_STATE_SERVER_WRITING;
+6 −2
Original line number Diff line number Diff line
@@ -159,8 +159,12 @@ static bool
check_value_oob(int i, const char *name, int low, int high)
{
  if (i < low || i > high) {
    if (low == high) {
      log_warn(LD_CONFIG, "%s must be %d, not %d.", name, low, i);
    } else {
      log_warn(LD_CONFIG, "%s must be between %d and %d, not %d.",
               name, low, high, i);
    }
    return true;
  }
  return false;
+4 −6
Original line number Diff line number Diff line
@@ -808,13 +808,11 @@ test_parse_extended_hostname(void *arg)
  tt_assert(parse_extended_hostname(address4, &type));
  tt_int_op(type, OP_EQ, NORMAL_HOSTNAME);

  tt_assert(parse_extended_hostname(address5, &type));
  tt_int_op(type, OP_EQ, ONION_V2_HOSTNAME);
  tt_str_op(address5, OP_EQ, "abcdefghijklmnop");
  tt_assert(!parse_extended_hostname(address5, &type));
  tt_int_op(type, OP_EQ, BAD_HOSTNAME);

  tt_assert(parse_extended_hostname(address6, &type));
  tt_int_op(type, OP_EQ, ONION_V2_HOSTNAME);
  tt_str_op(address6, OP_EQ, "abcdefghijklmnop");
  tt_assert(!parse_extended_hostname(address6, &type));
  tt_int_op(type, OP_EQ, BAD_HOSTNAME);

  tt_assert(!parse_extended_hostname(address7, &type));
  tt_int_op(type, OP_EQ, BAD_HOSTNAME);
Loading