gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r17938 - in gnunet: contrib src/nat


From: gnunet
Subject: [GNUnet-SVN] r17938 - in gnunet: contrib src/nat
Date: Wed, 2 Nov 2011 18:05:00 +0100

Author: wachs
Date: 2011-11-02 18:05:00 +0100 (Wed, 02 Nov 2011)
New Revision: 17938

Modified:
   gnunet/contrib/defaults.conf
   gnunet/src/nat/nat.c
Log:
disable local addresses


Modified: gnunet/contrib/defaults.conf
===================================================================
--- gnunet/contrib/defaults.conf        2011-11-02 16:48:06 UTC (rev 17937)
+++ gnunet/contrib/defaults.conf        2011-11-02 17:05:00 UTC (rev 17938)
@@ -71,6 +71,9 @@
 # for our hostname (to get our own IP), in ms
 DYNDNS_FREQUENCY = 140000
 
+# Do we use addresses from localhost address ranges? (::1, 127.0.0.0/8)
+RETURN_LOCAL_ADDRESSES = NO
+
 [gnunet-nat-server]
 HOSTNAME = gnunet.org
 PORT = 5724

Modified: gnunet/src/nat/nat.c
===================================================================
--- gnunet/src/nat/nat.c        2011-11-02 16:48:06 UTC (rev 17937)
+++ gnunet/src/nat/nat.c        2011-11-02 17:05:00 UTC (rev 17938)
@@ -335,6 +335,11 @@
   int use_localaddresses;
 
   /**
+   * Should we return local addresses to clients
+   */
+  int return_localaddress;
+
+  /**
    * Should we do a DNS lookup of our hostname to find out our own IP?
    */
   int use_hostname;
@@ -642,9 +647,19 @@
   case AF_INET:
     s4 = (struct sockaddr_in *) addr;
     ip = &s4->sin_addr;
+
+    /* Check if address is in 127.0.0.0/8 */
+    uint32_t address = ntohl((in_addr_t)(s4->sin_addr.s_addr));
+    uint32_t value = (address & 0xFF000000) ^ 0x7F000000;
+    if ((h->return_localaddress == GNUNET_NO) && (value == 0))
+    {
+      return GNUNET_OK;
+    }
     if (GNUNET_YES == h->use_localaddresses)
+    {
       add_ip_to_address_list (h, LAL_INTERFACE_ADDRESS, &s4->sin_addr,
                               sizeof (struct in_addr));
+    }
     break;
   case AF_INET6:
     s6 = (struct sockaddr_in6 *) addr;
@@ -653,10 +668,17 @@
       /* skip link local addresses */
       return GNUNET_OK;
     }
+    if ((h->return_localaddress == GNUNET_NO) &&
+        (IN6_IS_ADDR_LOOPBACK (&((struct sockaddr_in6 *) addr)->sin6_addr)))
+    {
+      return GNUNET_OK;
+    }
     ip = &s6->sin6_addr;
     if (GNUNET_YES == h->use_localaddresses)
+    {
       add_ip_to_address_list (h, LAL_INTERFACE_ADDRESS, &s6->sin6_addr,
                               sizeof (struct in6_addr));
+    }
     break;
   default:
     GNUNET_break (0);
@@ -1116,6 +1138,9 @@
       GNUNET_CONFIGURATION_get_value_yesno (cfg, "nat", "ENABLE_UPNP");
   h->use_localaddresses =
       GNUNET_CONFIGURATION_get_value_yesno (cfg, "nat", "USE_LOCALADDR");
+  h->return_localaddress =
+      GNUNET_CONFIGURATION_get_value_yesno (cfg, "nat", 
"RETURN_LOCAL_ADDRESSES");
+
   h->use_hostname =
       GNUNET_CONFIGURATION_get_value_yesno (cfg, "nat", "USE_HOSTNAME");
   h->disable_ipv6 =




reply via email to

[Prev in Thread] Current Thread [Next in Thread]