]> andersk Git - openssh.git/commitdiff
- IPv6 workarounds from Hideaki YOSHIFUJI <yoshfuji@ecei.tohoku.ac.jp>
authordamien <damien>
Sat, 11 Mar 2000 09:45:40 +0000 (09:45 +0000)
committerdamien <damien>
Sat, 11 Mar 2000 09:45:40 +0000 (09:45 +0000)
CREDITS
ChangeLog
acconfig.h
canohost.c
channels.c
configure.in

diff --git a/CREDITS b/CREDITS
index 50a0447eb119cefc8490c567e7b742d169aaf9c1..43f1c1a76167ad0ed65041eb2b4167eda5736bf7 100644 (file)
--- a/CREDITS
+++ b/CREDITS
@@ -19,6 +19,7 @@ David Agraz <dagraz@jahoopa.com> - Build fixes
 David Rankin <drankin@bohemians.lexington.ky.us> - libwrap, AIX, NetBSD fixes
 Gary E. Miller <gem@rellim.com> - SCO support
 HARUYAMA Seigo <haruyama@nt.phys.s.u-tokyo.ac.jp> - Translations & doc fixes
+Hideaki YOSHIFUJI <yoshfuji@ecei.tohoku.ac.jp> - IPv6 fixes
 Hiroshi Takekawa <takekawa@sr3.t.u-tokyo.ac.jp> - Configure fixes
 Holger Trapp <Holger.Trapp@Informatik.TU-Chemnitz.DE> - KRB4/AFS config patch
 Jani Hakala <jahakala@cc.jyu.fi> - Patches
index eba385a8f7348651f9e2ed620a60d761b2cb1282..04fef5effe672be7d93826b9cda1816e7b95f491 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -4,6 +4,7 @@
    [sshd.c]
     - disallow guessing of root password
  - More configure fixes
+ - IPv6 workarounds from Hideaki YOSHIFUJI <yoshfuji@ecei.tohoku.ac.jp>
 
 20000309
  - OpenBSD CVS updates to v1.2.3
index 7f51937a46ba9992756c6e93a4304c2af8d23766..ee3be6e335b895e18963dae180915d2da28fa794 100644 (file)
 /* getaddrinfo is broken (if present) */
 #undef BROKEN_GETADDRINFO
 
+/* Workaround more Linux IPv6 bugs */
+#undef DONT_TRY_OTHER_AF
+
+/* Detect IPv4 in IPv6 mapped addresses and treat as IPv4 */
+#undef IPV4_IN_IPV6
+
 @BOTTOM@
 
 /* ******************* Shouldn't need to edit below this line ************** */
index 4e9c6a9236ea29ff89a394d6b0c93445040f169c..bc1b2eb842839e28bf2a95e1b890a8043cc15dc7 100644 (file)
@@ -42,6 +42,30 @@ get_remote_hostname(int socket)
                debug("getpeername failed: %.100s", strerror(errno));
                fatal_cleanup();
        }
+
+#ifdef IPV4_IN_IPV6
+       if (from.ss_family == AF_INET6) {
+               struct sockaddr_in6 *from6 = (struct sockaddr_in6 *)&from;
+
+               /* Detect IPv4 in IPv6 mapped address and convert it to */
+               /* plain (AF_INET) IPv4 address */
+               if (IN6_IS_ADDR_V4MAPPED(&from6->sin6_addr)) {
+                       struct sockaddr_in *from4 = (struct sockaddr_in *)&from;
+                       struct in_addr addr;
+                       u_int16_t port;
+
+                       memcpy(&addr, ((char *)&from6->sin6_addr) + 12, sizeof(addr));
+                       port = from6->sin6_port;
+
+                       memset(&from, 0, sizeof(from));
+                       
+                       from4->sin_family = AF_INET;
+                       memcpy(&from4->sin_addr, &addr, sizeof(addr));
+                       from4->sin_port = port;
+               }
+       }
+#endif
+
        if (getnameinfo((struct sockaddr *)&from, fromlen, ntop, sizeof(ntop),
             NULL, 0, NI_NUMERICHOST) != 0)
                fatal("get_remote_hostname: getnameinfo NI_NUMERICHOST failed");
index 5fe4e5277cf51de13f6e5b841ae124dc3e3aec55..c41394547f6171a4fe097559ada381f96ed91272 100644 (file)
@@ -1215,8 +1215,12 @@ x11_create_display_inet(int screen_number, int x11_display_offset)
                                break;
                        }
                        socks[num_socks++] = sock;
+#ifndef DONT_TRY_OTHER_AF
                        if (num_socks == NUM_SOCKS)
                                break;
+#else
+                       break;
+#endif
                }
                if (num_socks > 0)
                        break;
index 90aadd98fd108b0e5e950664091ba35ba60d6401..4f1e4796e413dad55dcc3a76f46a2b53b51d4991 100644 (file)
@@ -55,6 +55,8 @@ case "$host" in
        ;;
 *-*-linux*)
        no_dev_ptmx=1
+       AC_DEFINE(DONT_TRY_OTHER_AF)
+       inet6_default_4in6=yes
        ;;
 *-*-netbsd*)
        need_dash_r=1
@@ -788,6 +790,26 @@ AC_ARG_WITH(ipv4-default,
        ]
 )
 
+AC_MSG_CHECKING([to convert IPv4 in IPv6-mapped addresses])
+AC_ARG_WITH(4in6,
+       [  --with-4in6             Check for and convert IPv4 in IPv6 mapped addresses],
+       [
+               if test "x$withval" != "xno" ; then
+                       AC_MSG_RESULT(yes)
+                       AC_DEFINE(IPV4_IN_IPV6)
+               else
+                       AC_MSG_RESULT(no)
+               fi
+       ],[
+               if test "x$inet6_default_4in6" = "xyes"; then
+                       AC_MSG_RESULT([yes (default)])
+                       AC_DEFINE(IPV4_IN_IPV6)
+               else
+                       AC_MSG_RESULT([no (default)])
+               fi
+       ]
+)
+
 # Where to place sshd.pid
 piddir=/var/run
 AC_ARG_WITH(pid-dir,
This page took 0.655972 seconds and 5 git commands to generate.