Patch for ssh-1.2.27-IPv6-1.5
(ftp://ftp.kyoto.wide.ad.jp/IPv6/ssh/ssh-1.2.27-IPv6-1.5.tar.gz)
on Solaris 8/x86 which seems to have a broken getaddrinfo(3) function,
to get it working. This is a known problem to Sun, but not solved
(as of 2001/01/16).


 - Hubert

--- configure.orig	Tue Jan 16 20:36:10 2001
+++ configure	Tue Jan 16 20:50:09 2001
@@ -4946,12 +4946,17 @@
     }
     for (ai = aitop; ai; ai = ai->ai_next) {
       if (ai->ai_addr == NULL ||
-          ai->ai_addrlen == 0 ||
-          getnameinfo(ai->ai_addr, ai->ai_addrlen,
+          ai->ai_addrlen == 0)
+        goto bad;
+      if (passive == 0 && ai->ai_family == AF_INET &&
+          ((struct sockaddr_in *)ai->ai_addr)->sin_addr.s_addr ==
+        INADDR_LOOPBACK)
+      ((struct sockaddr_in *)ai->ai_addr)->sin_addr.s_addr =
+          htonl(INADDR_LOOPBACK);
+      if (getnameinfo(ai->ai_addr, ai->ai_addrlen,
                       straddr, sizeof(straddr), strport, sizeof(strport),
-                      NI_NUMERICHOST|NI_NUMERICSERV) != 0) {
+                      NI_NUMERICHOST|NI_NUMERICSERV) != 0)
         goto bad;
-      }
       if (strcmp(strport, "54321") != 0) {
         goto bad;
       }
--- newchannels.c.orig	Tue Jan 16 21:05:39 2001
+++ newchannels.c	Tue Jan 16 21:07:01 2001
@@ -2526,3 +2526,30 @@
   packet_put_int(newch);
   packet_send();
 }
+
+
+
+
+
+#ifdef sun
+/* 
+ * Kludge around broken getaddrinfo in Solaris 8/x86
+ */
+#undef getaddrinfo
+int
+getaddrinfo_wa(const char *nodename, const char  *servname,
+    const struct addrinfo *hints, struct addrinfo **res)
+{
+        struct addrinfo *ai;
+        int rc = getaddrinfo(nodename, servname, hints, res);
+
+        if (rc == 0 && nodename == NULL && (hints->ai_flags & AI_PASSIVE) == 0)
+            for (ai = *res; ai; ai = ai->ai_next)
+                if (ai->ai_family == AF_INET &&
+                    ((struct sockaddr_in *)ai->ai_addr)->sin_addr.s_addr ==
+                    INADDR_LOOPBACK)
+                        ((struct sockaddr_in *)ai->ai_addr)->sin_addr.s_addr =
+                            htonl(INADDR_LOOPBACK);
+        return (rc);
+}
+#endif /* sun */
--- ssh.h.orig	Tue Jan 16 21:03:55 2001
+++ ssh.h	Tue Jan 16 21:07:11 2001
@@ -929,6 +929,10 @@
 	struct addrinfo *ai_next;	/* next structure in linked list */
 };
 #endif
+
+#if defined(sun)
+#define getaddrinfo(n,s,h,r)	getaddrinfo_wa(n,s,h,r)
+#endif /* sun */
 #endif /* not ENABLE_IPV6 */
 
 #endif /* SSH_H */
