improve error reporting, fix zombie attack (#1848)
authorChristian Grothoff <christian@grothoff.org>
Tue, 25 Oct 2011 14:20:53 +0000 (14:20 +0000)
committerChristian Grothoff <christian@grothoff.org>
Tue, 25 Oct 2011 14:20:53 +0000 (14:20 +0000)
src/vpn/gnunet-service-dns.c

index b63e6b5ee5b4ad0cb6a1ff6b87225ac9990149f8..81f5cad984bd438615ec47d4cfe8d280f2dc7234 100644 (file)
@@ -130,7 +130,7 @@ hijack (void *cls
   {
     GNUNET_log (GNUNET_ERROR_TYPE_INFO,
                 "Delaying the hijacking, port is still %d!\n", dnsoutport);
-    GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, hijack, NULL);
+    GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, &hijack, NULL);
     return;
   }
 
@@ -152,7 +152,10 @@ hijack (void *cls
       (proc =
        GNUNET_OS_start_process (NULL, NULL, "gnunet-helper-hijack-dns",
                                 "gnunet-hijack-dns", port_s, virt_dns, NULL)))
+  {
+    GNUNET_break (GNUNET_OK == GNUNET_OS_process_wait (proc));
     GNUNET_OS_process_close (proc);
+  }
   GNUNET_free (virt_dns);
 }
 
@@ -182,7 +185,7 @@ unhijack (unsigned short port)
                                 "gnunet-hijack-dns", "-d", port_s, virt_dns,
                                 NULL)))
     {
-      GNUNET_OS_process_wait (proc);
+      GNUNET_break (GNUNET_OK == GNUNET_OS_process_wait (proc));
       GNUNET_OS_process_close (proc);
     }
   GNUNET_free (virt_dns);
@@ -762,7 +765,7 @@ rehijack (void *cls
           const struct GNUNET_MessageHeader *message __attribute__ ((unused)))
 {
   unhijack (dnsoutport);
-  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, hijack, NULL);
+  GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, &hijack, NULL);
 
   GNUNET_SERVER_receive_done (client, GNUNET_OK);
 }
@@ -1036,9 +1039,11 @@ read_response (void *cls
 #ifndef MINGW
   if (0 != ioctl (GNUNET_NETWORK_get_fd (dnsout), FIONREAD, &len))
   {
+    GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING,
+                       "ioctl");
     unhijack (dnsoutport);
     if (GNUNET_YES == open_port ())
-      GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, hijack, NULL);
+      GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, &hijack, NULL);
     return;
   }
 #else
@@ -1054,9 +1059,11 @@ read_response (void *cls
 
     if (r < 0)
     {
+      GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING,
+                         "recvfrom");
       unhijack (dnsoutport);
       if (GNUNET_YES == open_port ())
-        GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, hijack, NULL);
+        GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, &hijack, NULL);
       return;
     }