]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Fix setting target port in get_interface_address6
authorSebastian Hahn <sebastian@torproject.org>
Sat, 5 Mar 2011 14:20:55 +0000 (15:20 +0100)
committerSebastian Hahn <sebastian@torproject.org>
Sat, 5 Mar 2011 15:58:20 +0000 (16:58 +0100)
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

changes/bug2660
src/common/address.c

index fe2295635277ce548ae327b62e4af68b5522bf66..2aa06d36f589cb096674deeeb8ecf35977d95abb 100644 (file)
@@ -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.
+
index 90beae0da3890b0fac10a687c0d0149b133b2a74..a2780fb051cf31a8698ede222f614e22115a5a8a 100644 (file)
@@ -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;