From: djm Date: Mon, 6 Jan 2003 23:51:23 +0000 (+0000) Subject: - (djm) Bug #401: Work around Linux breakage with IPv6 mapped addresses. X-Git-Tag: V_3_6_P1~109 X-Git-Url: http://andersk.mit.edu/gitweb/openssh.git/commitdiff_plain/e7ccd20dc6db43e7552d3cdb85358cd326e1d66e - (djm) Bug #401: Work around Linux breakage with IPv6 mapped addresses. Based on fix from yoshfuji@linux-ipv6.org --- diff --git a/ChangeLog b/ChangeLog index e89a8105..44b14238 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +20030107 + - (djm) Bug #401: Work around Linux breakage with IPv6 mapped addresses. + Based on fix from yoshfuji@linux-ipv6.org + 20030103 - (djm) Bug #461: ssh-copy-id fails with no arguments. Patch from cjwatson@debian.org diff --git a/canohost.c b/canohost.c index 9aa942a9..941db23b 100644 --- a/canohost.c +++ b/canohost.c @@ -59,11 +59,14 @@ get_remote_hostname(int socket, int verify_reverse_mapping) memset(&from, 0, sizeof(from)); from4->sin_family = AF_INET; + fromlen = sizeof(*from4); memcpy(&from4->sin_addr, &addr, sizeof(addr)); from4->sin_port = port; } } #endif + if (from.ss_family == AF_INET6) + fromlen = sizeof(struct sockaddr_in6); if (getnameinfo((struct sockaddr *)&from, fromlen, ntop, sizeof(ntop), NULL, 0, NI_NUMERICHOST) != 0) @@ -225,6 +228,11 @@ get_socket_address(int socket, int remote, int flags) < 0) return NULL; } + + /* Work around Linux IPv6 weirdness */ + if (addr.ss_family == AF_INET6) + addrlen = sizeof(struct sockaddr_in6); + /* Get the address in ascii. */ if (getnameinfo((struct sockaddr *)&addr, addrlen, ntop, sizeof(ntop), NULL, 0, flags) != 0) { @@ -319,6 +327,11 @@ get_sock_port(int sock, int local) fatal_cleanup(); } } + + /* Work around Linux IPv6 weirdness */ + if (from.ss_family == AF_INET6) + fromlen = sizeof(struct sockaddr_in6); + /* Return port number. */ if (getnameinfo((struct sockaddr *)&from, fromlen, NULL, 0, strport, sizeof(strport), NI_NUMERICSERV) != 0)