mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2025-02-23 14:40:51 +01:00
Refactor duplicate code in router_check_descriptor_address_consistency
No behaviour change
This commit is contained in:
parent
4d2b3164ec
commit
427663428b
1 changed files with 45 additions and 62 deletions
107
src/or/router.c
107
src/or/router.c
|
@ -1896,6 +1896,47 @@ router_pick_published_address,(const or_options_t *options, uint32_t *addr))
|
|||
return 0;
|
||||
}
|
||||
|
||||
/* Like router_check_descriptor_address_consistency, but specifically for the
|
||||
* ORPort or DirPort.
|
||||
* listener_type is either CONN_TYPE_OR_LISTENER or CONN_TYPE_DIR_LISTENER. */
|
||||
static void
|
||||
router_check_descriptor_address_port_consistency(uint32_t ipv4h_desc_addr,
|
||||
int listener_type)
|
||||
{
|
||||
/* The first configured Port, which may be the magic constant CFG_AUTO_PORT.
|
||||
*/
|
||||
int port_v4_cfg = get_first_advertised_port_by_type_af(listener_type,
|
||||
AF_INET);
|
||||
if (port_v4_cfg != 0 &&
|
||||
!port_exists_by_type_addr32h_port(listener_type,
|
||||
ipv4h_desc_addr, port_v4_cfg, 1)) {
|
||||
const tor_addr_t *port_addr = get_first_advertised_addr_by_type_af(
|
||||
listener_type,
|
||||
AF_INET);
|
||||
tor_addr_t desc_addr;
|
||||
char port_addr_str[TOR_ADDR_BUF_LEN];
|
||||
char desc_addr_str[TOR_ADDR_BUF_LEN];
|
||||
|
||||
tor_addr_to_str(port_addr_str, port_addr, TOR_ADDR_BUF_LEN, 0);
|
||||
|
||||
tor_addr_from_ipv4h(&desc_addr, ipv4h_desc_addr);
|
||||
tor_addr_to_str(desc_addr_str, &desc_addr, TOR_ADDR_BUF_LEN, 0);
|
||||
|
||||
log_warn(LD_CONFIG, "The configured IPv4 %sPort address %s does not "
|
||||
"match the address %s in the descriptor. Please configure "
|
||||
"the matching IPv4 addresses for this Tor relay as "
|
||||
"Address <IPv4 address> in the torrc configuration file if "
|
||||
"you have multiple public IP addresses. If you are behind a "
|
||||
"NAT and have the right ports forwarded, you can ignore this "
|
||||
"warning or, to remove it, use 2 %sPort lines with options "
|
||||
"NoListen (for the public IPv4 address line) and NoAdvertise "
|
||||
"(for the internal NAT IPv4 address line).",
|
||||
listener_type ? "OR" : "Dir",
|
||||
port_addr_str, desc_addr_str,
|
||||
listener_type ? "OR" : "Dir");
|
||||
}
|
||||
}
|
||||
|
||||
/* Tor relays only have one IPv4 address in the descriptor, which is derived
|
||||
* from the Address torrc option, or guessed using various methods in
|
||||
* router_pick_published_address().
|
||||
|
@ -1921,68 +1962,10 @@ router_pick_published_address,(const or_options_t *options, uint32_t *addr))
|
|||
static void
|
||||
router_check_descriptor_address_consistency(uint32_t ipv4h_desc_addr)
|
||||
{
|
||||
|
||||
/* The first configured ORPort and DirPort, which may be CFG_AUTO_PORT. */
|
||||
int orport_v4_cfg = get_first_advertised_port_by_type_af(
|
||||
CONN_TYPE_OR_LISTENER,
|
||||
AF_INET);
|
||||
int dirport_v4_cfg = get_first_advertised_port_by_type_af(
|
||||
CONN_TYPE_DIR_LISTENER,
|
||||
AF_INET);
|
||||
|
||||
if (orport_v4_cfg != 0 &&
|
||||
!port_exists_by_type_addr32h_port(CONN_TYPE_OR_LISTENER,
|
||||
ipv4h_desc_addr, orport_v4_cfg, 1)) {
|
||||
const tor_addr_t *port_addr = get_first_advertised_addr_by_type_af(
|
||||
CONN_TYPE_OR_LISTENER,
|
||||
AF_INET);
|
||||
tor_addr_t desc_addr;
|
||||
char port_addr_str[TOR_ADDR_BUF_LEN];
|
||||
char desc_addr_str[TOR_ADDR_BUF_LEN];
|
||||
|
||||
tor_addr_to_str(port_addr_str, port_addr, TOR_ADDR_BUF_LEN, 0);
|
||||
|
||||
tor_addr_from_ipv4h(&desc_addr, ipv4h_desc_addr);
|
||||
tor_addr_to_str(desc_addr_str, &desc_addr, TOR_ADDR_BUF_LEN, 0);
|
||||
|
||||
log_warn(LD_CONFIG, "The configured IPv4 ORPort address %s does not "
|
||||
"match the address %s in the descriptor. Please configure "
|
||||
"the matching IPv4 addresses for this Tor relay as "
|
||||
"Address <IPv4 address> in the torrc configuration file if "
|
||||
"you have multiple public IP addresses. If you are behind a "
|
||||
"NAT and have the right ports forwarded, you can ignore this "
|
||||
"warning or, to remove it, use 2 ORPort lines with options "
|
||||
"NoListen (for the public IPv4 address line) and NoAdvertise "
|
||||
"(for the internal NAT IPv4 address line).",
|
||||
port_addr_str, desc_addr_str);
|
||||
}
|
||||
|
||||
if (dirport_v4_cfg != 0 &&
|
||||
!port_exists_by_type_addr32h_port(CONN_TYPE_DIR_LISTENER,
|
||||
ipv4h_desc_addr, dirport_v4_cfg, 1)) {
|
||||
const tor_addr_t *port_addr = get_first_advertised_addr_by_type_af(
|
||||
CONN_TYPE_DIR_LISTENER,
|
||||
AF_INET);
|
||||
tor_addr_t desc_addr;
|
||||
char port_addr_str[TOR_ADDR_BUF_LEN];
|
||||
char desc_addr_str[TOR_ADDR_BUF_LEN];
|
||||
|
||||
tor_addr_to_str(port_addr_str, port_addr, TOR_ADDR_BUF_LEN, 0);
|
||||
|
||||
tor_addr_from_ipv4h(&desc_addr, ipv4h_desc_addr);
|
||||
tor_addr_to_str(desc_addr_str, &desc_addr, TOR_ADDR_BUF_LEN, 0);
|
||||
|
||||
log_warn(LD_CONFIG, "The configured IPv4 DirPort address %s does not "
|
||||
"match the address %s in the descriptor. Please configure "
|
||||
"the matching IPv4 addresses for this Tor relay as "
|
||||
"Address <IPv4 address> in the torrc configuration file if "
|
||||
"you have multiple public IP addresses. If you are behind a "
|
||||
"NAT and have the right ports forwarded, you can ignore this "
|
||||
"warning or, to remove it, use 2 DirPort lines with options "
|
||||
"NoListen (for the public IPv4 address line) and NoAdvertise "
|
||||
"(for the internal NAT IPv4 address line).",
|
||||
port_addr_str, desc_addr_str);
|
||||
}
|
||||
router_check_descriptor_address_port_consistency(ipv4h_desc_addr,
|
||||
CONN_TYPE_OR_LISTENER);
|
||||
router_check_descriptor_address_port_consistency(ipv4h_desc_addr,
|
||||
CONN_TYPE_DIR_LISTENER);
|
||||
}
|
||||
|
||||
/** Build a fresh routerinfo, signed server descriptor, and extra-info document
|
||||
|
|
Loading…
Add table
Reference in a new issue