commit d993b0448508d910be0c26096fe710b13e8af4e7 Author: Nick Mathewson nickm@torproject.org Date: Thu Aug 9 16:13:03 2012 -0400
Reject attempts to say FooPort and FooPort 0 in the same cfg domain --- changes/bug6507 | 8 ++++++++ src/or/config.c | 13 +++++++++++++ 2 files changed, 21 insertions(+), 0 deletions(-)
diff --git a/changes/bug6507 b/changes/bug6507 index 5ca0298..89940cb 100644 --- a/changes/bug6507 +++ b/changes/bug6507 @@ -5,3 +5,11 @@ server, even though our new listener code would correctly not 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. + + 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. diff --git a/src/or/config.c b/src/or/config.c index 6163599..639abcd 100644 --- a/src/or/config.c +++ b/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 allow_spurious_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, * though. */ @@ -5919,6 +5920,11 @@ parse_port_config(smartlist_t *out, } SMARTLIST_FOREACH_END(elt); }
+ if (port) + got_nonzero_port = 1; + else + got_zero_port = 1; + if (out && port) { port_cfg_t *cfg = tor_malloc_zero(sizeof(port_cfg_t)); tor_addr_copy(&cfg->addr, &addr); @@ -5945,6 +5951,13 @@ parse_port_config(smartlist_t *out, 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; err: SMARTLIST_FOREACH(elts, char *, cp, tor_free(cp));