gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] r13284 - gnunet/src/transport


From: gnunet
Subject: [GNUnet-SVN] r13284 - gnunet/src/transport
Date: Fri, 15 Oct 2010 11:15:15 +0200

Author: nevans
Date: 2010-10-15 11:15:15 +0200 (Fri, 15 Oct 2010)
New Revision: 13284

Modified:
   gnunet/src/transport/test_transport_api.c
   gnunet/src/transport/test_transport_api_reliability.c
Log:
fix logging for transport testcase, do suid nat binary check in reliability 
testcase (execution is pointless)

Modified: gnunet/src/transport/test_transport_api.c
===================================================================
--- gnunet/src/transport/test_transport_api.c   2010-10-14 11:49:20 UTC (rev 
13283)
+++ gnunet/src/transport/test_transport_api.c   2010-10-15 09:15:15 UTC (rev 
13284)
@@ -518,6 +518,15 @@
 #ifdef MINGW
   return GNUNET_SYSERR;
 #endif
+
+  GNUNET_log_setup ("test-transport-api",
+#if VERBOSE
+                    "DEBUG",
+#else
+                    "WARNING",
+#endif
+                    NULL);
+
   if (strstr(argv[0], "tcp_nat") != NULL)
     {
       is_tcp_nat = GNUNET_YES;
@@ -557,13 +566,6 @@
       is_http = GNUNET_YES;
     }
 
-  GNUNET_log_setup ("test-transport-api",
-#if VERBOSE
-                    "DEBUG",
-#else
-                    "WARNING",
-#endif
-                    NULL);
   ret = check ();
   GNUNET_DISK_directory_remove ("/tmp/test-gnunetd-transport-peer-1");
   GNUNET_DISK_directory_remove ("/tmp/test-gnunetd-transport-peer-2");

Modified: gnunet/src/transport/test_transport_api_reliability.c
===================================================================
--- gnunet/src/transport/test_transport_api_reliability.c       2010-10-14 
11:49:20 UTC (rev 13283)
+++ gnunet/src/transport/test_transport_api_reliability.c       2010-10-15 
09:15:15 UTC (rev 13284)
@@ -47,7 +47,7 @@
  * 'MAX_PENDING' in 'gnunet-service-transport.c', otherwise
  * messages may be dropped even for a reliable transport.
  */
-#define TOTAL_MSGS (10000)
+#define TOTAL_MSGS (10000 * 2)
 
 /**
  * How long until we give up on transmitting the message?
@@ -507,7 +507,117 @@
   GNUNET_TRANSPORT_get_hello (p2.th, &exchange_hello_last, &p2);
 }
 
+/**
+ * Return the actual path to a file found in the current
+ * PATH environment variable.
+ *
+ * @param binary the name of the file to find
+ */
+static char *
+get_path_from_PATH (char *binary)
+{
+  char *path;
+  char *pos;
+  char *end;
+  char *buf;
+  const char *p;
 
+  p = getenv ("PATH");
+  if (p == NULL)
+    {
+      GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+                  _("PATH environment variable is unset.\n"));
+      return NULL;
+    }
+  path = GNUNET_strdup (p);     /* because we write on it */
+  buf = GNUNET_malloc (strlen (path) + 20);
+  pos = path;
+
+  while (NULL != (end = strchr (pos, PATH_SEPARATOR)))
+    {
+      *end = '\0';
+      sprintf (buf, "%s/%s", pos, binary);
+      if (GNUNET_DISK_file_test (buf) == GNUNET_YES)
+        {
+          GNUNET_free (path);
+          return buf;
+        }
+      pos = end + 1;
+    }
+  sprintf (buf, "%s/%s", pos, binary);
+  if (GNUNET_DISK_file_test (buf) == GNUNET_YES)
+    {
+      GNUNET_free (path);
+      return buf;
+    }
+  GNUNET_free (buf);
+  GNUNET_free (path);
+  return NULL;
+}
+
+/**
+ * Check whether the suid bit is set on a file.
+ * Attempts to find the file using the current
+ * PATH environment variable as a search path.
+ *
+ * @param binary the name of the file to check
+ *
+ * @return GNUNET_YES if the binary is found and
+ *         can be run properly, GNUNET_NO otherwise
+ */
+static int
+check_gnunet_nat_binary(char *binary)
+{
+  struct stat statbuf;
+  char *p;
+#ifdef MINGW
+  SOCKET rawsock;
+#endif
+
+#ifdef MINGW
+  char *binaryexe;
+  GNUNET_asprintf (&binaryexe, "%s.exe", binary);
+  p = get_path_from_PATH (binaryexe);
+  free (binaryexe);
+#else
+  p = get_path_from_PATH (binary);
+#endif
+  if (p == NULL)
+    {
+      GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+                  _("Could not find binary `%s' in PATH!\n"),
+                  binary);
+      return GNUNET_NO;
+    }
+  if (0 != STAT (p, &statbuf))
+    {
+      GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+                  _("stat (%s) failed: %s\n"),
+                  p,
+                  STRERROR (errno));
+      GNUNET_free (p);
+      return GNUNET_SYSERR;
+    }
+  GNUNET_free (p);
+#ifndef MINGW
+  if ( (0 != (statbuf.st_mode & S_ISUID)) &&
+       (statbuf.st_uid == 0) )
+    return GNUNET_YES;
+  return GNUNET_NO;
+#else
+  rawsock = socket (AF_INET, SOCK_RAW, IPPROTO_ICMP);
+  if (INVALID_SOCKET == rawsock)
+    {
+      DWORD err = GetLastError ();
+      GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+                  "socket (AF_INET, SOCK_RAW, IPPROTO_ICMP) have failed! GLE = 
%d\n", err);
+      return GNUNET_NO; /* not running as administrator */
+    }
+  closesocket (rawsock);
+  return GNUNET_YES;
+#endif
+}
+
 static void
 run (void *cls,
      struct GNUNET_SCHEDULER_Handle *s,
@@ -573,6 +683,13 @@
   setTransportOptions("test_transport_api_data.conf");
 #endif
   ok = 1;
+
+  if ((GNUNET_YES == is_tcp_nat) && 
(check_gnunet_nat_binary("gnunet-nat-server") != GNUNET_YES))
+    {
+      GNUNET_log(GNUNET_ERROR_TYPE_WARNING, "Not running NAT test case, 
binaries not properly installed.\n");
+      return 0;
+    }
+
   GNUNET_PROGRAM_run ((sizeof (argv) / sizeof (char *)) - 1,
                       argv, "test-transport-api-reliability", "nohelp",
                       options, &run, &ok);
@@ -581,42 +698,42 @@
 
   if (is_https)
   {
-         struct stat sbuf;
-         if (0 == stat (cert_file_p1, &sbuf ))
-         {
-                 if (0 == remove(cert_file_p1))
-                         GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Successfully 
removed existing certificate file `%s'\n",cert_file_p1);
-                 else
-                         GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Failed to 
remove certfile `%s'\n",cert_file_p1);
-         }
+    struct stat sbuf;
+    if (0 == stat (cert_file_p1, &sbuf ))
+    {
+      if (0 == remove(cert_file_p1))
+        GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Successfully removed existing 
certificate file `%s'\n",cert_file_p1);
+      else
+        GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Failed to remove certfile 
`%s'\n",cert_file_p1);
+    }
 
-         if (0 == stat (key_file_p1, &sbuf ))
-         {
-                 if (0 == remove(key_file_p1))
-                         GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Successfully 
removed private key file `%s'\n",key_file_p1);
-                 else
-                         GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Failed to 
private key file `%s'\n",key_file_p1);
-         }
+    if (0 == stat (key_file_p1, &sbuf ))
+    {
+      if (0 == remove(key_file_p1))
+        GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Successfully removed private key 
file `%s'\n",key_file_p1);
+      else
+        GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Failed to private key file 
`%s'\n",key_file_p1);
+    }
 
-         if (0 == stat (cert_file_p2, &sbuf ))
-         {
-                 if (0 == remove(cert_file_p2))
-                         GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Successfully 
removed existing certificate file `%s'\n",cert_file_p2);
-                 else
-                         GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Failed to 
remove certfile `%s'\n",cert_file_p2);
-         }
+    if (0 == stat (cert_file_p2, &sbuf ))
+    {
+      if (0 == remove(cert_file_p2))
+        GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Successfully removed existing 
certificate file `%s'\n",cert_file_p2);
+      else
+        GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Failed to remove certfile 
`%s'\n",cert_file_p2);
+    }
 
-         if (0 == stat (key_file_p2, &sbuf ))
-         {
-                 if (0 == remove(key_file_p2))
-                         GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Successfully 
removed private key file `%s'\n",key_file_p2);
-                 else
-                         GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Failed to 
private key file `%s'\n",key_file_p2);
-         }
-         GNUNET_free(key_file_p1);
-         GNUNET_free(key_file_p2);
-         GNUNET_free(cert_file_p1);
-         GNUNET_free(cert_file_p2);
+    if (0 == stat (key_file_p2, &sbuf ))
+    {
+      if (0 == remove(key_file_p2))
+        GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Successfully removed private key 
file `%s'\n",key_file_p2);
+      else
+        GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Failed to private key file 
`%s'\n",key_file_p2);
+    }
+    GNUNET_free(key_file_p1);
+    GNUNET_free(key_file_p2);
+    GNUNET_free(cert_file_p1);
+    GNUNET_free(cert_file_p2);
   }
 
   return ok;




reply via email to

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