mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-24 20:33:31 +01:00
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
This commit is contained in:
parent
865ea5d263
commit
f83debb51d
@ -1,3 +1,7 @@
|
|||||||
o Minor bugfixes:
|
o Minor bugfixes:
|
||||||
- Fix connect() failures on some platforms (BSD, OS X). Bugfix on
|
- 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.
|
||||||
|
|
||||||
|
@ -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(addr, 0, sizeof(tor_addr_t));
|
||||||
memset(&target_addr, 0, sizeof(target_addr));
|
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
|
/* Don't worry: no packets are sent. We just need to use a real address
|
||||||
* on the actual Internet. */
|
* on the actual Internet. */
|
||||||
if (family == AF_INET6) {
|
if (family == AF_INET6) {
|
||||||
struct sockaddr_in6 *sin6 = (struct sockaddr_in6*)&target_addr;
|
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);
|
sock = tor_open_socket(PF_INET6,SOCK_DGRAM,IPPROTO_UDP);
|
||||||
addr_len = (socklen_t)sizeof(struct sockaddr_in6);
|
addr_len = (socklen_t)sizeof(struct sockaddr_in6);
|
||||||
sin6->sin6_family = AF_INET6;
|
sin6->sin6_family = AF_INET6;
|
||||||
S6_ADDR16(sin6->sin6_addr)[0] = htons(0x2002); /* 2002:: */
|
S6_ADDR16(sin6->sin6_addr)[0] = htons(0x2002); /* 2002:: */
|
||||||
} else if (family == AF_INET) {
|
} else if (family == AF_INET) {
|
||||||
struct sockaddr_in *sin = (struct sockaddr_in*)&target_addr;
|
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);
|
sock = tor_open_socket(PF_INET,SOCK_DGRAM,IPPROTO_UDP);
|
||||||
addr_len = (socklen_t)sizeof(struct sockaddr_in);
|
addr_len = (socklen_t)sizeof(struct sockaddr_in);
|
||||||
sin->sin_family = AF_INET;
|
sin->sin_family = AF_INET;
|
||||||
|
Loading…
Reference in New Issue
Block a user