Browse Source

Make tor_addr_is_internal log the calling function on error

This might make it a little easier to track down bug  7086.
Nick Mathewson 11 years ago
parent
commit
8586611718
3 changed files with 12 additions and 4 deletions
  1. 4 0
      changes/addr_is_internal_debug
  2. 4 3
      src/common/address.c
  3. 4 1
      src/common/address.h

+ 4 - 0
changes/addr_is_internal_debug

@@ -0,0 +1,4 @@
+  o Minor features:
+    - Log the call-site of a failed tor_addr_is_internal(), so that we
+      can learn who is calling it with AF_UNSPECIFIED and fix the
+      second (unrelated) part of bug 7086.

+ 4 - 3
src/common/address.c

@@ -305,7 +305,8 @@ tor_addr_lookup(const char *name, uint16_t family, tor_addr_t *addr)
  * also treated as internal for now.)
  */
 int
-tor_addr_is_internal(const tor_addr_t *addr, int for_listening)
+tor_addr_is_internal_(const tor_addr_t *addr, int for_listening,
+                      const char *filename, int lineno)
 {
   uint32_t iph4 = 0;
   uint32_t iph6[4];
@@ -355,8 +356,8 @@ tor_addr_is_internal(const tor_addr_t *addr, int for_listening)
 
   /* unknown address family... assume it's not safe for external use */
   /* rather than tor_assert(0) */
-  log_warn(LD_BUG, "tor_addr_is_internal() called with a non-IP address of "
-           "type %d", (int)v_family);
+  log_warn(LD_BUG, "tor_addr_is_internal() called from %s:%d with a "
+           "non-IP address of type %d", filename, lineno, (int)v_family);
   tor_fragile_assert();
   return 1;
 }

+ 4 - 1
src/common/address.h

@@ -168,7 +168,10 @@ int tor_addr_compare_masked(const tor_addr_t *addr1, const tor_addr_t *addr2,
 
 unsigned int tor_addr_hash(const tor_addr_t *addr);
 int tor_addr_is_v4(const tor_addr_t *addr);
-int tor_addr_is_internal(const tor_addr_t *ip, int for_listening);
+int tor_addr_is_internal_(const tor_addr_t *ip, int for_listening,
+                          const char *filename, int lineno);
+#define tor_addr_is_internal(addr, for_listening) \
+  tor_addr_is_internal_((addr), (for_listening), _SHORT_FILE_, __LINE__)
 
 /** Longest length that can be required for a reverse lookup name. */
 /* 32 nybbles, 32 dots, 8 characters of "ip6.arpa", 1 NUL: 73 characters. */