Fix verbosconnect() when ipv6-enabled to not assume that conn->serv_addr

is a valid pointer, but instead always depend on the passed-in dns pointer.
This happens to be NULL when the connection is re-used...
This commit is contained in:
Daniel Stenberg
2004-02-16 13:14:55 +00:00
parent 8415b4a271
commit 39926181ea

View File

@@ -1849,27 +1849,37 @@ static void verboseconnect(struct connectdata *conn,
/* Figure out the ip-number and display the first host name it shows: */ /* Figure out the ip-number and display the first host name it shows: */
#ifdef ENABLE_IPV6 #ifdef ENABLE_IPV6
(void)dns; /* not used in the IPv6 enabled version */
{ {
char hbuf[NI_MAXHOST]; char hbuf[NI_MAXHOST];
#ifdef NI_WITHSCOPEID #ifdef NI_WITHSCOPEID
const int niflags = NI_NUMERICHOST | NI_WITHSCOPEID; #define NIFLAGS NI_NUMERICHOST | NI_WITHSCOPEID
#else #else
const int niflags = NI_NUMERICHOST; #define NIFLAGS NI_NUMERICHOST
#endif #endif
struct addrinfo *ai = conn->serv_addr; if(dns) {
struct addrinfo *ai = dns->addr;
/* Lookup the name of the given address. This should probably be remade
to use the DNS cache instead, as the host name is most likely cached
already. */
if (getnameinfo(ai->ai_addr, ai->ai_addrlen, hbuf, sizeof(hbuf), NULL, 0, if (getnameinfo(ai->ai_addr, ai->ai_addrlen, hbuf, sizeof(hbuf), NULL, 0,
niflags)) { NIFLAGS)) {
snprintf(hbuf, sizeof(hbuf), "?"); snprintf(hbuf, sizeof(hbuf), "unknown");
} }
else {
if (ai->ai_canonname) { if (ai->ai_canonname) {
infof(data, "Connected to %s (%s) port %d\n", ai->ai_canonname, hbuf, infof(data, "Connected to %s (%s) port %d\n", ai->ai_canonname, hbuf,
conn->port); conn->port);
} else { return;
infof(data, "Connected to %s port %d\n", hbuf, conn->port);
} }
} }
}
else {
snprintf(hbuf, sizeof(hbuf), "same host");
}
infof(data, "Connected to %s port %d\n", hbuf, conn->port);
}
#else #else
{ {
Curl_addrinfo *hostaddr=dns?dns->addr:NULL; Curl_addrinfo *hostaddr=dns?dns->addr:NULL;