]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
address: Simplify tor_addr_is_valid()
authorteor <teor@torproject.org>
Tue, 31 Mar 2020 23:56:00 +0000 (09:56 +1000)
committerMrSquanchee <usuraj35@gmail.com>
Tue, 7 Apr 2020 17:41:17 +0000 (23:11 +0530)
And rewrite the function comment.

Part of 33679.

src/lib/net/address.c

index 7b24e406a46bf49edebcd0fdf236e8735c796e06..5dbef6a79da75958ba71fccf61d17aea9b8c597f 100644 (file)
@@ -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) {
-    return 1;
-  }
-
-  if (for_listening && addr->family == AF_INET6) {
-    return 1;
+  /* 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;
+    }
   }
 
   /* Otherwise, the address is valid if it's not tor_addr_is_null() */