summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Hahn <sebastian@torproject.org>2011-03-05 15:20:55 +0100
committerSebastian Hahn <sebastian@torproject.org>2011-03-05 16:58:20 +0100
commitf83debb51d7fa4a1827967d8bea145636c855f89 (patch)
tree3fcedc47a6f0e11bacd5540c6eb6de787988a414
parent865ea5d26361802d53c586d27f249e5c2e924538 (diff)
downloadtor-f83debb51d7fa4a1827967d8bea145636c855f89.tar.gz
tor-f83debb51d7fa4a1827967d8bea145636c855f89.zip
Fix setting target port in get_interface_address6
We want to use the discard port correctly, so a htons() was missing. Also we need to set it correctly depending on address family. Review provided by danieldg
-rw-r--r--changes/bug26606
-rw-r--r--src/common/address.c6
2 files changed, 9 insertions, 3 deletions
diff --git a/changes/bug2660 b/changes/bug2660
index fe22956352..2aa06d36f5 100644
--- a/changes/bug2660
+++ b/changes/bug2660
@@ -1,3 +1,7 @@
o Minor bugfixes:
- Fix connect() failures on some platforms (BSD, OS X). Bugfix on
- 0.2.0.3-alpha; fixes bug 2660. Patch by piebeer.
+ 0.2.0.3-alpha; fixes first part of bug 2660. Patch by piebeer.
+ - Set target port in get_interface_address6() correctly. Bugfix
+ on 0.1.1.4-alpha and 0.2.0.3-alpha; fixes second part of bug
+ 2660.
+
diff --git a/src/common/address.c b/src/common/address.c
index 90beae0da3..a2780fb051 100644
--- a/src/common/address.c
+++ b/src/common/address.c
@@ -1031,18 +1031,20 @@ get_interface_address6(int severity, sa_family_t family, tor_addr_t *addr)
memset(addr, 0, sizeof(tor_addr_t));
memset(&target_addr, 0, sizeof(target_addr));
- /* Use the "discard" service port */
- ((struct sockaddr_in*)&target_addr)->sin_port = 9;
/* Don't worry: no packets are sent. We just need to use a real address
* on the actual Internet. */
if (family == AF_INET6) {
struct sockaddr_in6 *sin6 = (struct sockaddr_in6*)&target_addr;
+ /* Use the "discard" service port */
+ sin6->sin6_port = htons(9);
sock = tor_open_socket(PF_INET6,SOCK_DGRAM,IPPROTO_UDP);
addr_len = (socklen_t)sizeof(struct sockaddr_in6);
sin6->sin6_family = AF_INET6;
S6_ADDR16(sin6->sin6_addr)[0] = htons(0x2002); /* 2002:: */
} else if (family == AF_INET) {
struct sockaddr_in *sin = (struct sockaddr_in*)&target_addr;
+ /* Use the "discard" service port */
+ sin->sin_port = htons(9);
sock = tor_open_socket(PF_INET,SOCK_DGRAM,IPPROTO_UDP);
addr_len = (socklen_t)sizeof(struct sockaddr_in);
sin->sin_family = AF_INET;