diff options
author | Sebastian Hahn <sebastian@torproject.org> | 2010-02-08 15:35:34 +0100 |
---|---|---|
committer | Sebastian Hahn <sebastian@torproject.org> | 2010-02-08 15:49:54 +0100 |
commit | a168cd2a54355c77a72e6553e5e4c5dc844fca50 (patch) | |
tree | 43179308db0188273f425158960c78f83780069d | |
parent | dfee17328950628686bf2c78a8983871f36d97cf (diff) | |
download | tor-a168cd2a54355c77a72e6553e5e4c5dc844fca50.tar.gz tor-a168cd2a54355c77a72e6553e5e4c5dc844fca50.zip |
Don't use gethostbyname() in resolve_my_address()
Tor has tor_lookup_hostname(), which prefers ipv4 addresses automatically.
Bug 1244 occured because gethostbyname() returned an ipv6 address, which
Tor cannot handle currently. Fixes bug 1244; bugfix on 0.0.2pre25.
Reported by Mike Mestnik.
-rw-r--r-- | ChangeLog | 3 | ||||
-rw-r--r-- | src/or/config.c | 8 |
2 files changed, 6 insertions, 5 deletions
@@ -20,6 +20,9 @@ Changes in version 0.2.1.23 - 2010-0?-?? on, detect the OpenSSL version at run-time, not compile time. We need to do this because Apple doesn't update its dev-tools headers when it updates its libraries in a security patch. + - Refactor resolve_my_address() a little, to not use gethostbyname() + anymore. Fixes bug 1244; bugfix on 0.0.2pre25. Reported by Mike + Mestnik. o Minor features: - Avoid a mad rush at the beginning of each month when each client diff --git a/src/or/config.c b/src/or/config.c index 9d9e029b81..a634f16cb6 100644 --- a/src/or/config.c +++ b/src/or/config.c @@ -2339,7 +2339,7 @@ resolve_my_address(int warn_severity, or_options_t *options, uint32_t *addr_out, char **hostname_out) { struct in_addr in; - struct hostent *rent; + uint32_t addr; char hostname[256]; int explicit_ip=1; int explicit_hostname=1; @@ -2369,8 +2369,7 @@ resolve_my_address(int warn_severity, or_options_t *options, if (tor_inet_aton(hostname, &in) == 0) { /* then we have to resolve it */ explicit_ip = 0; - rent = (struct hostent *)gethostbyname(hostname); - if (!rent) { + if(!tor_lookup_hostname(hostname, &addr)) { uint32_t interface_ip; if (explicit_hostname) { @@ -2393,8 +2392,7 @@ resolve_my_address(int warn_severity, or_options_t *options, "local interface. Using that.", tmpbuf); strlcpy(hostname, "<guessed from interfaces>", sizeof(hostname)); } else { - tor_assert(rent->h_length == 4); - memcpy(&in.s_addr, rent->h_addr, rent->h_length); + in.s_addr = htonl(addr); if (!explicit_hostname && is_internal_IP(ntohl(in.s_addr), 0)) { |