[tor-commits] [tor/master] relay: Simplify some relay_config code

teor at torproject.org teor at torproject.org
Tue Nov 5 04:28:52 UTC 2019


commit 4d9a5c77f8f7a3e2ba9abf92e359e39ee114e350
Author: teor <teor at torproject.org>
Date:   Thu Oct 31 12:19:56 2019 +1000

    relay: Simplify some relay_config code
    
    Part of 32213.
---
 src/feature/relay/relay_config.c | 86 +++++++++++++++++++++++-----------------
 1 file changed, 50 insertions(+), 36 deletions(-)

diff --git a/src/feature/relay/relay_config.c b/src/feature/relay/relay_config.c
index d8c4f0f10..4ec4416d3 100644
--- a/src/feature/relay/relay_config.c
+++ b/src/feature/relay/relay_config.c
@@ -242,6 +242,7 @@ parse_ports_relay(or_options_t *options,
 {
   int retval = -1;
   smartlist_t *ports = smartlist_new();
+  int n_low_ports = 0;
 
   if (BUG(!options))
     goto err;
@@ -255,40 +256,40 @@ parse_ports_relay(or_options_t *options,
   if (BUG(!have_low_ports_out))
     goto err;
 
-  if (! options->ClientOnly) {
-    if (parse_port_config(ports,
-                          options->ORPort_lines,
-                          "OR", CONN_TYPE_OR_LISTENER,
-                          "0.0.0.0", 0,
-                          CL_PORT_SERVER_OPTIONS) < 0) {
-      *msg = tor_strdup("Invalid ORPort configuration");
-      goto err;
-    }
-    if (parse_port_config(ports,
-                          options->ExtORPort_lines,
-                          "ExtOR", CONN_TYPE_EXT_OR_LISTENER,
-                          "127.0.0.1", 0,
-                          CL_PORT_SERVER_OPTIONS|CL_PORT_WARN_NONLOCAL) < 0) {
-      *msg = tor_strdup("Invalid ExtORPort configuration");
-      goto err;
-    }
-    if (parse_port_config(ports,
-                          options->DirPort_lines,
-                          "Dir", CONN_TYPE_DIR_LISTENER,
-                          "0.0.0.0", 0,
-                          CL_PORT_SERVER_OPTIONS) < 0) {
-      *msg = tor_strdup("Invalid DirPort configuration");
-      goto err;
-    }
+  if (options->ClientOnly) {
+    retval = 0;
+    goto err;
+  }
+
+  if (parse_port_config(ports,
+                        options->ORPort_lines,
+                        "OR", CONN_TYPE_OR_LISTENER,
+                        "0.0.0.0", 0,
+                        CL_PORT_SERVER_OPTIONS) < 0) {
+    *msg = tor_strdup("Invalid ORPort configuration");
+    goto err;
+  }
+  if (parse_port_config(ports,
+                        options->ExtORPort_lines,
+                        "ExtOR", CONN_TYPE_EXT_OR_LISTENER,
+                        "127.0.0.1", 0,
+                        CL_PORT_SERVER_OPTIONS|CL_PORT_WARN_NONLOCAL) < 0) {
+    *msg = tor_strdup("Invalid ExtORPort configuration");
+    goto err;
+  }
+  if (parse_port_config(ports,
+                        options->DirPort_lines,
+                        "Dir", CONN_TYPE_DIR_LISTENER,
+                        "0.0.0.0", 0,
+                        CL_PORT_SERVER_OPTIONS) < 0) {
+    *msg = tor_strdup("Invalid DirPort configuration");
+    goto err;
   }
 
-  int n_low_ports = 0;
   if (check_server_ports(ports, options, &n_low_ports) < 0) {
     *msg = tor_strdup("Misconfigured server ports");
     goto err;
   }
-  if (*have_low_ports_out < 0)
-    *have_low_ports_out = (n_low_ports > 0);
 
   smartlist_add_all(ports_out, ports);
   smartlist_free(ports);
@@ -296,6 +297,8 @@ parse_ports_relay(or_options_t *options,
   retval = 0;
 
  err:
+  if (*have_low_ports_out < 0)
+    *have_low_ports_out = (n_low_ports > 0);
   if (ports) {
     SMARTLIST_FOREACH(ports, port_cfg_t *, p, port_cfg_free(p));
     smartlist_free(ports);
@@ -314,6 +317,9 @@ update_port_set_relay(or_options_t *options,
   if (BUG(!ports))
     return;
 
+  if (options->ClientOnly)
+    return;
+
   /* Update the relay *Port_set options.  The !! here is to force a boolean
    * out of an integer. */
   options->ORPort_set =
@@ -343,12 +349,14 @@ options_validate_relay_os(const or_options_t *old_options,
   if (BUG(!msg))
     return -1;
 
+  if (!server_mode(options))
+    return 0;
+
   const char *uname = get_uname();
 
-  if (server_mode(options) &&
-      (!strcmpstart(uname, "Windows 95") ||
-       !strcmpstart(uname, "Windows 98") ||
-       !strcmpstart(uname, "Windows Me"))) {
+  if (!strcmpstart(uname, "Windows 95") ||
+      !strcmpstart(uname, "Windows 98") ||
+      !strcmpstart(uname, "Windows Me")) {
     log_warn(LD_CONFIG, "Tor is running as a server, but you are "
         "running %s; this probably won't work. See "
         "https://www.torproject.org/docs/faq.html#BestOSForRelay "
@@ -572,19 +580,22 @@ options_validate_relay_padding(const or_options_t *old_options,
   if (BUG(!msg))
     return -1;
 
-  if (server_mode(options) && options->ConnectionPadding != -1) {
+  if (!server_mode(options))
+    return 0;
+
+  if (options->ConnectionPadding != -1) {
     REJECT("Relays must use 'auto' for the ConnectionPadding setting.");
   }
 
-  if (server_mode(options) && options->ReducedConnectionPadding != 0) {
+  if (options->ReducedConnectionPadding != 0) {
     REJECT("Relays cannot set ReducedConnectionPadding. ");
   }
 
-  if (server_mode(options) && options->CircuitPadding == 0) {
+  if (options->CircuitPadding == 0) {
     REJECT("Relays cannot set CircuitPadding to 0. ");
   }
 
-  if (server_mode(options) && options->ReducedCircuitPadding == 1) {
+  if (options->ReducedCircuitPadding == 1) {
     REJECT("Relays cannot set ReducedCircuitPadding. ");
   }
 
@@ -1408,6 +1419,9 @@ options_act_relay_dir(const or_options_t *old_options)
 
   const or_options_t *options = get_options();
 
+  if (!public_server_mode(options))
+    return 0;
+
   /* Load the webpage we're going to serve every time someone asks for '/' on
      our DirPort. */
   tor_free(global_dirfrontpagecontents);





More information about the tor-commits mailing list