projects
/
oweals
/
gnunet.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fix whitespace
[oweals/gnunet.git]
/
src
/
nat
/
gnunet-helper-nat-server-windows.c
diff --git
a/src/nat/gnunet-helper-nat-server-windows.c
b/src/nat/gnunet-helper-nat-server-windows.c
index 8386a15b14aa3624d85137378a90fee7e8dbf111..09bd025386e1e878450a3e91f0cb287109255b3e 100644
(file)
--- 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.
/*
This file is part of GNUnet.
- (C) 2010 Christian Grothoff (and other contributing authors)
+ Copyright (C) 2010 GNUnet e.V.
GNUnet is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published
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
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., 5
9 Temple Place - Suite 330
,
- Boston, MA 0211
1-1307
, USA.
+ Free Software Foundation, Inc., 5
1 Franklin Street, Fifth Floor
,
+ Boston, MA 0211
0-1301
, USA.
*/
/**
*/
/**
@@
-41,8
+41,10
@@
* - Christian Grothoff
*/
#define _GNU_SOURCE
* - Christian Grothoff
*/
#define _GNU_SOURCE
+/* Instead of including gnunet_common.h */
+#define GNUNET_memcpy(dst,src,n) do { if (0 != n) { (void) memcpy (dst,src,n); } } while (0)
-
+#define FD_SETSIZE 1024
#include <winsock2.h>
#include <ws2tcpip.h>
#include <sys/time.h>
#include <winsock2.h>
#include <ws2tcpip.h>
#include <sys/time.h>
@@
-70,6
+72,11
@@
*/
#define NAT_TRAV_PORT 22225
*/
#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.
*/
/**
* TTL to use for our outgoing messages.
*/
@@
-182,6
+189,11
@@
struct udp_header
uint16_t crc;
};
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.
*/
/**
* Socket we use to receive "fake" ICMP replies.
*/
@@
-265,7
+277,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.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;
ip_pkt.flags_frag_offset = 0;
ip_pkt.ttl = IPDEFTTL;
ip_pkt.proto = IPPROTO_ICMP;
@@
-274,7
+286,7
@@
send_icmp_echo (const struct in_addr *my_ip)
ip_pkt.dst_ip = dummy.s_addr;
ip_pkt.checksum =
htons (calc_checksum ((uint16_t *) & ip_pkt, sizeof (struct ip_header)));
ip_pkt.dst_ip = dummy.s_addr;
ip_pkt.checksum =
htons (calc_checksum ((uint16_t *) & ip_pkt, sizeof (struct ip_header)));
- memcpy (&packet[off], &ip_pkt, sizeof (struct ip_header));
+
GNUNET_
memcpy (&packet[off], &ip_pkt, sizeof (struct ip_header));
off += sizeof (struct ip_header);
icmp_echo.type = ICMP_ECHO;
off += sizeof (struct ip_header);
icmp_echo.type = ICMP_ECHO;
@@
-284,7
+296,7
@@
send_icmp_echo (const struct in_addr *my_ip)
icmp_echo.checksum =
htons (calc_checksum
((uint16_t *) & icmp_echo, sizeof (struct icmp_echo_header)));
icmp_echo.checksum =
htons (calc_checksum
((uint16_t *) & icmp_echo, sizeof (struct icmp_echo_header)));
- memcpy (&packet[off], &icmp_echo, sizeof (struct icmp_echo_header));
+
GNUNET_
memcpy (&packet[off], &icmp_echo, sizeof (struct icmp_echo_header));
off += sizeof (struct icmp_echo_header);
memset (&dst, 0, sizeof (dst));
off += sizeof (struct icmp_echo_header);
memset (&dst, 0, sizeof (dst));
@@
-367,10
+379,10
@@
process_icmp_response ()
return;
}
off = 0;
return;
}
off = 0;
- memcpy (&ip_pkt, &buf[off], sizeof (struct ip_header));
+
GNUNET_
memcpy (&ip_pkt, &buf[off], sizeof (struct ip_header));
off += sizeof (struct ip_header);
off += sizeof (struct ip_header);
- memcpy (&source_ip, &ip_pkt.src_ip, sizeof (source_ip));
- memcpy (&icmp_ttl, &buf[off], sizeof (struct icmp_ttl_exceeded_header));
+
GNUNET_
memcpy (&source_ip, &ip_pkt.src_ip, sizeof (source_ip));
+
GNUNET_
memcpy (&icmp_ttl, &buf[off], sizeof (struct icmp_ttl_exceeded_header));
off += sizeof (struct icmp_ttl_exceeded_header);
if ((ICMP_TIME_EXCEEDED != icmp_ttl.type) || (0 != icmp_ttl.code))
{
off += sizeof (struct icmp_ttl_exceeded_header);
if ((ICMP_TIME_EXCEEDED != icmp_ttl.type) || (0 != icmp_ttl.code))
{
@@
-378,7
+390,7
@@
process_icmp_response ()
return;
}
/* skip 2nd IP header */
return;
}
/* skip 2nd IP header */
- memcpy (&ip_pkt, &buf[off], sizeof (struct ip_header));
+
GNUNET_
memcpy (&ip_pkt, &buf[off], sizeof (struct ip_header));
off += sizeof (struct ip_header);
switch (ip_pkt.proto)
off += sizeof (struct ip_header);
switch (ip_pkt.proto)
@@
-393,7
+405,7
@@
process_icmp_response ()
return;
}
/* grab ICMP ECHO content */
return;
}
/* grab ICMP ECHO content */
- memcpy (&icmp_echo, &buf[off], sizeof (struct icmp_echo_header));
+
GNUNET_
memcpy (&icmp_echo, &buf[off], sizeof (struct icmp_echo_header));
port = (uint16_t) ntohl (icmp_echo.reserved);
break;
case IPPROTO_UDP:
port = (uint16_t) ntohl (icmp_echo.reserved);
break;
case IPPROTO_UDP:
@@
-405,7
+417,7
@@
process_icmp_response ()
return;
}
/* grab UDP content */
return;
}
/* grab UDP content */
- memcpy (&udp_pkt, &buf[off], sizeof (struct udp_header));
+
GNUNET_
memcpy (&udp_pkt, &buf[off], sizeof (struct udp_header));
port = ntohs (udp_pkt.length);
break;
default:
port = ntohs (udp_pkt.length);
break;
default:
@@
-521,9
+533,18
@@
main (int argc, char *const *argv)
fd_set rs;
struct timeval tv;
WSADATA wsaData;
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,
if (2 != argc)
{
fprintf (stderr,
@@
-561,7
+582,8
@@
main (int argc, char *const *argv)
closesocket (rawsock);
return 3;
}
closesocket (rawsock);
return 3;
}
- while (1)
+
+ while ( ! privilege_testing)
{
FD_ZERO (&rs);
FD_SET (icmpsock, &rs);
{
FD_ZERO (&rs);
FD_SET (icmpsock, &rs);
@@
-586,6
+608,8
@@
main (int argc, char *const *argv)
closesocket (rawsock);
closesocket (udpsock);
WSACleanup ();
closesocket (rawsock);
closesocket (udpsock);
WSACleanup ();
+ if (privilege_testing)
+ return 0;
return 4;
}
return 4;
}