X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Fnat%2Fgnunet-helper-nat-server-windows.c;h=bb9356d1df1b31dd3f7d1d666dba71743129f9f2;hb=80d2de6cdc4d253c7fbc6a4bc067d856aab9cca9;hp=8386a15b14aa3624d85137378a90fee7e8dbf111;hpb=5746309cb4be2073d550ad7a6885e918631dbc38;p=oweals%2Fgnunet.git diff --git a/src/nat/gnunet-helper-nat-server-windows.c b/src/nat/gnunet-helper-nat-server-windows.c index 8386a15b1..bb9356d1d 100644 --- a/src/nat/gnunet-helper-nat-server-windows.c +++ b/src/nat/gnunet-helper-nat-server-windows.c @@ -1,6 +1,6 @@ /* This file is part of GNUnet. - (C) 2010 Christian Grothoff (and other contributing authors) + Copyright (C) 2010 Christian Grothoff (and other contributing authors) GNUnet is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published @@ -14,8 +14,8 @@ You should have received a copy of the GNU General Public License along with GNUnet; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. + Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. */ /** @@ -42,7 +42,7 @@ */ #define _GNU_SOURCE - +#define FD_SETSIZE 1024 #include #include #include @@ -70,6 +70,11 @@ */ #define NAT_TRAV_PORT 22225 +/** + * Must match packet ID used by gnunet-helper-nat-client.c + */ +#define PACKET_ID 256 + /** * TTL to use for our outgoing messages. */ @@ -182,6 +187,11 @@ struct udp_header uint16_t crc; }; +/** + * Will this binary be run in permissions testing mode? + */ +static boolean privilege_testing = FALSE; + /** * Socket we use to receive "fake" ICMP replies. */ @@ -265,7 +275,7 @@ send_icmp_echo (const struct in_addr *my_ip) ip_pkt.vers_ihl = 0x45; ip_pkt.tos = 0; ip_pkt.pkt_len = htons (sizeof (packet)); - ip_pkt.id = htons (256); + ip_pkt.id = htons (PACKET_ID); ip_pkt.flags_frag_offset = 0; ip_pkt.ttl = IPDEFTTL; ip_pkt.proto = IPPROTO_ICMP; @@ -521,9 +531,18 @@ main (int argc, char *const *argv) fd_set rs; struct timeval tv; WSADATA wsaData; - unsigned int alt; + unsigned int alt = 0; + + if ( (argc > 1) && (0 != strcmp (argv[1], "-d"))) + { + privilege_testing = TRUE; + fprintf (stderr, + "%s", + "DEBUG: Running binary in privilege testing mode."); + argv++; + argc--; + } - alt = 0; if (2 != argc) { fprintf (stderr, @@ -561,7 +580,8 @@ main (int argc, char *const *argv) closesocket (rawsock); return 3; } - while (1) + + while ( ! privilege_testing) { FD_ZERO (&rs); FD_SET (icmpsock, &rs); @@ -586,6 +606,8 @@ main (int argc, char *const *argv) closesocket (rawsock); closesocket (udpsock); WSACleanup (); + if (privilege_testing) + return 0; return 4; }