]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Widen the conditions under which we whine about not having a geoip file to include...
authorNick Mathewson <nickm@torproject.org>
Thu, 25 Sep 2008 21:06:32 +0000 (21:06 +0000)
committerNick Mathewson <nickm@torproject.org>
Thu, 25 Sep 2008 21:06:32 +0000 (21:06 +0000)
svn:r16968

src/or/config.c
src/or/geoip.c
src/or/or.h
src/or/routerlist.c

index 36c0d4287d3df9f14a66c0c09dd0c47d0a45e3c5..219be16481dcd98bcf2ab49bc15870a93e91b298 100644 (file)
@@ -1163,6 +1163,30 @@ options_act_reversible(or_options_t *old_options, char **msg)
   return r;
 }
 
+/** DOCDOC */
+int
+options_need_geoip_info(or_options_t *options, const char **reason_out)
+{
+  int bridge_usage =
+    options->BridgeRelay && options->BridgeRecordUsageByCountry;
+  int routerset_usage =
+    routerset_needs_geoip(options->EntryNodes) ||
+    routerset_needs_geoip(options->ExitNodes) ||
+    routerset_needs_geoip(options->ExcludeExitNodes) ||
+    routerset_needs_geoip(options->ExcludeNodes);
+
+  if (routerset_usage && reason_out) {
+    *reason_out = "We've been configured to use (or avoid) nodes in certain "
+      "contries, and we need GEOIP information to figure out which ones they "
+      "are.";
+  } else if (bridge_usage && reason_out) {
+    *reason_out = "We've been configured to see which countries can access "
+      "us as a bridge, and we need GEOIP information to tell which countries "
+      "clients are in.";
+  }
+  return bridge_usage || routerset_usage;
+}
+
 /** Fetch the active option list, and take actions based on it. All of the
  * things we do should survive being done repeatedly.  If present,
  * <b>old_options</b> contains the previous value of the options.
index e948d60de40569137f273f609994caf8031892ad..a0f0d4ae9086d73899389adbd292354d3969d593 100644 (file)
@@ -178,10 +178,12 @@ int
 geoip_load_file(const char *filename, or_options_t *options)
 {
   FILE *f;
-  int severity = should_record_bridge_info(options) ? LOG_WARN : LOG_INFO;
+  const char *msg = "";
+  int severity = options_need_geoip_info(options, &msg) ? LOG_WARN : LOG_INFO;
   clear_geoip_db();
   if (!(f = fopen(filename, "r"))) {
-    log_fn(severity, LD_GENERAL, "Failed to open GEOIP file %s.", filename);
+    log_fn(severity, LD_GENERAL, "Failed to open GEOIP file %s.  %s",
+           filename, msg);
     return -1;
   }
   if (!geoip_countries) {
@@ -193,7 +195,7 @@ geoip_load_file(const char *filename, or_options_t *options)
     smartlist_free(geoip_entries);
   }
   geoip_entries = smartlist_create();
-  log_info(LD_GENERAL, "Parsing GEOIP file.");
+  log_notice(LD_GENERAL, "Parsing GEOIP file.");
   while (!feof(f)) {
     char buf[512];
     if (fgets(buf, (int)sizeof(buf), f) == NULL)
index da1be001424a7d849e03cd2af8d5115dede4a450..d21b30e5c62110ad69994af22483678602090d32 100644 (file)
@@ -2837,6 +2837,7 @@ char *options_get_datadir_fname2_suffix(or_options_t *options,
 or_state_t *get_or_state(void);
 int or_state_save(time_t now);
 
+int options_need_geoip_info(or_options_t *options, const char **reason_out);
 int getinfo_helper_config(control_connection_t *conn,
                           const char *question, char **answer);
 
@@ -4294,6 +4295,7 @@ int routerset_parse(routerset_t *target, const char *s,
                     const char *description);
 void routerset_union(routerset_t *target, const routerset_t *source);
 int routerset_is_list(const routerset_t *set);
+int routerset_needs_geoip(const routerset_t *set);
 int routerset_contains_router(const routerset_t *set, routerinfo_t *ri);
 int routerset_contains_routerstatus(const routerset_t *set,
                                     routerstatus_t *rs);
index 71f6fd1cc7fb139e7ee6d0334ced30e03f002a5f..3a5c4d5998f157c1d06a632f543603d4f4f9d784 100644 (file)
@@ -4881,6 +4881,13 @@ routerset_is_list(const routerset_t *set)
     smartlist_len(set->policies) == 0;
 }
 
+/** DOCDOC */
+int
+routerset_needs_geoip(const routerset_t *set)
+{
+  return set && smartlist_len(set->country_names);
+}
+
 /** DOCDOC */
 static int
 routerset_is_empty(const routerset_t *set)