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,26 +1849,36 @@ 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;
if (getnameinfo(ai->ai_addr, ai->ai_addrlen, hbuf, sizeof(hbuf), NULL, 0, /* Lookup the name of the given address. This should probably be remade
niflags)) { to use the DNS cache instead, as the host name is most likely cached
snprintf(hbuf, sizeof(hbuf), "?"); already. */
if (getnameinfo(ai->ai_addr, ai->ai_addrlen, hbuf, sizeof(hbuf), NULL, 0,
NIFLAGS)) {
snprintf(hbuf, sizeof(hbuf), "unknown");
}
else {
if (ai->ai_canonname) {
infof(data, "Connected to %s (%s) port %d\n", ai->ai_canonname, hbuf,
conn->port);
return;
}
}
} }
if (ai->ai_canonname) { else {
infof(data, "Connected to %s (%s) port %d\n", ai->ai_canonname, hbuf, snprintf(hbuf, sizeof(hbuf), "same host");
conn->port);
} else {
infof(data, "Connected to %s port %d\n", hbuf, conn->port);
} }
infof(data, "Connected to %s port %d\n", hbuf, conn->port);
} }
#else #else
{ {