]> git.ipfire.org Git - thirdparty/openssh-portable.git/commitdiff
- (djm) Bug #401: Work around Linux breakage with IPv6 mapped addresses.
authorDamien Miller <djm@mindrot.org>
Mon, 6 Jan 2003 23:51:23 +0000 (10:51 +1100)
committerDamien Miller <djm@mindrot.org>
Mon, 6 Jan 2003 23:51:23 +0000 (10:51 +1100)
   Based on fix from yoshfuji@linux-ipv6.org

ChangeLog
canohost.c

index 28e6ac4a228c0253ab5b542ee2d67962176cda59..0c6e463f0c9e31ba5b1e4b2ca3c32e12b4283b0d 100644 (file)
--- 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
      save auth method before monitor_reset_key_state(); bugzilla bug #284;
      ok provos@
 
-$Id: ChangeLog,v 1.2540 2003/01/03 03:52:53 djm Exp $
+$Id: ChangeLog,v 1.2541 2003/01/06 23:51:23 djm Exp $
index 9aa942a9f4c51cd6b257184defddbf6d09202fc6..941db23b64bf138c93b5abae201c225dbcf7d9d3 100644 (file)
@@ -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)