diff options
author | David Goulet <dgoulet@torproject.org> | 2021-11-03 09:53:31 -0400 |
---|---|---|
committer | David Goulet <dgoulet@torproject.org> | 2021-11-03 09:53:31 -0400 |
commit | 83f8fe05e8f398f8f1a403b159284db5952d17de (patch) | |
tree | 7975f376842c82d556bc35524a93590def402c4e | |
parent | 621f8ac418e1441c9fe568b015058438daba6616 (diff) | |
parent | ea5eebf431c732b8f1c0e9daa9b7b716c48bc76f (diff) | |
download | tor-83f8fe05e8f398f8f1a403b159284db5952d17de.tar.gz tor-83f8fe05e8f398f8f1a403b159284db5952d17de.zip |
Merge branch 'maint-0.4.5' into maint-0.4.6
Signed-off-by: David Goulet <dgoulet@torproject.org>
-rw-r--r-- | changes/ticket40494 | 5 | ||||
-rw-r--r-- | doc/man/tor.1.txt | 3 | ||||
-rw-r--r-- | src/feature/relay/relay_config.c | 13 |
3 files changed, 19 insertions, 2 deletions
diff --git a/changes/ticket40494 b/changes/ticket40494 new file mode 100644 index 0000000000..a0e6c38443 --- /dev/null +++ b/changes/ticket40494 @@ -0,0 +1,5 @@ + o Minor bugfixes (relay): + - Reject IPv6-only DirPorts. Our reachability self-test forces DirPorts to + be IPv4, but our configuration parser allowed them to be IPv6-only, + which led to an assertion failure. Fixes bug 40494; bugfix on + 0.4.5.1-alpha. diff --git a/doc/man/tor.1.txt b/doc/man/tor.1.txt index 109e70f2ba..0af9a9c03d 100644 --- a/doc/man/tor.1.txt +++ b/doc/man/tor.1.txt @@ -2820,7 +2820,8 @@ details.) more than once, but only one advertised DirPort is supported: all but one DirPort must have the **NoAdvertise** flag set. (Default: 0) + + - The same flags are supported here as are supported by ORPort. + The same flags are supported here as are supported by ORPort. This port can + only be IPv4. + As of Tor 0.4.6.1-alpha, non-authoritative relays (see AuthoritativeDirectory) will not publish the DirPort but will still listen diff --git a/src/feature/relay/relay_config.c b/src/feature/relay/relay_config.c index bfc5ac2612..959128a298 100644 --- a/src/feature/relay/relay_config.c +++ b/src/feature/relay/relay_config.c @@ -352,6 +352,7 @@ check_and_prune_server_ports(smartlist_t *ports, int n_orport_listeners = 0; int n_dirport_advertised = 0; int n_dirport_listeners = 0; + int n_dirport_listeners_v4 = 0; int n_low_port = 0; int r = 0; @@ -362,8 +363,12 @@ check_and_prune_server_ports(smartlist_t *ports, if (port->type == CONN_TYPE_DIR_LISTENER) { if (! port->server_cfg.no_advertise) ++n_dirport_advertised; - if (! port->server_cfg.no_listen) + if (! port->server_cfg.no_listen) { ++n_dirport_listeners; + if (port_binds_ipv4(port)) { + ++n_dirport_listeners_v4; + } + } } else if (port->type == CONN_TYPE_OR_LISTENER) { if (! port->server_cfg.no_advertise) { ++n_orport_advertised; @@ -408,6 +413,12 @@ check_and_prune_server_ports(smartlist_t *ports, "address. Tor needs to listen on an IPv4 address too."); r = -1; } + if (n_dirport_advertised && n_dirport_listeners_v4 == 0) { + log_warn(LD_CONFIG, "We are listening on a non-IPv4 DirPort. This is not " + "allowed. Consider either setting an IPv4 address or " + "simply removing it because it is not used anymore."); + r = -1; + } if (n_low_port && options->AccountingMax && (!have_capability_support() || options->KeepBindCapabilities == 0)) { |