[or-cvs] r12927: start working on serving bridge status from the dirport, for (tor/trunk/src/or)

arma at seul.org arma at seul.org
Sat Dec 22 10:54:21 UTC 2007


Author: arma
Date: 2007-12-22 05:54:21 -0500 (Sat, 22 Dec 2007)
New Revision: 12927

Modified:
   tor/trunk/src/or/config.c
   tor/trunk/src/or/directory.c
   tor/trunk/src/or/or.h
Log:
start working on serving bridge status from the dirport, for
bridge communities.


Modified: tor/trunk/src/or/config.c
===================================================================
--- tor/trunk/src/or/config.c	2007-12-22 09:20:11 UTC (rev 12926)
+++ tor/trunk/src/or/config.c	2007-12-22 10:54:21 UTC (rev 12927)
@@ -151,6 +151,7 @@
   V(BandwidthRate,               MEMUNIT,  "5 MB"),
   V(BridgeAuthoritativeDir,      BOOL,     "0"),
   VAR("Bridge",                  LINELIST, Bridges,    NULL),
+  V(BridgePassword,              STRING,   NULL),
   V(BridgeRecordUsageByCountry,  BOOL,     "1"),
   V(BridgeRelay,                 BOOL,     "0"),
   V(CircuitBuildTimeout,         INTERVAL, "1 minute"),

Modified: tor/trunk/src/or/directory.c
===================================================================
--- tor/trunk/src/or/directory.c	2007-12-22 09:20:11 UTC (rev 12926)
+++ tor/trunk/src/or/directory.c	2007-12-22 10:54:21 UTC (rev 12927)
@@ -2290,7 +2290,7 @@
 
   if (!strcmpstart(url,"/tor/status-vote/current/") ||
       !strcmpstart(url,"/tor/status-vote/next/")) {
-    /* XXXX If-modified-since is only the implemented for the current
+    /* XXXX If-modified-since is only implemented for the current
      * consensus: that's probably fine, since it's the only vote document
      * people fetch much.*/
     int current = 1;
@@ -2592,6 +2592,35 @@
     goto done;
   }
 
+  if (options->BridgeAuthoritativeDir &&
+      options->BridgePassword &&
+      !strcmp(url,"/tor/networkstatus-bridges")) {
+    char *status;
+    size_t len;
+
+    header = http_get_header(headers, "Authenticator: ");
+
+    if (!header) {
+      write_http_status_line(conn, 404, "Not found");
+      goto done;
+    }
+
+    /* now make sure the password is right */
+    if (1) { // check password_is_wrong(header)
+      write_http_status_line(conn, 404, "Not found");
+      tor_free(header);
+      goto done;
+    }
+
+    /* all happy now. send an answer. */
+    status = networkstatus_getinfo_by_purpose("bridge", time(NULL));
+    len = strlen(status);
+    write_http_response_header(conn, len, 0, 0);
+    connection_write_to_buf(status, len, TO_CONN(conn));
+    tor_free(status);
+    goto done;
+  }
+
   if (!strcmpstart(url,"/tor/bytes.txt")) {
     char *bytes = directory_dump_request_log();
     size_t len = strlen(bytes);

Modified: tor/trunk/src/or/or.h
===================================================================
--- tor/trunk/src/or/or.h	2007-12-22 09:20:11 UTC (rev 12926)
+++ tor/trunk/src/or/or.h	2007-12-22 10:54:21 UTC (rev 12927)
@@ -2089,6 +2089,12 @@
   int BridgeAuthoritativeDir; /**< Boolean: is this an authoritative directory
                                * that aggregates bridge descriptors? */
 
+  /** If set on a bridge authority, it will answer requests on its dirport
+   * for bridge statuses -- but only if the requests use this password.
+   * If set on a bridge user, request bridge statuses, and use this password
+   * when doing so. */
+  char *BridgePassword;
+
   int UseBridges; /**< Boolean: should we start all circuits with a bridge? */
   config_line_t *Bridges; /**< List of bootstrap bridge addresses. */
 



More information about the tor-commits mailing list