[or-cvs] auth dir servers were only modifying a server"s is_running ...

arma at seul.org arma at seul.org
Sat Mar 18 01:24:06 UTC 2006


Update of /home2/or/cvsroot/tor/src/or
In directory moria:/home/arma/work/onion/cvs/tor/src/or

Modified Files:
	circuitbuild.c connection.c connection_or.c directory.c or.h 
	routerlist.c 
Log Message:
auth dir servers were only modifying a server's is_running field
when they created a network status. so if nobody asked for a
network status, they would never discover that any servers are
is_running, so they could never build a circuit.


Index: circuitbuild.c
===================================================================
RCS file: /home2/or/cvsroot/tor/src/or/circuitbuild.c,v
retrieving revision 1.225
retrieving revision 1.226
diff -u -p -d -r1.225 -r1.226
--- circuitbuild.c	18 Mar 2006 00:22:23 -0000	1.225
+++ circuitbuild.c	18 Mar 2006 01:24:04 -0000	1.226
@@ -1410,19 +1410,20 @@ count_acceptable_routers(smartlist_t *ro
   n = smartlist_len(routers);
   for (i=0;i<n;i++) {
     r = smartlist_get(routers, i);
-//    log_fn(LOG_DEBUG,"Contemplating whether router %d (%s) is a new option.",
-//           i, r->nickname);
+//    log_debug(LD_CIRC,
+//              "Contemplating whether router %d (%s) is a new option.",
+//              i, r->nickname);
     if (r->is_running == 0) {
-//      log_fn(LOG_DEBUG,"Nope, the directory says %d is not running.",i);
+//      log_debug(LD_CIRC,"Nope, the directory says %d is not running.",i);
       goto next_i_loop;
     }
     if (r->is_verified == 0) {
-//      log_fn(LOG_DEBUG,"Nope, the directory says %d is not verified.",i);
+//      log_debug(LD_CIRC,"Nope, the directory says %d is not verified.",i);
       /* XXXX009 But unverified routers *are* sometimes acceptable. */
       goto next_i_loop;
     }
     num++;
-//    log_fn(LOG_DEBUG,"I like %d. num_acceptable_routers now %d.",i, num);
+//    log_debug(LD_CIRC,"I like %d. num_acceptable_routers now %d.",i, num);
     next_i_loop:
       ; /* C requires an explicit statement after the label */
   }

Index: connection.c
===================================================================
RCS file: /home2/or/cvsroot/tor/src/or/connection.c,v
retrieving revision 1.446
retrieving revision 1.447
diff -u -p -d -r1.446 -r1.447
--- connection.c	12 Mar 2006 23:31:16 -0000	1.446
+++ connection.c	18 Mar 2006 01:24:04 -0000	1.447
@@ -348,6 +348,7 @@ connection_about_to_close_connection(con
         if (connection_or_nonopen_was_started_here(conn)) {
           rep_hist_note_connect_failed(conn->identity_digest, time(NULL));
           entry_guard_set_status(conn->identity_digest, 0);
+          router_set_status(conn->identity_digest, 0);
           control_event_or_conn_status(conn, OR_CONN_EVENT_FAILED);
         }
       } else if (conn->hold_open_until_flushed) {
@@ -1425,11 +1426,11 @@ connection_handle_write(connection_t *co
 
         connection_close_immediate(conn);
         connection_mark_for_close(conn);
-        /* it's safe to pass OPs to router_mark_as_down(), since it just
+        /* it's safe to pass OPs to router_set_status(), since it just
          * ignores unrecognized routers
          */
         if (conn->type == CONN_TYPE_OR && !get_options()->HttpsProxy)
-          router_mark_as_down(conn->identity_digest);
+          router_set_status(conn->identity_digest, 0);
         return -1;
       } else {
         return 0; /* no change, see if next time is better */

Index: connection_or.c
===================================================================
RCS file: /home2/or/cvsroot/tor/src/or/connection_or.c,v
retrieving revision 1.215
retrieving revision 1.216
diff -u -p -d -r1.215 -r1.216
--- connection_or.c	12 Mar 2006 23:31:16 -0000	1.215
+++ connection_or.c	18 Mar 2006 01:24:04 -0000	1.216
@@ -462,8 +462,8 @@ connection_or_connect(uint32_t addr, uin
        * an https proxy, our https proxy is down. Don't blame the
        * Tor server. */
       if (!options->HttpsProxy) {
-        router_mark_as_down(conn->identity_digest);
         entry_guard_set_status(conn->identity_digest, 0);
+        router_set_status(conn->identity_digest, 0);
       }
       control_event_or_conn_status(conn, OR_CONN_EVENT_FAILED);
       connection_free(conn);
@@ -637,6 +637,7 @@ connection_or_check_valid_handshake(conn
              "but got %s",
              conn->address, conn->port, expected, seen);
       entry_guard_set_status(conn->identity_digest, 0);
+      router_set_status(conn->identity_digest, 0);
       control_event_or_conn_status(conn, OR_CONN_EVENT_FAILED);
       as_advertised = 0;
     }
@@ -703,6 +704,7 @@ connection_tls_finish_handshake(connecti
       /* pending circs get closed in circuit_about_to_close_connection() */
       return -1;
     }
+    router_set_status(conn->identity_digest, 1);
   }
   connection_watch_events(conn, EV_READ);
   circuit_n_conn_done(conn, 1); /* send the pending creates, if any. */

Index: directory.c
===================================================================
RCS file: /home2/or/cvsroot/tor/src/or/directory.c,v
retrieving revision 1.362
retrieving revision 1.363
diff -u -p -d -r1.362 -r1.363
--- directory.c	12 Mar 2006 22:48:17 -0000	1.362
+++ directory.c	18 Mar 2006 01:24:04 -0000	1.363
@@ -310,7 +310,7 @@ connection_dir_request_failed(connection
 {
   if (router_digest_is_me(conn->identity_digest))
     return; /* this was a test fetch. don't retry. */
-  router_mark_as_down(conn->identity_digest); /* don't try him again */
+  router_set_status(conn->identity_digest, 0); /* don't try him again */
   if (conn->purpose == DIR_PURPOSE_FETCH_DIR ||
       conn->purpose == DIR_PURPOSE_FETCH_RUNNING_LIST) {
     log_info(LD_DIR, "Giving up on directory server at '%s:%d'; retrying",

Index: or.h
===================================================================
RCS file: /home2/or/cvsroot/tor/src/or/or.h,v
retrieving revision 1.808
retrieving revision 1.809
diff -u -p -d -r1.808 -r1.809
--- or.h	17 Mar 2006 22:08:59 -0000	1.808
+++ or.h	18 Mar 2006 01:24:04 -0000	1.809
@@ -2323,7 +2323,7 @@ void routerstatus_free(routerstatus_t *r
 void networkstatus_free(networkstatus_t *networkstatus);
 void routerlist_free_all(void);
 routerinfo_t *routerinfo_copy(const routerinfo_t *router);
-void router_mark_as_down(const char *digest);
+void router_set_status(const char *digest, int up);
 void routerlist_remove_old_routers(void);
 void networkstatus_list_clean(time_t now);
 int router_add_to_routerlist(routerinfo_t *router, const char **msg,

Index: routerlist.c
===================================================================
RCS file: /home2/or/cvsroot/tor/src/or/routerlist.c,v
retrieving revision 1.461
retrieving revision 1.462
diff -u -p -d -r1.461 -r1.462
--- routerlist.c	18 Mar 2006 00:22:23 -0000	1.461
+++ routerlist.c	18 Mar 2006 01:24:04 -0000	1.462
@@ -1409,9 +1409,10 @@ routerlist_reset_warnings(void)
   have_warned_about_new_version = 0;
 }
 
-/** Mark the router with ID <b>digest</b> as non-running in our routerlist. */
+/** Mark the router with ID <b>digest</b> as running or non-running
+ * in our routerlist. */
 void
-router_mark_as_down(const char *digest)
+router_set_status(const char *digest, int up)
 {
   routerinfo_t *router;
   local_routerstatus_t *status;
@@ -1419,19 +1420,20 @@ router_mark_as_down(const char *digest)
 
   SMARTLIST_FOREACH(trusted_dir_servers, trusted_dir_server_t *, d,
                     if (!memcmp(d->digest, digest, DIGEST_LEN))
-                      d->is_running = 0);
+                      d->is_running = up);
 
   router = router_get_by_digest(digest);
   if (router) {
-    log_debug(LD_DIR,"Marking router '%s' as down.",router->nickname);
-    if (router_is_me(router) && !we_are_hibernating())
+    log_debug(LD_DIR,"Marking router '%s' as %s.",
+              router->nickname, up ? "up" : "down");
+    if (!up && router_is_me(router) && !we_are_hibernating())
       log_warn(LD_NET, "We just marked ourself as down. Are your external "
                "addresses reachable?");
-    router->is_running = 0;
+    router->is_running = up;
   }
   status = router_get_combined_status_by_digest(digest);
   if (status) {
-    status->status.is_running = 0;
+    status->status.is_running = up;
   }
 }
 



More information about the tor-commits mailing list