diff options
author | Daniel Stenberg <daniel@haxx.se> | 2004-08-19 06:44:19 +0000 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2004-08-19 06:44:19 +0000 |
commit | c8c47768c76aac020adc2a7ebf5e45e3ea95abd9 (patch) | |
tree | d0dcb47635b17bff31b45a060cb619ad87b297e4 /lib | |
parent | 62ff567c472838207c2a2409cf41e90dc3e6d6d6 (diff) | |
download | curl-c8c47768c76aac020adc2a7ebf5e45e3ea95abd9.tar.gz |
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.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/hostip6.c | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/lib/hostip6.c b/lib/hostip6.c index 7b0091d4c..596a5733d 100644 --- a/lib/hostip6.c +++ b/lib/hostip6.c @@ -1,8 +1,8 @@ /*************************************************************************** - * _ _ ____ _ - * Project ___| | | | _ \| | - * / __| | | | |_) | | - * | (__| |_| | _ <| |___ + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * 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 * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. - * + * * 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 * 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; int error; char sbuf[NI_MAXSERV]; + char addrbuf[128]; curl_socket_t s; int pf; struct SessionHandle *data = conn->data; + int ai_flags; *waitp=0; /* don't wait, we have the response now */ @@ -244,15 +246,22 @@ Curl_addrinfo *Curl_getaddrinfo(struct connectdata *conn, 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)); hints.ai_family = pf; hints.ai_socktype = SOCK_STREAM; - hints.ai_flags = AI_CANONNAME; + hints.ai_flags = ai_flags; snprintf(sbuf, sizeof(sbuf), "%d", port); error = getaddrinfo(hostname, sbuf, &hints, &res); 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; } |