Ling Thio pointed out that getaddrinfo() reverse-lookups ip-only names, and

this is an attempt to prevent it from doing that. affects ipv6-enabled only.
This commit is contained in:
Daniel Stenberg 2004-08-19 06:44:19 +00:00
parent 62ff567c47
commit c8c47768c7
3 changed files with 28 additions and 9 deletions

View File

@ -6,6 +6,12 @@
Changelog Changelog
Daniel (18 August 2004)
- Ling Thio pointed out that when libcurl is built ipv6-enabled, it still did
reverse DNS lookups when fed with a numerical IP-address (like
http://127.0.0.1/), although it doesn't when built ipv6-disabled. libcurl
should never do reverse lookups.
Daniel (17 August 2004) Daniel (17 August 2004)
- Kjetil Jacobsen noticed that when transferring a file:// URL pointing to an - Kjetil Jacobsen noticed that when transferring a file:// URL pointing to an
empty file, libcurl would return with the file still open. empty file, libcurl would return with the file still open.

View File

@ -14,6 +14,9 @@ This release includes the following changes:
This release includes the following bugfixes: This release includes the following bugfixes:
o no more reverse DNS lookups when getting ip-only address with ipv6-enabled
libcurl
o libcurl works better multi-threaded on AIX (when built with xlc)
o cookies over proxy didn't match the path properly o cookies over proxy didn't match the path properly
o MSVC makefile fixes to build better o MSVC makefile fixes to build better
o FTP response 530 on 'PASS' now sends back a better error message o FTP response 530 on 'PASS' now sends back a better error message
@ -25,6 +28,7 @@ Other curl-related news since the previous public release:
This release would not have looked like this without help, code, reports and This release would not have looked like this without help, code, reports and
advice from friends like these: advice from friends like these:
Casey O'Donnell, Roland Krikava, Alex Casey O'Donnell, Roland Krikava, Alex, Alexander Krasnostavsky, Kjetil
Jacobsen, Ling Thio
Thanks! (and sorry if I forgot to mention someone) Thanks! (and sorry if I forgot to mention someone)

View File

@ -1,8 +1,8 @@
/*************************************************************************** /***************************************************************************
* _ _ ____ _ * _ _ ____ _
* Project ___| | | | _ \| | * Project ___| | | | _ \| |
* / __| | | | |_) | | * / __| | | | |_) | |
* | (__| |_| | _ <| |___ * | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____| * \___|\___/|_| \_\_____|
* *
* Copyright (C) 1998 - 2004, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 1998 - 2004, Daniel Stenberg, <daniel@haxx.se>, et al.
@ -10,7 +10,7 @@
* This software is licensed as described in the file COPYING, which * This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms * you should have received as part of this distribution. The terms
* are also available at http://curl.haxx.se/docs/copyright.html. * are also available at http://curl.haxx.se/docs/copyright.html.
* *
* You may opt to use, copy, modify, merge, publish, distribute and/or sell * You may opt to use, copy, modify, merge, publish, distribute and/or sell
* copies of the Software, and permit persons to whom the Software is * copies of the Software, and permit persons to whom the Software is
* furnished to do so, under the terms of the COPYING file. * furnished to do so, under the terms of the COPYING file.
@ -208,9 +208,11 @@ Curl_addrinfo *Curl_getaddrinfo(struct connectdata *conn,
struct addrinfo hints, *res; struct addrinfo hints, *res;
int error; int error;
char sbuf[NI_MAXSERV]; char sbuf[NI_MAXSERV];
char addrbuf[128];
curl_socket_t s; curl_socket_t s;
int pf; int pf;
struct SessionHandle *data = conn->data; struct SessionHandle *data = conn->data;
int ai_flags;
*waitp=0; /* don't wait, we have the response now */ *waitp=0; /* don't wait, we have the response now */
@ -244,15 +246,22 @@ Curl_addrinfo *Curl_getaddrinfo(struct connectdata *conn,
break; break;
} }
} }
if(1 == inet_pton(pf, addrbuf, sizeof(addrbuf))) {
/* the given address is numerical only, prevent a reverse lookup */
ai_flags = AI_NUMERICHOST;
}
else
ai_flags = AI_CANONNAME;
memset(&hints, 0, sizeof(hints)); memset(&hints, 0, sizeof(hints));
hints.ai_family = pf; hints.ai_family = pf;
hints.ai_socktype = SOCK_STREAM; hints.ai_socktype = SOCK_STREAM;
hints.ai_flags = AI_CANONNAME; hints.ai_flags = ai_flags;
snprintf(sbuf, sizeof(sbuf), "%d", port); snprintf(sbuf, sizeof(sbuf), "%d", port);
error = getaddrinfo(hostname, sbuf, &hints, &res); error = getaddrinfo(hostname, sbuf, &hints, &res);
if (error) { if (error) {
infof(data, "getaddrinfo(3) failed for %s:%d\n", hostname, port); infof(data, "getaddrinfo(3) failed for %s:%d\n", hostname, port);
return NULL; return NULL;
} }