diff options
author | Matthias Wachs <wachs@net.in.tum.de> | 2011-11-02 17:05:00 +0000 |
---|---|---|
committer | Matthias Wachs <wachs@net.in.tum.de> | 2011-11-02 17:05:00 +0000 |
commit | 0a82c8fd7bb83ab64797838aaeddce34b8d67fcf (patch) | |
tree | 8279914364589f7403c5aaf07cff1af4361205f0 /src/nat | |
parent | cbbfa621ff1d2ea316ead01d4dcb1c1854db0cb4 (diff) | |
download | gnunet-0a82c8fd7bb83ab64797838aaeddce34b8d67fcf.tar.gz gnunet-0a82c8fd7bb83ab64797838aaeddce34b8d67fcf.zip |
disable local addresses
Diffstat (limited to 'src/nat')
-rw-r--r-- | src/nat/nat.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/src/nat/nat.c b/src/nat/nat.c index 6e2011347..2040451d5 100644 --- a/src/nat/nat.c +++ b/src/nat/nat.c | |||
@@ -335,6 +335,11 @@ struct GNUNET_NAT_Handle | |||
335 | int use_localaddresses; | 335 | int use_localaddresses; |
336 | 336 | ||
337 | /** | 337 | /** |
338 | * Should we return local addresses to clients | ||
339 | */ | ||
340 | int return_localaddress; | ||
341 | |||
342 | /** | ||
338 | * Should we do a DNS lookup of our hostname to find out our own IP? | 343 | * Should we do a DNS lookup of our hostname to find out our own IP? |
339 | */ | 344 | */ |
340 | int use_hostname; | 345 | int use_hostname; |
@@ -642,9 +647,19 @@ process_interfaces (void *cls, const char *name, int isDefault, | |||
642 | case AF_INET: | 647 | case AF_INET: |
643 | s4 = (struct sockaddr_in *) addr; | 648 | s4 = (struct sockaddr_in *) addr; |
644 | ip = &s4->sin_addr; | 649 | ip = &s4->sin_addr; |
650 | |||
651 | /* Check if address is in 127.0.0.0/8 */ | ||
652 | uint32_t address = ntohl((in_addr_t)(s4->sin_addr.s_addr)); | ||
653 | uint32_t value = (address & 0xFF000000) ^ 0x7F000000; | ||
654 | if ((h->return_localaddress == GNUNET_NO) && (value == 0)) | ||
655 | { | ||
656 | return GNUNET_OK; | ||
657 | } | ||
645 | if (GNUNET_YES == h->use_localaddresses) | 658 | if (GNUNET_YES == h->use_localaddresses) |
659 | { | ||
646 | add_ip_to_address_list (h, LAL_INTERFACE_ADDRESS, &s4->sin_addr, | 660 | add_ip_to_address_list (h, LAL_INTERFACE_ADDRESS, &s4->sin_addr, |
647 | sizeof (struct in_addr)); | 661 | sizeof (struct in_addr)); |
662 | } | ||
648 | break; | 663 | break; |
649 | case AF_INET6: | 664 | case AF_INET6: |
650 | s6 = (struct sockaddr_in6 *) addr; | 665 | s6 = (struct sockaddr_in6 *) addr; |
@@ -653,10 +668,17 @@ process_interfaces (void *cls, const char *name, int isDefault, | |||
653 | /* skip link local addresses */ | 668 | /* skip link local addresses */ |
654 | return GNUNET_OK; | 669 | return GNUNET_OK; |
655 | } | 670 | } |
671 | if ((h->return_localaddress == GNUNET_NO) && | ||
672 | (IN6_IS_ADDR_LOOPBACK (&((struct sockaddr_in6 *) addr)->sin6_addr))) | ||
673 | { | ||
674 | return GNUNET_OK; | ||
675 | } | ||
656 | ip = &s6->sin6_addr; | 676 | ip = &s6->sin6_addr; |
657 | if (GNUNET_YES == h->use_localaddresses) | 677 | if (GNUNET_YES == h->use_localaddresses) |
678 | { | ||
658 | add_ip_to_address_list (h, LAL_INTERFACE_ADDRESS, &s6->sin6_addr, | 679 | add_ip_to_address_list (h, LAL_INTERFACE_ADDRESS, &s6->sin6_addr, |
659 | sizeof (struct in6_addr)); | 680 | sizeof (struct in6_addr)); |
681 | } | ||
660 | break; | 682 | break; |
661 | default: | 683 | default: |
662 | GNUNET_break (0); | 684 | GNUNET_break (0); |
@@ -1116,6 +1138,9 @@ GNUNET_NAT_register (const struct GNUNET_CONFIGURATION_Handle *cfg, int is_tcp, | |||
1116 | GNUNET_CONFIGURATION_get_value_yesno (cfg, "nat", "ENABLE_UPNP"); | 1138 | GNUNET_CONFIGURATION_get_value_yesno (cfg, "nat", "ENABLE_UPNP"); |
1117 | h->use_localaddresses = | 1139 | h->use_localaddresses = |
1118 | GNUNET_CONFIGURATION_get_value_yesno (cfg, "nat", "USE_LOCALADDR"); | 1140 | GNUNET_CONFIGURATION_get_value_yesno (cfg, "nat", "USE_LOCALADDR"); |
1141 | h->return_localaddress = | ||
1142 | GNUNET_CONFIGURATION_get_value_yesno (cfg, "nat", "RETURN_LOCAL_ADDRESSES"); | ||
1143 | |||
1119 | h->use_hostname = | 1144 | h->use_hostname = |
1120 | GNUNET_CONFIGURATION_get_value_yesno (cfg, "nat", "USE_HOSTNAME"); | 1145 | GNUNET_CONFIGURATION_get_value_yesno (cfg, "nat", "USE_HOSTNAME"); |
1121 | h->disable_ipv6 = | 1146 | h->disable_ipv6 = |