[tor-commits] [tor/master] Merge remote-tracking branch 'origin/maint-0.2.2'

nickm at torproject.org nickm at torproject.org
Thu Apr 7 16:19:40 UTC 2011


commit 67d88a7d6021e95a2d423a9f26811accd1da39b6
Merge: 07ab483 ba0cd80
Author: Nick Mathewson <nickm at torproject.org>
Date:   Thu Apr 7 12:17:20 2011 -0400

    Merge remote-tracking branch 'origin/maint-0.2.2'
    
    Conflicts:
    	src/common/address.c
    	src/common/compat_libevent.c
    	src/common/memarea.c
    	src/common/util.h
    	src/or/buffers.c
    	src/or/circuitbuild.c
    	src/or/circuituse.c
    	src/or/connection.c
    	src/or/directory.c
    	src/or/networkstatus.c
    	src/or/or.h
    	src/or/routerlist.c

 changes/bug539_removal        |    6 ++++++
 changes/connect_err_reporting |    6 ++++++
 changes/count_overflow        |    5 +++++
 changes/full_ap_circuits      |    6 ++++++
 changes/kill_ftime            |    7 +++++++
 changes/noroute               |    5 +++++
 src/common/address.c          |   20 ++++++++++++--------
 src/common/address.h          |    2 +-
 src/common/compat_libevent.c  |   21 ++++++---------------
 src/common/memarea.c          |    6 ++++--
 src/common/util.h             |   18 ------------------
 src/or/buffers.c              |    7 +++++++
 src/or/circuitbuild.c         |    7 ++++---
 src/or/circuitlist.c          |    3 +++
 src/or/circuituse.c           |    5 +++--
 src/or/config.c               |    6 +++---
 src/or/connection.c           |   37 +++++++++++++++++++++++--------------
 src/or/connection_edge.c      |   30 +++++++++++++++++++++---------
 src/or/connection_or.c        |    6 +++++-
 src/or/directory.c            |   38 +++++++++++++++-----------------------
 src/or/dirserv.c              |   11 +++++++----
 src/or/dns.c                  |    2 +-
 src/or/dnsserv.c              |    2 +-
 src/or/eventdns.c             |    2 +-
 src/or/geoip.c                |    5 +++--
 src/or/networkstatus.c        |   11 ++++++++---
 src/or/or.h                   |   12 +++++++++---
 src/or/reasons.c              |    8 +-------
 src/or/relay.c                |    2 ++
 src/or/rendclient.c           |    4 ++--
 src/or/rendcommon.c           |    2 +-
 src/or/rephist.c              |    2 +-
 src/or/routerlist.c           |   16 ++++++++--------
 src/or/routerparse.c          |    2 +-
 34 files changed, 188 insertions(+), 134 deletions(-)

diff --cc src/or/circuituse.c
index 5488eb7,cdf49e3..e58d5e0
--- a/src/or/circuituse.c
+++ b/src/or/circuituse.c
@@@ -1277,10 -1284,11 +1277,11 @@@ circuit_get_open_circ_or_launch(edge_co
          return -1;
        }
      } else {
-       /* XXXX022 Duplicates checks in connection_ap_handshake_attach_circuit */
+       /* XXXX023 Duplicates checks in connection_ap_handshake_attach_circuit:
+        * refactor into a single function? */
 -      routerinfo_t *router = router_get_by_nickname(conn->chosen_exit_name, 1);
 +      const node_t *node = node_get_by_nickname(conn->chosen_exit_name, 1);
        int opt = conn->chosen_exit_optional;
 -      if (router && !connection_ap_can_use_exit(conn, router, 0)) {
 +      if (node && !connection_ap_can_use_exit(conn, node, 0)) {
          log_fn(opt ? LOG_INFO : LOG_WARN, LD_APP,
                 "Requested exit point '%s' would refuse request. %s.",
                 conn->chosen_exit_name, opt ? "Trying others" : "Closing");
diff --cc src/or/connection.c
index 8b48b96,6e7bbd5..02ae7ee
--- a/src/or/connection.c
+++ b/src/or/connection.c
@@@ -2746,15 -2575,19 +2747,19 @@@ connection_read_to_buf(connection_t *co
      n_read = (size_t) result;
    }
  
-   if (n_read > 0) { /* change *max_to_read */
-     /*XXXX022 check for overflow*/
-     *max_to_read = (int)(at_most - n_read);
-   }
+   if (n_read > 0) {
 -    /* change *max_to_read */
++     /* change *max_to_read */
+     *max_to_read = at_most - n_read;
  
-   if (conn->type == CONN_TYPE_AP) {
-     edge_connection_t *edge_conn = TO_EDGE_CONN(conn);
-     /*XXXX022 check for overflow*/
-     edge_conn->n_read += (int)n_read;
+     /* Update edge_conn->n_read */
+     if (conn->type == CONN_TYPE_AP) {
+       edge_connection_t *edge_conn = TO_EDGE_CONN(conn);
+       /* Check for overflow: */
+       if (PREDICT_LIKELY(UINT32_MAX - edge_conn->n_read > n_read))
+         edge_conn->n_read += (int)n_read;
+       else
+         edge_conn->n_read = UINT32_MAX;
+     }
    }
  
    connection_buckets_decrement(conn, approx_time(), n_read, n_written);
@@@ -3145,10 -2786,13 +3150,14 @@@ connection_handle_write_impl(connection
      n_written = (size_t) result;
    }
  
-   if (conn->type == CONN_TYPE_AP) {
+   if (n_written && conn->type == CONN_TYPE_AP) {
      edge_connection_t *edge_conn = TO_EDGE_CONN(conn);
-     /*XXXX022 check for overflow.*/
-     edge_conn->n_written += (int)n_written;
++
+     /* Check for overflow: */
+     if (PREDICT_LIKELY(UINT32_MAX - edge_conn->n_written > n_written))
+       edge_conn->n_written += (int)n_written;
+     else
+       edge_conn->n_written = UINT32_MAX;
    }
  
    connection_buckets_decrement(conn, approx_time(), n_read, n_written);
diff --cc src/or/directory.c
index 3b1fb02,8f33a60..6bef581
--- a/src/or/directory.c
+++ b/src/or/directory.c
@@@ -1602,27 -1539,19 +1602,19 @@@ connection_dir_client_reached_eof(dir_c
    (void) skewed; /* skewed isn't used yet. */
  
    if (status_code == 503) {
-     if (body_len < 16) {
-       routerstatus_t *rs;
-       trusted_dir_server_t *ds;
-       log_info(LD_DIR,"Received http status code %d (%s) from server "
-                "'%s:%d'. I'll try again soon.",
-                status_code, escaped(reason), conn->_base.address,
-                conn->_base.port);
-       rs = router_get_mutable_consensus_status_by_id(conn->identity_digest);
-       if (rs)
-         rs->last_dir_503_at = now;
-       if ((ds = router_get_trusteddirserver_by_digest(conn->identity_digest)))
-         ds->fake_status.last_dir_503_at = now;
+     routerstatus_t *rs;
+     trusted_dir_server_t *ds;
+     log_info(LD_DIR,"Received http status code %d (%s) from server "
+              "'%s:%d'. I'll try again soon.",
+              status_code, escaped(reason), conn->_base.address,
+              conn->_base.port);
 -    if ((rs = router_get_consensus_status_by_id(conn->identity_digest)))
++    if ((rs = router_get_mutable_consensus_status_by_id(conn->identity_digest)))
+       rs->last_dir_503_at = now;
+     if ((ds = router_get_trusteddirserver_by_digest(conn->identity_digest)))
+       ds->fake_status.last_dir_503_at = now;
  
-       tor_free(body); tor_free(headers); tor_free(reason);
-       return -1;
-     }
-     /* XXXX022 Remove this once every server with bug 539 is obsolete. */
-     log_info(LD_DIR, "Server at '%s:%d' sent us a 503 response, but included "
-              "a body anyway.  We'll pretend it gave us a 200.",
-              conn->_base.address, conn->_base.port);
-     status_code = 200;
+     tor_free(body); tor_free(headers); tor_free(reason);
+     return -1;
    }
  
    plausible = body_is_plausible(body, body_len, conn->_base.purpose);
diff --cc src/or/networkstatus.c
index 6387126,4f6fe15..50982d7
--- a/src/or/networkstatus.c
+++ b/src/or/networkstatus.c
@@@ -1807,11 -1765,15 +1808,15 @@@ networkstatus_set_current_consensus(con
      write_str_to_file(consensus_fname, consensus, 0);
    }
  
-   if (time_definitely_before(now, c->valid_after, 60)) {
+ /** If a consensus appears more than this many seconds before its declared
+  * valid-after time, declare that our clock is skewed. */
+ #define EARLY_CONSENSUS_NOTICE_SKEW 60
+ 
+   if (now < current_consensus->valid_after - EARLY_CONSENSUS_NOTICE_SKEW) {
      char tbuf[ISO_TIME_LEN+1];
      char dbuf[64];
 -    long delta = now - current_consensus->valid_after;
 -    format_iso_time(tbuf, current_consensus->valid_after);
 +    long delta = now - c->valid_after;
 +    format_iso_time(tbuf, c->valid_after);
      format_time_interval(dbuf, sizeof(dbuf), delta);
      log_warn(LD_GENERAL, "Our clock is %s behind the time published in the "
               "consensus network status document (%s GMT).  Tor needs an "
diff --cc src/or/or.h
index c134d7c,1688a08..56d701b
--- a/src/or/or.h
+++ b/src/or/or.h
@@@ -2279,12 -2126,15 +2279,18 @@@ typedef struct circuit_t 
      * length ONIONSKIN_CHALLENGE_LEN. */
    char *n_conn_onionskin;
  
 -  struct timeval timestamp_created; /**< When was the circuit created? */
 +  /** When was this circuit created?  We keep this timestamp with a higher
 +   * resolution than most so that the circuit-build-time tracking code can
 +   * get millisecond resolution. */
 +  struct timeval timestamp_created;
-   time_t timestamp_dirty; /**< When the circuit was first used, or 0 if the
-                            * circuit is clean. */
+   /** When the circuit was first used, or 0 if the circuit is clean.
+    *
+    * XXXX023 Note that some code will artifically adjust this value backward
+    * in time in order to indicate that a circuit shouldn't be used for new
+    * streams, but that it can stay alive as long as it has streams on it.
+    * That's a kludge we should fix.
+    */
+   time_t timestamp_dirty;
  
    uint16_t marked_for_close; /**< Should we close this circuit at the end of
                                * the main loop? (If true, holds the line number
diff --cc src/or/routerlist.c
index 1205fd1,4deff53..580763d
--- a/src/or/routerlist.c
+++ b/src/or/routerlist.c
@@@ -1764,9 -1768,9 +1764,9 @@@ smartlist_choose_node_by_bandwidth_weig
      weighted_bw += weight*this_bw;
      if (is_me)
        sl_last_weighted_bw_of_me = weight*this_bw;
 -  }
 +  } SMARTLIST_FOREACH_END(node);
  
-   /* XXXX022 this is a kludge to expose these values. */
+   /* XXXX023 this is a kludge to expose these values. */
    sl_last_total_weighted_bw = weighted_bw;
  
    log_debug(LD_CIRC, "Choosing node for rule %s based on weights "
@@@ -1874,21 -1883,20 +1874,21 @@@ smartlist_choose_node_by_bandwidth(smar
      int is_known = 1;
      int32_t flags = 0;
      uint32_t this_bw = 0;
 -    if (statuses) {
 -      status = smartlist_get(sl, i);
 -      if (router_digest_is_me(status->identity_digest))
 -        me_idx = i;
 -      router = router_get_by_digest(status->identity_digest);
 -      is_exit = status->is_exit;
 -      is_guard = status->is_possible_guard;
 -      if (status->has_bandwidth) {
 -        this_bw = kb_to_bytes(status->bandwidth);
 +    i = node_sl_idx;
 +
 +    if (router_digest_is_me(node->identity))
 +      me_idx = node_sl_idx;
 +
 +    is_exit = node->is_exit;
 +    is_guard = node->is_possible_guard;
 +    if (node->rs) {
 +      if (node->rs->has_bandwidth) {
 +        this_bw = kb_to_bytes(node->rs->bandwidth);
        } else { /* guess */
-         /* XXX022 once consensuses always list bandwidths, we can take
+         /* XXX023 once consensuses always list bandwidths, we can take
           * this guessing business out. -RD */
          is_known = 0;
 -        flags = status->is_fast ? 1 : 0;
 +        flags = node->rs->is_fast ? 1 : 0;
          flags |= is_exit ? 2 : 0;
          flags |= is_guard ? 4 : 0;
        }
@@@ -4686,13 -4606,10 +4686,13 @@@ update_router_descriptor_downloads(time
    if (directory_fetches_dir_info_early(options)) {
      update_router_descriptor_cache_downloads_v2(now);
    }
 +
    update_consensus_router_descriptor_downloads(now, 0,
 -    networkstatus_get_reasonably_live_consensus(now));
 +                  networkstatus_get_reasonably_live_consensus(now, FLAV_NS));
  
-   /* XXXX021 we could be smarter here; see notes on bug 652. */
+   /* XXXX023 we could be smarter here; see notes on bug 652. */
 +  /* XXXX NM Microdescs: if we're not fetching microdescriptors, we need
 +   * to make something else invoke this. */
    /* If we're a server that doesn't have a configured address, we rely on
     * directory fetches to learn when our address changes.  So if we haven't
     * tried to get any routerdescs in a long time, try a dummy fetch now. */



More information about the tor-commits mailing list