]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Clip DNS TTL values once in event callback
authorRasmus Dahlberg <rasmus@mullvad.net>
Wed, 12 Oct 2022 18:29:11 +0000 (20:29 +0200)
committerDavid Goulet <dgoulet@torproject.org>
Mon, 28 Nov 2022 15:25:04 +0000 (10:25 -0500)
This change ensures that other parts of the code base always operate on
the same clipped TTL values, notably without being aware of clipping.

src/core/or/connection_edge.c
src/feature/relay/dns.c
src/test/test_cell_formats.c

index d9067d5c29f9cffb5a7427ddf91b6cb7023fa4d0..b96f4eb211cb6bd4b7085719adc86aee03101e60 100644 (file)
@@ -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);
index 71c6f56fb16afbd95c0cc47271677243998ef33c..b15e5f30c72df7db4c0fa8b136f9a2ed2ae461dd 100644 (file)
@@ -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_);
 }
index f9ff101c98c3f299de62f61c6ec57c4d4e32ab3e..cae25d00ec01722ff5b73d1fe136f7e8ed52cfb7 100644 (file)
@@ -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));