mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-10 21:23:58 +01:00
Stop using addr_port_lookup as an address splitting function
It's too risky to have a function where if you leave one parameter NULL, it splits up address:port strings, but if you set it, it does hostname resolution.
This commit is contained in:
parent
491e20ae13
commit
426f6bfda2
@ -1148,6 +1148,20 @@ is_internal_IP(uint32_t ip, int for_listening)
|
||||
return tor_addr_is_internal(&myaddr, for_listening);
|
||||
}
|
||||
|
||||
/** Given an address of the form "host:port", try to divide it into its host
|
||||
* ane port portions, setting *<b>address_out</b> to a newly allocated string
|
||||
* holding the address portion and *<b>port_out</b> to the port (or 0 if no
|
||||
* port is given). Return 0 on success, -1 on failure. */
|
||||
int
|
||||
tor_addr_port_split(int severity, const char *addrport,
|
||||
char **address_out, uint16_t *port_out)
|
||||
{
|
||||
tor_assert(addrport);
|
||||
tor_assert(address_out);
|
||||
tor_assert(port_out);
|
||||
return addr_port_lookup(severity, addrport, address_out, NULL, port_out);
|
||||
}
|
||||
|
||||
/** Parse a string of the form "host[:port]" from <b>addrport</b>. If
|
||||
* <b>address</b> is provided, set *<b>address</b> to a copy of the
|
||||
* host portion of the string. If <b>addr</b> is provided, try to
|
||||
@ -1169,7 +1183,7 @@ addr_port_lookup(int severity, const char *addrport, char **address,
|
||||
|
||||
tor_assert(addrport);
|
||||
|
||||
colon = strchr(addrport, ':');
|
||||
colon = strrchr(addrport, ':');
|
||||
if (colon) {
|
||||
_address = tor_strndup(addrport, colon-addrport);
|
||||
_port = (int) tor_parse_long(colon+1,10,1,65535,NULL,NULL);
|
||||
|
@ -181,6 +181,9 @@ void tor_addr_from_in6(tor_addr_t *dest, const struct in6_addr *in6);
|
||||
int tor_addr_is_null(const tor_addr_t *addr);
|
||||
int tor_addr_is_loopback(const tor_addr_t *addr);
|
||||
|
||||
int tor_addr_port_split(int severity, const char *addrport,
|
||||
char **address_out, uint16_t *port_out);
|
||||
|
||||
/* IPv4 helpers */
|
||||
int is_internal_IP(uint32_t ip, int for_listening) ATTR_PURE;
|
||||
int addr_port_lookup(int severity, const char *addrport, char **address,
|
||||
|
@ -2894,9 +2894,9 @@ connection_exit_begin_conn(cell_t *cell, circuit_t *circ)
|
||||
END_STREAM_REASON_TORPROTOCOL, NULL);
|
||||
return 0;
|
||||
}
|
||||
if (addr_port_lookup(LOG_PROTOCOL_WARN,
|
||||
(char*)(cell->payload+RELAY_HEADER_SIZE),
|
||||
&address,NULL,&port)<0) {
|
||||
if (tor_addr_port_split(LOG_PROTOCOL_WARN,
|
||||
(char*)(cell->payload+RELAY_HEADER_SIZE),
|
||||
&address,&port)<0) {
|
||||
log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
|
||||
"Unable to parse addr:port in relay begin cell. Closing.");
|
||||
relay_send_end_cell_from_edge(rh.stream_id, circ,
|
||||
|
@ -1812,9 +1812,9 @@ authority_cert_parse_from_string(const char *s, const char **end_of_string)
|
||||
struct in_addr in;
|
||||
char *address = NULL;
|
||||
tor_assert(tok->n_args);
|
||||
/* XXX023 use tor_addr_port_lookup() below instead. -RD */
|
||||
if (addr_port_lookup(LOG_WARN, tok->args[0], &address, NULL,
|
||||
&cert->dir_port)<0 ||
|
||||
/* XXX023 use some tor_addr parse function below instead. -RD */
|
||||
if (tor_addr_port_split(LOG_WARN, tok->args[0], &address,
|
||||
&cert->dir_port) < 0 ||
|
||||
tor_inet_aton(address, &in) == 0) {
|
||||
log_warn(LD_DIR, "Couldn't parse dir-address in certificate");
|
||||
tor_free(address);
|
||||
|
Loading…
Reference in New Issue
Block a user