]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Don't warn of stray Bridges if managed proxies are still unconfigured.
authorGeorge Kadianakis <desnacked@gmail.com>
Sun, 11 Sep 2011 21:51:29 +0000 (23:51 +0200)
committerGeorge Kadianakis <desnacked@gmail.com>
Sun, 11 Sep 2011 21:51:29 +0000 (23:51 +0200)
With managed proxies you would always get the error message:

"You have a Bridge line using the X pluggable transport, but there
doesn't seem to be a corresponding ClientTransportPlugin line."

because the check happened directly after parse_client_transport_line()
when managed proxies were not fully configured and their transports
were not registered.

The fix is to move the validation to run_scheduled_events() and make
sure that all managed proxies are configured first.

src/or/circuitbuild.c
src/or/circuitbuild.h
src/or/config.c
src/or/main.c

index b4c234301e8a34d3ff68f6ba8de4eec3c80533a7..ed813046a9c64221de2bb54f26d24b1b4b81dc89 100644 (file)
@@ -4769,11 +4769,14 @@ transport_add_from_config(const tor_addr_t *addr, uint16_t port,
   }
 }
 
-/** Warns the user of possible pluggable transport misconfiguration. */
-void
+/** Warn the user of possible pluggable transport misconfiguration.
+ *  Return 0 if the validation happened, -1 if we should postpone the
+ *  validation. */
+int
 validate_pluggable_transports_config(void)
 {
-  if (bridge_list) {
+  /* Don't validate if managed proxies are not yet fully configured. */
+  if (bridge_list && !pt_proxies_configuration_pending()) {
     SMARTLIST_FOREACH_BEGIN(bridge_list, bridge_info_t *, b) {
       /* Skip bridges without transports. */
       if (!b->transport_name)
@@ -4787,6 +4790,10 @@ validate_pluggable_transports_config(void)
                  "corresponding ClientTransportPlugin line.",
                  b->transport_name);
     } SMARTLIST_FOREACH_END(b);
+
+    return 0;
+  } else {
+    return -1;
   }
 }
 
index 10e72879e6d1a8976af20d280921a51138bd39b3..dca541d6ffe7fe8fc81c1070b716abb518a23d21 100644 (file)
@@ -157,7 +157,7 @@ int find_transport_by_bridge_addrport(const tor_addr_t *addr, uint16_t port,
                                       const transport_t **transport);
 transport_t *transport_get_by_name(const char *name);
 
-void validate_pluggable_transports_config(void);
+int validate_pluggable_transports_config(void);
 
 #endif
 
index f2cb6cde5c9255a7e1f74d0b7741a855a78a1399..8bd47b5008b174d17a81dcfbae032cd0aebbae42 100644 (file)
@@ -1271,11 +1271,6 @@ options_act(or_options_t *old_options)
   sweep_transport_list();
   sweep_proxy_list();
 
-  /* If we have pluggable transport related options enabled, see if we
-     should warn the user about potential configuration problems. */
-  if (options->Bridges || options->ClientTransportPlugin)
-    validate_pluggable_transports_config();
-
   /* Bail out at this point if we're not going to be a client or server:
    * we want to not fork, and to log stuff to stderr. */
   if (!running_tor)
index 5294e4ad0dfb6a8198e903ad7d6e8695cad2bc22..6297f0f3e26bf0ead9ee4fdda5506a42019b8a1a 100644 (file)
@@ -1068,6 +1068,7 @@ run_scheduled_events(time_t now)
   static int should_init_bridge_stats = 1;
   static time_t time_to_retry_dns_init = 0;
   static time_t time_to_next_heartbeat = 0;
+  static int has_validated_pt = 0;
   or_options_t *options = get_options();
   int is_server = server_mode(options);
   int i;
@@ -1472,6 +1473,14 @@ run_scheduled_events(time_t now)
   if (pt_proxies_configuration_pending())
     pt_configure_remaining_proxies();
 
+  /** 11c. validate pluggable transports configuration if we need to */
+  if (!has_validated_pt &&
+      (options->Bridges || options->ClientTransportPlugin)) {
+    if (validate_pluggable_transports_config() == 0) {
+      has_validated_pt = 1;
+    }
+  }
+
   /** 12. write the heartbeat message */
   if (options->HeartbeatPeriod &&
       time_to_next_heartbeat < now) {