commit c623b9899b133ac9ee24988445c0767902511caa Author: David Goulet dgoulet@ev0ke.net Date: Fri Aug 23 11:48:26 2013 -0400
Fix: gethostbyname IP address byte order
The gethostbyname() call was not returning the IP address in network byte order as stated in the man page.
Reported-by: Micah Anderson micah@riseup.net Signed-off-by: David Goulet dgoulet@ev0ke.net --- src/lib/gethostbyname.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-)
diff --git a/src/lib/gethostbyname.c b/src/lib/gethostbyname.c index 3e3588e..bab01b0 100644 --- a/src/lib/gethostbyname.c +++ b/src/lib/gethostbyname.c @@ -34,7 +34,6 @@ LIBC_GETHOSTBYNAME_RET_TYPE tsocks_gethostbyname(LIBC_GETHOSTBYNAME_SIG) { int ret; uint32_t ip; - const char *ret_str;
DBG("[gethostbyname] Requesting %s hostname", __name);
@@ -54,12 +53,8 @@ LIBC_GETHOSTBYNAME_RET_TYPE tsocks_gethostbyname(LIBC_GETHOSTBYNAME_SIG) memset(tsocks_he_addr_list, 0, sizeof(tsocks_he_addr_list)); memset(tsocks_he_addr, 0, sizeof(tsocks_he_addr));
- ret_str = inet_ntop(AF_INET, &ip, tsocks_he_addr, sizeof(tsocks_he_addr)); - if (!ret_str) { - PERROR("inet_ntop"); - h_errno = NO_ADDRESS; - goto error; - } + /* Copy resolved network byte order IP address. */ + memcpy(tsocks_he_addr, &ip, sizeof(tsocks_he_addr));
tsocks_he_addr_list[0] = tsocks_he_addr; tsocks_he_addr_list[1] = NULL; @@ -70,7 +65,8 @@ LIBC_GETHOSTBYNAME_RET_TYPE tsocks_gethostbyname(LIBC_GETHOSTBYNAME_SIG) tsocks_he.h_addrtype = AF_INET; tsocks_he.h_addr_list = tsocks_he_addr_list;
- DBG("Hostname %s resolved to %s", __name, tsocks_he_addr); + DBG("Hostname %s resolved to %s", __name, + inet_ntoa(*((struct in_addr *) &ip)));
errno = 0; return &tsocks_he;
tor-commits@lists.torproject.org