diff options
author | David Goulet <dgoulet@torproject.org> | 2021-11-03 09:52:03 -0400 |
---|---|---|
committer | David Goulet <dgoulet@torproject.org> | 2021-11-03 09:52:03 -0400 |
commit | ea5eebf431c732b8f1c0e9daa9b7b716c48bc76f (patch) | |
tree | e90aac0efddcf1a87e3002af211862af83a9ea0a | |
parent | 1e3e921d7d2e7bce2f2b7e35ca085a745d242b66 (diff) | |
parent | 6e8e1a4e6ff249afd32e7851989ba3d79df9d5b2 (diff) | |
download | tor-ea5eebf431c732b8f1c0e9daa9b7b716c48bc76f.tar.gz tor-ea5eebf431c732b8f1c0e9daa9b7b716c48bc76f.zip |
Merge branch 'tor-gitlab/mr/477' into maint-0.4.5
-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 209900832f..7c0071500e 100644 --- a/doc/man/tor.1.txt +++ b/doc/man/tor.1.txt @@ -2803,7 +2803,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. [[DirPortFrontPage]] **DirPortFrontPage** __FILENAME__:: When this option is set, it takes an HTML file and publishes it as "/" on diff --git a/src/feature/relay/relay_config.c b/src/feature/relay/relay_config.c index c4a5d7f572..8ea0ad8397 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)) { |