config: Fix duplicate error message for nonlocal SocksPorts.

If `validate_only` is true, then just validate the configuration without warning
about it.  This way, we only emit warnings when the listener is actually opened.
(Otherwise, every time we parse the config we will might re-warn and we would
need to keep state; whereas the listeners are only opened once.)

 * FIXES #4019.
This commit is contained in:
Isis Lovecruft 2017-06-22 00:28:31 +00:00
parent 784b29a2bf
commit 28344b74ba
No known key found for this signature in database
GPG Key ID: C8E8B1AA4CF3844E

View File

@ -6251,8 +6251,9 @@ port_cfg_free(port_cfg_t *port)
/** Warn for every port in <b>ports</b> of type <b>listener_type</b> that is
* on a publicly routable address. */
static void
warn_nonlocal_client_ports(const smartlist_t *ports, const char *portname,
int listener_type)
warn_nonlocal_client_ports(const smartlist_t *ports,
const char *portname,
const int listener_type)
{
SMARTLIST_FOREACH_BEGIN(ports, const port_cfg_t *, port) {
if (port->type != listener_type)
@ -6936,7 +6937,8 @@ parse_ports(or_options_t *options, int validate_only,
options->SocksPort_lines,
"Socks", CONN_TYPE_AP_LISTENER,
"127.0.0.1", 9050,
CL_PORT_WARN_NONLOCAL|CL_PORT_TAKES_HOSTNAMES|gw_flag) < 0) {
((validate_only ? 0 : CL_PORT_WARN_NONLOCAL)
| CL_PORT_TAKES_HOSTNAMES | gw_flag)) < 0) {
*msg = tor_strdup("Invalid SocksPort configuration");
goto err;
}