Unverified Commit 1720a219 authored by teor's avatar teor Committed by MrSquanchee
Browse files

address: Simplify tor_addr_is_valid()

And rewrite the function comment.

Part of 33679.
parent cbd3f888
Loading
Loading
Loading
Loading
+11 −11
Original line number Diff line number Diff line
@@ -817,9 +817,12 @@ tor_addr_is_loopback(const tor_addr_t *addr)

/* Is addr valid?
 * Checks that addr is non-NULL and not tor_addr_is_null().
 * If for_listening is true, addr is allowed in either case if
 * addr is 0.0.0.0 (for IPv4) or :: (for IPv6).
 * It means "bind to all addresses on the local machine". */
 * If for_listening is true, all IPv4 and IPv6 addresses are valid, including
 * 0.0.0.0 (for IPv4) and :: (for IPv6). When listening, these addresses mean
 * "bind to all addresses on the local machine".
 * Otherwise, 0.0.0.0 and ::  are invalid, because they are null addresses.
 * All unspecified and unix addresses are invalid, regardless of for_listening.
 */
int
tor_addr_is_valid(const tor_addr_t *addr, int for_listening)
{
@@ -828,14 +831,11 @@ tor_addr_is_valid(const tor_addr_t *addr, int for_listening)
    return 0;
  }

  /* Only allow IPv4 0.0.0.0 for_listening. */
  if (for_listening && addr->family == AF_INET
      && tor_addr_to_ipv4h(addr) == 0) {
  /* Allow all IPv4 and IPv6 addresses, when for_listening is true */
  if (for_listening) {
    if (addr->family == AF_INET || addr->family == AF_INET6) {
      return 1;
    }

  if (for_listening && addr->family == AF_INET6) {
    return 1;
  }

  /* Otherwise, the address is valid if it's not tor_addr_is_null() */