Browse Source

Reject attempts to say FooPort and FooPort 0 in the same cfg domain

Nick Mathewson 13 years ago
parent
commit
d993b04485
2 changed files with 21 additions and 0 deletions
  1. 8 0
      changes/bug6507
  2. 13 0
      src/or/config.c

+ 8 - 0
changes/bug6507

@@ -5,3 +5,11 @@
       server, even though our new listener code would correctly not
       server, even though our new listener code would correctly not
       open any ORPorts for ORPort 0. Similar bugs in other Port
       open any ORPorts for ORPort 0. Similar bugs in other Port
       options are also fixed. Fixes bug 6507; bugfix on 0.2.3.3-alpha.
       options are also fixed. Fixes bug 6507; bugfix on 0.2.3.3-alpha.
+
+  o Minor features:
+
+    - Detect and reject attempts to specify both 'FooPort' and
+      'FooPort 0' in the same configuration domain.  (It's still okay
+      to have a FooPort in your configuration file,and use 'FooPort 0'
+      on the command line to disable it.) Fixes another case of
+      bug6507; bugfix on 0.2.3.3-alpha.

+ 13 - 0
src/or/config.c

@@ -5667,6 +5667,7 @@ parse_port_config(smartlist_t *out,
   const unsigned forbid_nonlocal = flags & CL_PORT_FORBID_NONLOCAL;
   const unsigned forbid_nonlocal = flags & CL_PORT_FORBID_NONLOCAL;
   const unsigned allow_spurious_listenaddr =
   const unsigned allow_spurious_listenaddr =
     flags & CL_PORT_ALLOW_EXTRA_LISTENADDR;
     flags & CL_PORT_ALLOW_EXTRA_LISTENADDR;
+  int got_zero_port=0, got_nonzero_port=0;
 
 
   /* FooListenAddress is deprecated; let's make it work like it used to work,
   /* FooListenAddress is deprecated; let's make it work like it used to work,
    * though. */
    * though. */
@@ -5919,6 +5920,11 @@ parse_port_config(smartlist_t *out,
       } SMARTLIST_FOREACH_END(elt);
       } SMARTLIST_FOREACH_END(elt);
     }
     }
 
 
+    if (port)
+      got_nonzero_port = 1;
+    else
+      got_zero_port = 1;
+
     if (out && port) {
     if (out && port) {
       port_cfg_t *cfg = tor_malloc_zero(sizeof(port_cfg_t));
       port_cfg_t *cfg = tor_malloc_zero(sizeof(port_cfg_t));
       tor_addr_copy(&cfg->addr, &addr);
       tor_addr_copy(&cfg->addr, &addr);
@@ -5945,6 +5951,13 @@ parse_port_config(smartlist_t *out,
       warn_nonlocal_client_ports(out, portname);
       warn_nonlocal_client_ports(out, portname);
   }
   }
 
 
+  if (got_zero_port && got_nonzero_port) {
+    log_warn(LD_CONFIG, "You specified a nonzero %sPort along with '%sPort 0' "
+             "in the same configuration. Did you mean to disable %sPort or "
+             "not?", portname, portname, portname);
+    goto err;
+  }
+
   retval = 0;
   retval = 0;
  err:
  err:
   SMARTLIST_FOREACH(elts, char *, cp, tor_free(cp));
   SMARTLIST_FOREACH(elts, char *, cp, tor_free(cp));