diff options
author | Christian Grothoff <christian@grothoff.org> | 2011-10-25 14:20:53 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2011-10-25 14:20:53 +0000 |
commit | c8a0ccb72aa1527e8610063700d2ae5718253897 (patch) | |
tree | 67a5a3197c1bbee76b7dcd69aa4c3010e826d88f /src/vpn | |
parent | 272eb1de4b680725344df32a72a2f9570ae537ed (diff) | |
download | gnunet-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.c | 17 |
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 | ||