[tor-commits] [tor/release-0.2.2] Fix a bug introduced by purging rend_cache on NEWNYM

nickm at torproject.org nickm at torproject.org
Fri Apr 29 02:10:05 UTC 2011


commit f1cf9bd74d225e90ca123eb664c1c5538eedaa03
Author: Robert Ransom <rransom.8774 at gmail.com>
Date:   Mon Apr 25 06:38:35 2011 -0700

    Fix a bug introduced by purging rend_cache on NEWNYM
    
    If the user sent a SIGNAL NEWNYM command after we fetched a rendezvous
    descriptor, while we were building the introduction-point circuit, we
    would give up entirely on trying to connect to the hidden service.
    
    Original patch by rransom slightly edited to go into 0.2.1
---
 src/or/rendclient.c |   25 +++++++++++++++++++++----
 1 files changed, 21 insertions(+), 4 deletions(-)

diff --git a/src/or/rendclient.c b/src/or/rendclient.c
index ca846d9..fb95efb 100644
--- a/src/or/rendclient.c
+++ b/src/or/rendclient.c
@@ -74,10 +74,27 @@ rend_client_send_introduction(origin_circuit_t *introcirc,
 
   if (rend_cache_lookup_entry(introcirc->rend_data->onion_address, -1,
                               &entry) < 1) {
-    log_warn(LD_REND,
-             "query %s didn't have valid rend desc in cache. Failing.",
-             escaped_safe_str(introcirc->rend_data->onion_address));
-    goto perm_err;
+    log_info(LD_REND,
+             "query %s didn't have valid rend desc in cache. "
+             "Refetching descriptor.",
+             safe_str(introcirc->rend_data->onion_address));
+    /* Fetch both v0 and v2 rend descriptors in parallel. Use whichever
+     * arrives first. Exception: When using client authorization, only
+     * fetch v2 descriptors.*/
+    rend_client_refetch_v2_renddesc(introcirc->rend_data);
+    if (introcirc->rend_data->auth_type == REND_NO_AUTH)
+      rend_client_refetch_renddesc(introcirc->rend_data->onion_address);
+    {
+      connection_t *conn;
+
+      while ((conn = connection_get_by_type_state_rendquery(CONN_TYPE_AP,
+                       AP_CONN_STATE_CIRCUIT_WAIT,
+                       introcirc->rend_data->onion_address, -1))) {
+        conn->state = AP_CONN_STATE_RENDDESC_WAIT;
+      }
+    }
+
+    return -1;
   }
 
   /* first 20 bytes of payload are the hash of Bob's pk */





More information about the tor-commits mailing list