gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] r7734 - in GNUnet/src: server util/network util/network_cli


From: gnunet
Subject: [GNUnet-SVN] r7734 - in GNUnet/src: server util/network util/network_client
Date: Sat, 4 Oct 2008 23:47:11 -0600 (MDT)

Author: grothoff
Date: 2008-10-04 23:47:10 -0600 (Sat, 04 Oct 2008)
New Revision: 7734

Modified:
   GNUnet/src/server/tcpserver.c
   GNUnet/src/util/network/ipcheck.c
   GNUnet/src/util/network_client/tcpio.c
Log:
fixing various issues around #1410

Modified: GNUnet/src/server/tcpserver.c
===================================================================
--- GNUnet/src/server/tcpserver.c       2008-10-03 06:01:23 UTC (rev 7733)
+++ GNUnet/src/server/tcpserver.c       2008-10-05 05:47:10 UTC (rev 7734)
@@ -334,6 +334,7 @@
   struct sockaddr *serverAddr;
   socklen_t socklen;
   const int on = 1;
+  char * ch;
 
   listenerPort = getGNUnetPort ();
   if (listenerPort == 0)
@@ -354,7 +355,23 @@
         }
       memset (&serverAddr4, 0, sizeof (serverAddr4));
       serverAddr4.sin_family = AF_INET;
-      serverAddr4.sin_addr.s_addr = htonl (INADDR_ANY);
+      ch = NULL;
+      GNUNET_GC_get_configuration_value_string (cfg,
+                                               "NETWORK",
+                                               "TRUSTED",
+                                               "127.0.0.0/8;", 
+                                               &ch);
+      if ( (0 == strcmp(ch, "127.0.0.0/8;")) ||
+          (0 == strcmp(ch, "localhost;")) ||
+          (0 == strcmp(ch, "127.0.0.1;")) )
+       {
+         serverAddr4.sin_addr.s_addr = htonl (INADDR_LOOPBACK); 
+       }
+      else
+       {
+         serverAddr4.sin_addr.s_addr = htonl (INADDR_ANY);
+       }
+      GNUNET_free(ch);
       serverAddr4.sin_port = htons (listenerPort);
       socklen = sizeof (serverAddr4);
       serverAddr = (struct sockaddr *) &serverAddr4;
@@ -363,7 +380,24 @@
     {
       memset (&serverAddr6, 0, sizeof (serverAddr6));
       serverAddr6.sin6_family = AF_INET6;
+      ch = NULL;
+      GNUNET_GC_get_configuration_value_string (cfg,
+                                               "NETWORK",
+                                               "TRUSTED6",
+                                               "::1;", 
+                                               &ch);
+      if (0 == strcmp(ch, "::1;"))
+       {
+         serverAddr6.sin6_addr = in6addr_loopback;
+       }
+      else
+       {
+         serverAddr6.sin6_addr = in6addr_any;
+       }
+      GNUNET_free(ch);
       serverAddr6.sin6_port = htons (listenerPort);
+
+
       socklen = sizeof (serverAddr6);
       serverAddr = (struct sockaddr *) &serverAddr6;
     }

Modified: GNUnet/src/util/network/ipcheck.c
===================================================================
--- GNUnet/src/util/network/ipcheck.c   2008-10-03 06:01:23 UTC (rev 7733)
+++ GNUnet/src/util/network/ipcheck.c   2008-10-05 05:47:10 UTC (rev 7734)
@@ -399,20 +399,20 @@
   unsigned int j;
   struct in6_addr zero;
 
-  i = 0;
   if (list == NULL)
     return GNUNET_NO;
 
   memset (&zero, 0, sizeof (struct in6_addr));
-  while ((memcmp (&zero, &list[i].network, sizeof (struct in6_addr)) != 0) ||
-         (memcmp (&zero, &list[i].netmask, sizeof (struct in6_addr)) != 0))
+  i = 0;
+ NEXT:
+  while (memcmp (&zero, &list[i].network, sizeof (struct in6_addr)) != 0) 
     {
       for (j = 0; j < sizeof (struct in6_addr) / sizeof (int); j++)
         if (((((int *) ip)[j] & ((int *) &list[i].netmask)[j])) !=
             (((int *) &list[i].network)[j] & ((int *) &list[i].netmask)[j]))
           {
             i++;
-            continue;
+            goto NEXT;
           }
       return GNUNET_YES;
     }

Modified: GNUnet/src/util/network_client/tcpio.c
===================================================================
--- GNUnet/src/util/network_client/tcpio.c      2008-10-03 06:01:23 UTC (rev 
7733)
+++ GNUnet/src/util/network_client/tcpio.c      2008-10-05 05:47:10 UTC (rev 
7734)
@@ -95,10 +95,20 @@
       GNUNET_GE_LOG (ectx,
                      GNUNET_GE_ERROR | GNUNET_GE_USER | GNUNET_GE_BULK,
                      _
-                     ("Could not find valid value for HOST in section 
NETWORK."));
+                     ("Could not find valid value for HOST in section 
NETWORK.\n"));
       return 2087;
     }
-  pos = strstr (res, ":");
+  if (res[0] == '[')
+    {
+      /* IPv6 */
+      pos = strstr (res, "]");
+      if (pos != NULL)
+       pos = strstr (pos, ":");        
+    }
+  else
+    {
+      pos = strstr (res, ":");
+    }
   if (pos == NULL)
     {
       GNUNET_free (res);
@@ -110,7 +120,7 @@
       GNUNET_GE_LOG (ectx,
                      GNUNET_GE_ERROR | GNUNET_GE_USER | GNUNET_GE_BULK,
                      _
-                     ("Syntax error in configuration entry HOST in section 
NETWORK: `%s'"),
+                     ("Syntax error in configuration entry HOST in section 
NETWORK: `%s'\n"),
                      pos);
       GNUNET_free (res);
       return 2087;
@@ -141,12 +151,28 @@
       GNUNET_GE_LOG (ectx,
                      GNUNET_GE_ERROR | GNUNET_GE_USER | GNUNET_GE_BULK,
                      _
-                     ("Could not find valid value for HOST in section 
NETWORK."));
+                     ("Could not find valid value for HOST in section 
NETWORK.\n"));
       return NULL;
     }
-  pos = strstr (res, ":");
-  if (pos != NULL)
-    *pos = '\0';
+  if (res[0] == '[')
+    {
+      /* IPv6 */
+      pos = strstr (res, "]");
+      if (pos != NULL)
+       {
+         pos[0] = '\0';
+         memmove(res,
+                 &res[1],
+                 strlen(&res[1]));
+         pos[-1] = '\0';
+       }
+    }
+  else
+    { 
+      pos = strstr (res, ":");
+      if (pos != NULL)
+       *pos = '\0';
+    }
   return res;
 }
 





reply via email to

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