]> andersk Git - openssh.git/commitdiff
- (djm) Bug #401: Work around Linux breakage with IPv6 mapped addresses.
authordjm <djm>
Mon, 6 Jan 2003 23:51:23 +0000 (23:51 +0000)
committerdjm <djm>
Mon, 6 Jan 2003 23:51:23 +0000 (23:51 +0000)
   Based on fix from yoshfuji@linux-ipv6.org

ChangeLog
canohost.c

index e89a8105d240d80536e2f0921f2b3e43650ae5be..44b14238183b773f9483eba03292fce914367c5b 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
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)
This page took 0.12901 seconds and 5 git commands to generate.