Commit be7afe65 authored by Rasmus Dahlberg's avatar Rasmus Dahlberg Committed by David Goulet
Browse files

Clip DNS TTL values once in event callback

This change ensures that other parts of the code base always operate on
the same clipped TTL values, notably without being aware of clipping.
parent ee38514c
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -546,7 +546,7 @@ connection_edge_end(edge_connection_t *conn, uint8_t reason)
      memcpy(payload+1, tor_addr_to_in6_addr8(&conn->base_.addr), 16);
      addrlen = 16;
    }
    set_uint32(payload+1+addrlen, htonl(clip_dns_ttl(conn->address_ttl)));
    set_uint32(payload+1+addrlen, htonl(conn->address_ttl));
    payload_len += 4+addrlen;
  }

@@ -911,7 +911,7 @@ connected_cell_format_payload(uint8_t *payload_out,
    return -1;
  }

  set_uint32(payload_out + connected_payload_len, htonl(clip_dns_ttl(ttl)));
  set_uint32(payload_out + connected_payload_len, htonl(ttl));
  connected_payload_len += 4;

  tor_assert(connected_payload_len <= MAX_CONNECTED_CELL_PAYLOAD_LEN);
+4 −4
Original line number Diff line number Diff line
@@ -496,7 +496,7 @@ send_resolved_cell,(edge_connection_t *conn, uint8_t answer_type,
  uint32_t ttl;

  buf[0] = answer_type;
  ttl = clip_dns_ttl(conn->address_ttl);
  ttl = conn->address_ttl;

  switch (answer_type)
    {
@@ -568,7 +568,7 @@ send_resolved_hostname_cell,(edge_connection_t *conn,
  size_t namelen = strlen(hostname);

  tor_assert(namelen < 256);
  ttl = clip_dns_ttl(conn->address_ttl);
  ttl = conn->address_ttl;

  buf[0] = RESOLVED_TYPE_HOSTNAME;
  buf[1] = (uint8_t)namelen;
@@ -1294,7 +1294,7 @@ make_pending_resolve_cached(cached_resolve_t *resolve)
        resolve->ttl_hostname < ttl)
      ttl = resolve->ttl_hostname;

    set_expiry(new_resolve, time(NULL) + clip_dns_ttl(ttl));
    set_expiry(new_resolve, time(NULL) + ttl);
  }

  assert_cache_ok();
@@ -1637,7 +1637,7 @@ evdns_callback(int result, char type, int count, int ttl, void *addresses,
  }
  if (result != DNS_ERR_SHUTDOWN)
    dns_found_answer(string_address, orig_query_type,
                     result, &addr, hostname, ttl);
                     result, &addr, hostname, clip_dns_ttl(ttl));

  tor_free(arg_);
}
+2 −2
Original line number Diff line number Diff line
@@ -354,7 +354,7 @@ test_cfmt_connected_cells(void *arg)
  rh.length = connected_cell_format_payload(cell.payload+RELAY_HEADER_SIZE,
                                            &addr, 1024);
  tt_int_op(rh.length, OP_EQ, 8);
  test_memeq_hex(cell.payload+RELAY_HEADER_SIZE, "1e28323c" "00000e10");
  test_memeq_hex(cell.payload+RELAY_HEADER_SIZE, "1e28323c" "00000400");

  /* Try parsing it. */
  tor_addr_make_unspec(&addr);
@@ -362,7 +362,7 @@ test_cfmt_connected_cells(void *arg)
  tt_int_op(r, OP_EQ, 0);
  tt_int_op(tor_addr_family(&addr), OP_EQ, AF_INET);
  tt_str_op(fmt_addr(&addr), OP_EQ, "30.40.50.60");
  tt_int_op(ttl, OP_EQ, 3600); /* not 1024, since we clipped to 3600 */
  tt_int_op(ttl, OP_EQ, 1024);

  /* Try an IPv6 address */
  memset(&rh, 0, sizeof(rh));