aboutsummaryrefslogtreecommitdiff
path: root/src/vpn
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2011-10-25 14:20:53 +0000
committerChristian Grothoff <christian@grothoff.org>2011-10-25 14:20:53 +0000
commitc8a0ccb72aa1527e8610063700d2ae5718253897 (patch)
tree67a5a3197c1bbee76b7dcd69aa4c3010e826d88f /src/vpn
parent272eb1de4b680725344df32a72a2f9570ae537ed (diff)
downloadgnunet-c8a0ccb72aa1527e8610063700d2ae5718253897.tar.gz
gnunet-c8a0ccb72aa1527e8610063700d2ae5718253897.zip
improve error reporting, fix zombie attack (#1848)
Diffstat (limited to 'src/vpn')
-rw-r--r--src/vpn/gnunet-service-dns.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/src/vpn/gnunet-service-dns.c b/src/vpn/gnunet-service-dns.c
index b63e6b5ee..81f5cad98 100644
--- a/src/vpn/gnunet-service-dns.c
+++ b/src/vpn/gnunet-service-dns.c
@@ -130,7 +130,7 @@ hijack (void *cls
130 { 130 {
131 GNUNET_log (GNUNET_ERROR_TYPE_INFO, 131 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
132 "Delaying the hijacking, port is still %d!\n", dnsoutport); 132 "Delaying the hijacking, port is still %d!\n", dnsoutport);
133 GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, hijack, NULL); 133 GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, &hijack, NULL);
134 return; 134 return;
135 } 135 }
136 136
@@ -152,7 +152,10 @@ hijack (void *cls
152 (proc = 152 (proc =
153 GNUNET_OS_start_process (NULL, NULL, "gnunet-helper-hijack-dns", 153 GNUNET_OS_start_process (NULL, NULL, "gnunet-helper-hijack-dns",
154 "gnunet-hijack-dns", port_s, virt_dns, NULL))) 154 "gnunet-hijack-dns", port_s, virt_dns, NULL)))
155 {
156 GNUNET_break (GNUNET_OK == GNUNET_OS_process_wait (proc));
155 GNUNET_OS_process_close (proc); 157 GNUNET_OS_process_close (proc);
158 }
156 GNUNET_free (virt_dns); 159 GNUNET_free (virt_dns);
157} 160}
158 161
@@ -182,7 +185,7 @@ unhijack (unsigned short port)
182 "gnunet-hijack-dns", "-d", port_s, virt_dns, 185 "gnunet-hijack-dns", "-d", port_s, virt_dns,
183 NULL))) 186 NULL)))
184 { 187 {
185 GNUNET_OS_process_wait (proc); 188 GNUNET_break (GNUNET_OK == GNUNET_OS_process_wait (proc));
186 GNUNET_OS_process_close (proc); 189 GNUNET_OS_process_close (proc);
187 } 190 }
188 GNUNET_free (virt_dns); 191 GNUNET_free (virt_dns);
@@ -762,7 +765,7 @@ rehijack (void *cls
762 const struct GNUNET_MessageHeader *message __attribute__ ((unused))) 765 const struct GNUNET_MessageHeader *message __attribute__ ((unused)))
763{ 766{
764 unhijack (dnsoutport); 767 unhijack (dnsoutport);
765 GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, hijack, NULL); 768 GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, &hijack, NULL);
766 769
767 GNUNET_SERVER_receive_done (client, GNUNET_OK); 770 GNUNET_SERVER_receive_done (client, GNUNET_OK);
768} 771}
@@ -1036,9 +1039,11 @@ read_response (void *cls
1036#ifndef MINGW 1039#ifndef MINGW
1037 if (0 != ioctl (GNUNET_NETWORK_get_fd (dnsout), FIONREAD, &len)) 1040 if (0 != ioctl (GNUNET_NETWORK_get_fd (dnsout), FIONREAD, &len))
1038 { 1041 {
1042 GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING,
1043 "ioctl");
1039 unhijack (dnsoutport); 1044 unhijack (dnsoutport);
1040 if (GNUNET_YES == open_port ()) 1045 if (GNUNET_YES == open_port ())
1041 GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, hijack, NULL); 1046 GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, &hijack, NULL);
1042 return; 1047 return;
1043 } 1048 }
1044#else 1049#else
@@ -1054,9 +1059,11 @@ read_response (void *cls
1054 1059
1055 if (r < 0) 1060 if (r < 0)
1056 { 1061 {
1062 GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING,
1063 "recvfrom");
1057 unhijack (dnsoutport); 1064 unhijack (dnsoutport);
1058 if (GNUNET_YES == open_port ()) 1065 if (GNUNET_YES == open_port ())
1059 GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, hijack, NULL); 1066 GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, &hijack, NULL);
1060 return; 1067 return;
1061 } 1068 }
1062 1069