Avoid spurious local-port warnings

Our old warn_nonlocal_client_ports() would give a bogus warning for
every nonlocal port every time it parsed any ports at all.  So if it
parsed a nonlocal socksport, it would complain that it had a nonlocal
socksport...and then turn around and complain about the nonlocal
socksport again, calling it a nonlocal transport or nonlocal dnsport,
if it had any of those.

Fixes bug 7836; bugfix on 0.2.3.3-alpha.
This commit is contained in:
Nick Mathewson 2013-01-02 10:37:03 -05:00
parent 11e8a445c3
commit ee4182612f
2 changed files with 13 additions and 5 deletions

5
changes/bug7836 Normal file
View File

@ -0,0 +1,5 @@
o Minor bugfixes:
- Avoid spurious warnings when configuring multiple client ports of
which only some are nonlocal. Previously, we had claimed that some
were nonlocal when in fact they weren't. Fixes bug 7836; bugfix on
0.2.3.3-alpha.

View File

@ -4633,12 +4633,15 @@ port_cfg_free(port_cfg_t *port)
tor_free(port); tor_free(port);
} }
/** Warn for every port in <b>ports</b> that is on a publicly routable /** Warn for every port in <b>ports</b> of type <b>listener_type</b> that is
* address. */ * on a publicly routable address. */
static void static void
warn_nonlocal_client_ports(const smartlist_t *ports, const char *portname) warn_nonlocal_client_ports(const smartlist_t *ports, const char *portname,
int listener_type)
{ {
SMARTLIST_FOREACH_BEGIN(ports, const port_cfg_t *, port) { SMARTLIST_FOREACH_BEGIN(ports, const port_cfg_t *, port) {
if (port->type != listener_type)
continue;
if (port->is_unix_addr) { if (port->is_unix_addr) {
/* Unix sockets aren't accessible over a network. */ /* Unix sockets aren't accessible over a network. */
} else if (!tor_addr_is_internal(&port->addr, 1)) { } else if (!tor_addr_is_internal(&port->addr, 1)) {
@ -4835,7 +4838,7 @@ parse_port_config(smartlist_t *out,
if (is_control) if (is_control)
warn_nonlocal_controller_ports(out, forbid_nonlocal); warn_nonlocal_controller_ports(out, forbid_nonlocal);
else else
warn_nonlocal_client_ports(out, portname); warn_nonlocal_client_ports(out, portname, listener_type);
} }
return 0; return 0;
} /* end if (listenaddrs) */ } /* end if (listenaddrs) */
@ -5101,7 +5104,7 @@ parse_port_config(smartlist_t *out,
if (is_control) if (is_control)
warn_nonlocal_controller_ports(out, forbid_nonlocal); warn_nonlocal_controller_ports(out, forbid_nonlocal);
else else
warn_nonlocal_client_ports(out, portname); warn_nonlocal_client_ports(out, portname, listener_type);
} }
if (got_zero_port && got_nonzero_port) { if (got_zero_port && got_nonzero_port) {