[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

[or-cvs] r15435: backport r15366, bump to 0.2.0.28-rc-dev (in tor/branches/tor-0_2_0-patches: . contrib doc src/or src/win32)



Author: arma
Date: 2008-06-23 14:52:12 -0400 (Mon, 23 Jun 2008)
New Revision: 15435

Modified:
   tor/branches/tor-0_2_0-patches/ChangeLog
   tor/branches/tor-0_2_0-patches/configure.in
   tor/branches/tor-0_2_0-patches/contrib/tor-mingw.nsi.in
   tor/branches/tor-0_2_0-patches/doc/TODO.020
   tor/branches/tor-0_2_0-patches/src/or/circuitbuild.c
   tor/branches/tor-0_2_0-patches/src/or/circuituse.c
   tor/branches/tor-0_2_0-patches/src/or/connection_edge.c
   tor/branches/tor-0_2_0-patches/src/or/or.h
   tor/branches/tor-0_2_0-patches/src/win32/orconfig.h
Log:
backport r15366, bump to 0.2.0.28-rc-dev


Modified: tor/branches/tor-0_2_0-patches/ChangeLog
===================================================================
--- tor/branches/tor-0_2_0-patches/ChangeLog	2008-06-23 18:51:12 UTC (rev 15434)
+++ tor/branches/tor-0_2_0-patches/ChangeLog	2008-06-23 18:52:12 UTC (rev 15435)
@@ -1,4 +1,15 @@
-Changes in version 0.2.0.29 - 2008-06-13
+Changes in version 0.2.0.29 - 2008-06-xx
+  o Major bugfixes:
+    - If you have more than one bridge but don't know their keys,
+      you would only learn a request for the descriptor of the first one
+      on your list. (Tor considered launching requests for the others, but
+      found that it already had a connection on the way for $0000...0000
+      so it didn't open another.)
+    - If you have more than one bridge but don't know their keys, and the
+      connection to one of the bridges failed, you would cancel all
+      pending bridge connections. (After all, they all have the same
+      digest.)
+
   o Minor bugfixes:
     - Fix a macro/CPP interactions that was confusing some compilers:
       some GCCs don't like #if/#endif pairs inside macro arguments.

Modified: tor/branches/tor-0_2_0-patches/configure.in
===================================================================
--- tor/branches/tor-0_2_0-patches/configure.in	2008-06-23 18:51:12 UTC (rev 15434)
+++ tor/branches/tor-0_2_0-patches/configure.in	2008-06-23 18:52:12 UTC (rev 15435)
@@ -5,7 +5,7 @@
 dnl See LICENSE for licensing information
 
 AC_INIT
-AM_INIT_AUTOMAKE(tor, 0.2.0.28-rc)
+AM_INIT_AUTOMAKE(tor, 0.2.0.28-rc-dev)
 AM_CONFIG_HEADER(orconfig.h)
 
 AC_CANONICAL_HOST

Modified: tor/branches/tor-0_2_0-patches/contrib/tor-mingw.nsi.in
===================================================================
--- tor/branches/tor-0_2_0-patches/contrib/tor-mingw.nsi.in	2008-06-23 18:51:12 UTC (rev 15434)
+++ tor/branches/tor-0_2_0-patches/contrib/tor-mingw.nsi.in	2008-06-23 18:52:12 UTC (rev 15435)
@@ -9,7 +9,7 @@
 !include "FileFunc.nsh"
 !insertmacro GetParameters
   
-!define VERSION "0.2.0.28-rc"
+!define VERSION "0.2.0.28-rc-dev"
 !define INSTALLER "tor-${VERSION}-win32.exe"
 !define WEBSITE "https://www.torproject.org/";
 !define LICENSE "LICENSE"

Modified: tor/branches/tor-0_2_0-patches/doc/TODO.020
===================================================================
--- tor/branches/tor-0_2_0-patches/doc/TODO.020	2008-06-23 18:51:12 UTC (rev 15434)
+++ tor/branches/tor-0_2_0-patches/doc/TODO.020	2008-06-23 18:52:12 UTC (rev 15435)
@@ -5,7 +5,7 @@
 Items before a stable 0.2.0.x bundle:
   - Tor items:
 R   - releasenotes
-    - backport r15366
+    o backport r15366
   - Vidalia items:
 E   d address arma's Linux 100% cpu bug
   - Torbutton items:

Modified: tor/branches/tor-0_2_0-patches/src/or/circuitbuild.c
===================================================================
--- tor/branches/tor-0_2_0-patches/src/or/circuitbuild.c	2008-06-23 18:51:12 UTC (rev 15434)
+++ tor/branches/tor-0_2_0-patches/src/or/circuitbuild.c	2008-06-23 18:52:12 UTC (rev 15435)
@@ -412,8 +412,9 @@
   smartlist_t *pending_circs;
   int err_reason = 0;
 
-  log_debug(LD_CIRC,"or_conn to %s, status=%d",
-            or_conn->nickname ? or_conn->nickname : "NULL", status);
+  log_debug(LD_CIRC,"or_conn to %s/%s, status=%d",
+            or_conn->nickname ? or_conn->nickname : "NULL",
+            or_conn->_base.address, status);
 
   pending_circs = smartlist_create();
   circuit_get_all_pending_on_or_conn(pending_circs, or_conn);

Modified: tor/branches/tor-0_2_0-patches/src/or/circuituse.c
===================================================================
--- tor/branches/tor-0_2_0-patches/src/or/circuituse.c	2008-06-23 18:51:12 UTC (rev 15434)
+++ tor/branches/tor-0_2_0-patches/src/or/circuituse.c	2008-06-23 18:52:12 UTC (rev 15435)
@@ -95,10 +95,19 @@
       tor_assert(conn->chosen_exit_name);
       if (build_state->chosen_exit) {
         char digest[DIGEST_LEN];
-        if (hexdigest_to_digest(conn->chosen_exit_name, digest) < 0 ||
-            memcmp(digest, build_state->chosen_exit->identity_digest,
-                   DIGEST_LEN))
+        if (hexdigest_to_digest(conn->chosen_exit_name, digest) < 0)
+          return 0; /* broken digest, we don't want it */
+        if (memcmp(digest, build_state->chosen_exit->identity_digest,
+                          DIGEST_LEN))
           return 0; /* this is a circuit to somewhere else */
+        if (tor_digest_is_zero(digest)) {
+          /* we don't know the digest; have to compare addr:port */
+          struct in_addr in;
+          if (!tor_inet_aton(conn->socks_request->address, &in) ||
+              build_state->chosen_exit->addr != ntohl(in.s_addr) ||
+              build_state->chosen_exit->port != conn->socks_request->port)
+            return 0;
+        }
       }
     } else {
       if (conn->want_onehop) {
@@ -748,7 +757,7 @@
     }
     /* if there are any one-hop streams waiting on this circuit, fail
      * them now so they can retry elsewhere. */
-    connection_ap_fail_onehop(circ->_base.n_conn_id_digest);
+    connection_ap_fail_onehop(circ->_base.n_conn_id_digest, circ->build_state);
   }
 
   switch (circ->_base.purpose) {

Modified: tor/branches/tor-0_2_0-patches/src/or/connection_edge.c
===================================================================
--- tor/branches/tor-0_2_0-patches/src/or/connection_edge.c	2008-06-23 18:51:12 UTC (rev 15434)
+++ tor/branches/tor-0_2_0-patches/src/or/connection_edge.c	2008-06-23 18:52:12 UTC (rev 15435)
@@ -460,7 +460,8 @@
 /** Tell any AP streams that are waiting for a onehop tunnel to
  * <b>failed_digest</b> that they are going to fail. */
 void
-connection_ap_fail_onehop(const char *failed_digest)
+connection_ap_fail_onehop(const char *failed_digest,
+                          cpath_build_state_t *build_state)
 {
   edge_connection_t *edge_conn;
   char digest[DIGEST_LEN];
@@ -474,12 +475,23 @@
     edge_conn = TO_EDGE_CONN(conn);
     if (!edge_conn->want_onehop)
       continue;
-    if (!hexdigest_to_digest(edge_conn->chosen_exit_name, digest) &&
-        !memcmp(digest, failed_digest, DIGEST_LEN)) {
-      log_info(LD_APP, "Closing onehop stream to '%s' because the OR conn "
-                       "just failed.", edge_conn->chosen_exit_name);
-      connection_mark_unattached_ap(edge_conn, END_STREAM_REASON_TIMEOUT);
+    if (hexdigest_to_digest(edge_conn->chosen_exit_name, digest) < 0 ||
+        memcmp(digest, failed_digest, DIGEST_LEN))
+      continue;
+    if (tor_digest_is_zero(digest)) {
+      /* we don't know the digest; have to compare addr:port */
+      struct in_addr in;
+      if (!build_state || !build_state->chosen_exit ||
+          !edge_conn->socks_request || !edge_conn->socks_request->address ||
+          !tor_inet_aton(edge_conn->socks_request->address, &in) ||
+          build_state->chosen_exit->addr != ntohl(in.s_addr) ||
+          build_state->chosen_exit->port != edge_conn->socks_request->port)
+        continue;
     }
+    log_info(LD_APP, "Closing onehop stream to '%s/%s' because the OR conn "
+                     "just failed.", edge_conn->chosen_exit_name,
+                     edge_conn->socks_request->address);
+    connection_mark_unattached_ap(edge_conn, END_STREAM_REASON_TIMEOUT);
   });
 }
 

Modified: tor/branches/tor-0_2_0-patches/src/or/or.h
===================================================================
--- tor/branches/tor-0_2_0-patches/src/or/or.h	2008-06-23 18:51:12 UTC (rev 15434)
+++ tor/branches/tor-0_2_0-patches/src/or/or.h	2008-06-23 18:52:12 UTC (rev 15435)
@@ -2812,7 +2812,8 @@
 int connection_ap_can_use_exit(edge_connection_t *conn, routerinfo_t *exit);
 void connection_ap_expire_beginning(void);
 void connection_ap_attach_pending(void);
-void connection_ap_fail_onehop(const char *failed_digest);
+void connection_ap_fail_onehop(const char *failed_digest,
+                               cpath_build_state_t *build_state);
 void circuit_discard_optional_exit_enclaves(extend_info_t *info);
 int connection_ap_detach_retriable(edge_connection_t *conn,
                                    origin_circuit_t *circ,

Modified: tor/branches/tor-0_2_0-patches/src/win32/orconfig.h
===================================================================
--- tor/branches/tor-0_2_0-patches/src/win32/orconfig.h	2008-06-23 18:51:12 UTC (rev 15434)
+++ tor/branches/tor-0_2_0-patches/src/win32/orconfig.h	2008-06-23 18:52:12 UTC (rev 15435)
@@ -227,6 +227,6 @@
 #define USING_TWOS_COMPLEMENT
 
 /* Version number of package */
-#define VERSION "0.2.0.28-rc"
+#define VERSION "0.2.0.28-rc-dev"