]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Controller: Always send ADDRMAP event after RESOLVE command (#8596 part 1/2)
authorDesoxy <desoxy@fastmail.fm>
Wed, 3 Apr 2013 16:50:27 +0000 (18:50 +0200)
committerDesoxy <desoxy@fastmail.fm>
Wed, 3 Apr 2013 16:50:27 +0000 (18:50 +0200)
Since 7536c40 only DNS results for real SOCKS requests are added to the cache,
but not DNS results for DNSPort queries or control connection RESOLVE queries.
Only cache additions would trigger ADDRMAP events on successful resolve.

Change it so that DNS results received after a RESOLVE command also generate
ADDRMAP events.

src/or/connection_edge.c

index 5075c474a35b2ee482bd83f9f9fa937a9dddfbe6..05197088100d6a977ae89da9d9fe462e5a2fcb09 100644 (file)
@@ -2040,11 +2040,8 @@ tell_controller_about_resolved_result(entry_connection_t *conn,
                                       int ttl,
                                       time_t expires)
 {
-
-  if (ttl >= 0 && (answer_type == RESOLVED_TYPE_IPV4 ||
-                   answer_type == RESOLVED_TYPE_HOSTNAME)) {
-    return; /* we already told the controller. */
-  } else if (answer_type == RESOLVED_TYPE_IPV4 && answer_len >= 4) {
+  expires = time(NULL) + ttl;
+  if (answer_type == RESOLVED_TYPE_IPV4 && answer_len >= 4) {
     char *cp = tor_dup_ip(ntohl(get_uint32(answer)));
     control_event_address_mapped(conn->socks_request->address,
                                  cp, expires, NULL);
@@ -2116,8 +2113,9 @@ connection_ap_handshake_socks_resolved(entry_connection_t *conn,
       conn->socks_request->has_finished = 1;
       return;
     } else {
-      /* This must be a request from the controller. We already sent
-       * a mapaddress if there's a ttl. */
+      /* This must be a request from the controller. Since answers to those
+       * requests are not cached, they do not generate an ADDRMAP event on
+       * their own. */
       tell_controller_about_resolved_result(conn, answer_type, answer_len,
                                             (char*)answer, ttl, expires);
       conn->socks_request->has_finished = 1;