Sfoglia il codice sorgente

r16246@catbus: nickm | 2007-10-28 19:34:58 -0400
Implement a FallbackNetworkstatusFile (default to $prefix/share/tor/fallback-consensus) to that we know about lots of directory servers and routers when we start up the first time.


svn:r12259

Nick Mathewson 16 anni fa
parent
commit
f09d53bbf1
6 ha cambiato i file con 42 aggiunte e 2 eliminazioni
  1. 6 0
      configure.in
  2. 3 2
      doc/TODO
  3. 6 0
      src/config/Makefile.am
  4. 4 0
      src/or/config.c
  5. 20 0
      src/or/networkstatus.c
  6. 3 0
      src/or/or.h

+ 6 - 0
configure.in

@@ -619,6 +619,12 @@ AC_SUBST(LOCALSTATEDIR)
 AH_TEMPLATE([LOCALSTATEDIR], [Default location to store state files.])
 AC_DEFINE_UNQUOTED(LOCALSTATEDIR,"$LOCALSTATEDIR")
 
+dnl Note: this is not the same as Tor's "DataDir" config option.
+DATADIR=`eval echo $datadir`
+AC_SUBST(DATADIR)
+AH_TEMPLATE([DATADIR], [Default location for platform-independent read-only data.])
+AC_DEFINE_UNQUOTED(DATADIR,"$DATADIR")
+
 # Set CFLAGS _after_ all the above checks, since our warnings are stricter
 # than autoconf's macros like.
 if test $ac_cv_c_compiler_gnu = yes; then

+ 3 - 2
doc/TODO

@@ -21,8 +21,9 @@ Things we'd like to do in 0.2.0.x:
     licenses for other components of the bundles.
 
   - Before the feature freeze: (Nick)
-    - Support for preconfigured mirror lists
-      - Use a pre-shipped fallback consensus.
+    o Support for preconfigured mirror lists
+      o Use a pre-shipped fallback consensus.
+      o Code to install a pre-defined fallback consensus
     . Download consensuses (et al) via if-modified-since
       o Implement backend support for sending if-modified-since
       o Use it for consensuses.

+ 6 - 0
src/config/Makefile.am

@@ -3,3 +3,9 @@ confdir = $(sysconfdir)/tor
 EXTRA_DIST = 
 
 conf_DATA = torrc.sample
+
+data_DATA = fallback-consensus
+
+# If we don't have it, fake it.
+fallback-consensus:
+	touch fallback-consensus

+ 4 - 0
src/or/config.c

@@ -118,6 +118,8 @@ typedef struct config_var_t {
 /** An entry for config_vars: "The option <b>name</b> is obsolete." */
 #define OBSOLETE(name) { name, CONFIG_TYPE_OBSOLETE, 0, NULL }
 
+
+
 /** Array of configuration options.  Until we disallow nonstandard
  * abbreviations, order is significant, since the first matching option will
  * be chosen first.
@@ -175,6 +177,8 @@ static config_var_t _option_vars[] = {
   V(ExitNodes,                   STRING,   NULL),
   V(ExitPolicy,                  LINELIST, NULL),
   V(ExitPolicyRejectPrivate,     BOOL,     "1"),
+  V(FallbackNetworkstatusFile,   STRING,
+    DATADIR PATH_SEPARATOR "tor" PATH_SEPARATOR "fallback-consensus"),
   V(FascistFirewall,             BOOL,     "0"),
   V(FirewallPorts,               CSV,      ""),
   V(FastFirstHopPK,              BOOL,     "1"),

+ 20 - 0
src/or/networkstatus.c

@@ -158,6 +158,8 @@ router_reload_consensus_networkstatus(void)
 {
   char *filename;
   char *s;
+  struct stat st;
+  or_options_t *options = get_options();
 
   /* XXXX020 Suppress warnings if cached consensus is bad. */
 
@@ -182,6 +184,24 @@ router_reload_consensus_networkstatus(void)
     tor_free(s);
   }
   tor_free(filename);
+
+  if (!current_consensus ||
+      (stat(options->FallbackNetworkstatusFile, &st)==0 &&
+       st.st_mtime > current_consensus->valid_after)) {
+    s = read_file_to_str(options->FallbackNetworkstatusFile,
+                         RFTS_IGNORE_MISSING, NULL);
+    if (s) {
+      if (networkstatus_set_current_consensus(s, 1, 1)) {
+        log_info(LD_FS, "Couldn't load consensus networkstatus from \"%s\"",
+                 options->FallbackNetworkstatusFile);
+      } else {
+        log_notice(LD_FS, "Loaded fallback consensus networkstaus from \"%s\"",
+                   options->FallbackNetworkstatusFile);
+      }
+      tor_free(s);
+    }
+  }
+
   routers_update_all_from_networkstatus(time(NULL));
 
   return 0;

+ 3 - 0
src/or/or.h

@@ -2174,6 +2174,9 @@ typedef struct {
   int V3AuthDistDelay;
   /** The number of intervals we think a consensus should be valid. */
   int V3AuthNIntervalsValid;
+
+  /** DOCDOC here and in tor.1 */
+  char *FallbackNetworkstatusFile;
 } or_options_t;
 
 /** Persistent state for an onion router, as saved to disk. */