Introduce tor_addr_port_parse() and use it to parse ServerTransportListenAddr.

This commit is contained in:
George Kadianakis
2012-11-28 00:24:58 +02:00
committed by Nick Mathewson
parent f88c303869
commit 6f21d2e496
4 changed files with 98 additions and 10 deletions
+40 -1
View File
@@ -1393,7 +1393,46 @@ 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
/** Given an address of the form "ip:port", try to divide it into its
* ip and port portions, setting *<b>address_out</b> to a newly
* allocated string holding the address portion and *<b>port_out</b>
* to the port.
*
* Don't do DNS lookups and don't allow domain names in the <ip> field.
* Don't accept <b>addrport</b> of the form "<ip>" or "<ip>:0".
*
* Return 0 on success, -1 on failure. */
int
tor_addr_port_parse(int severity, const char *addrport,
tor_addr_t *address_out, uint16_t *port_out)
{
int retval = -1;
int r;
char *addr_tmp = NULL;
tor_assert(addrport);
tor_assert(address_out);
tor_assert(port_out);
r = tor_addr_port_split(severity, addrport, &addr_tmp, port_out);
if (r < 0)
goto done;
if (!*port_out)
goto done;
/* make sure that address_out is an IP address */
if (tor_addr_parse(address_out, addr_tmp) < 0)
goto done;
retval = 0;
done:
tor_free(addr_tmp);
return retval;
}
/** 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. */
+3
View File
@@ -206,6 +206,9 @@ 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);
int tor_addr_port_parse(int severity, const char *addrport,
tor_addr_t *address_out, uint16_t *port_out);
int tor_addr_hostname_is_local(const char *name);
/* IPv4 helpers */