- Merged OpenBSD IPv6 patch:
   - [sshd.c sshd.8 sshconnect.c ssh.h ssh.c servconf.h servconf.c scp.1]
     [scp.c packet.h packet.c login.c log.c canohost.c channels.c]
     [hostfile.c sshd_config]
     ipv6 support: mostly gethostbyname->getaddrinfo/getnameinfo, new
     features: sshd allows multiple ListenAddress and Port options. note
     that libwrap is not IPv6-ready. (based on patches from
     fujiwara@rcac.tdi.co.jp)
   - [ssh.c canohost.c]
     more hints (hints.ai_socktype=SOCK_STREAM) for getaddrinfo,
     from itojun@
   - [channels.c]
     listen on _all_ interfaces for X11-Fwd (hints.ai_flags = AI_PASSIVE)
   - [packet.h]
     allow auth-kerberos for IPv4 only
   - [scp.1 sshd.8 servconf.h scp.c]
     document -4, -6, and 'ssh -L 2022/::1/22'
   - [ssh.c]
     'ssh @host' is illegal (null user name), from
     karsten@gedankenpolizei.de
   - [sshconnect.c]
     better error message
   - [sshd.c]
     allow auth-kerberos for IPv4 only
 - Big IPv6 merge:
   - Cleanup overrun in sockaddr copying on RHL 6.1
   - Replacements for getaddrinfo, getnameinfo, etc based on versions
     from patch from KIKUCHI Takahiro <kick@kyoto.wide.ad.jp>
   - Replacement for missing structures on systems that lack IPv6
   - record_login needed to know about AF_INET6 addresses
   - Borrowed more code from OpenBSD: rresvport_af and requisites
diff --git a/configure.in b/configure.in
index a665402..ab175d4 100644
--- a/configure.in
+++ b/configure.in
@@ -128,7 +128,7 @@
 AC_CHECK_HEADERS(bstring.h endian.h lastlog.h login.h maillock.h netdb.h netgroup.h paths.h poll.h pty.h shadow.h security/pam_appl.h sys/bsdtty.h sys/cdefs.h sys/poll.h sys/select.h sys/stropts.h sys/time.h sys/ttcompat.h util.h utmp.h utmpx.h)
 
 dnl Checks for library functions.
-AC_CHECK_FUNCS(arc4random getpagesize _getpty innetgr md5_crypt mkdtemp openpty setenv seteuid setlogin setproctitle setreuid snprintf strlcat strlcpy updwtmpx vsnprintf)
+AC_CHECK_FUNCS(arc4random bindresvport_af freeaddrinfo gai_strerror getaddrinfo getpagesize getnameinfo _getpty innetgr md5_crypt mkdtemp openpty  rresvport_af setenv seteuid setlogin setproctitle setreuid snprintf strlcat strlcpy updwtmpx vsnprintf)
 
 AC_CHECK_FUNC(login, 
 	[AC_DEFINE(HAVE_LOGIN)],
@@ -169,7 +169,7 @@
 	[AC_MSG_RESULT(no)]
 ) 
 
-AC_MSG_CHECKING([For uintXX_t types])
+AC_MSG_CHECKING([for uintXX_t types])
 AC_TRY_COMPILE(
 	[#include <sys/types.h>], 
 	[uint16_t c; uint32_t d; c = 1235; d = 1235;], 
@@ -180,7 +180,7 @@
 	[AC_MSG_RESULT(no)]
 ) 
 
-AC_MSG_CHECKING([For socklen_t])
+AC_MSG_CHECKING([for socklen_t])
 AC_TRY_COMPILE(
 	[
 		#include <sys/types.h>
@@ -194,7 +194,7 @@
 	[AC_MSG_RESULT(no)]
 )
 
-AC_MSG_CHECKING([For size_t])
+AC_MSG_CHECKING([for size_t])
 AC_TRY_COMPILE(
 	[#include <sys/types.h>],
 	[size_t foo; foo = 1235;],
@@ -205,6 +205,53 @@
 	[AC_MSG_RESULT(no)]
 )
 
+AC_MSG_CHECKING([for struct sockaddr_storage])
+AC_TRY_COMPILE(
+	[#include <sys/socket.h>],
+	[struct sockaddr_storage s;],
+	[
+		AC_DEFINE(HAVE_STRUCT_SOCKADDR_STORAGE)
+		AC_MSG_RESULT(yes)
+	],
+	[AC_MSG_RESULT(no)]
+)
+
+AC_MSG_CHECKING([for struct sockaddr_in6])
+AC_TRY_COMPILE(
+	[#include <netinet/in.h>],
+	[struct sockaddr_in6 s; s.sin6_family = 0;],
+	[
+		AC_DEFINE(HAVE_STRUCT_SOCKADDR_IN6)
+		AC_MSG_RESULT(yes)
+	],
+	[AC_MSG_RESULT(no)]
+)
+
+AC_MSG_CHECKING([for struct in6_addr])
+AC_TRY_COMPILE(
+	[#include <netinet/in.h>],
+	[struct in6_addr s; s.s6_addr[0] = 0;],
+	[
+		AC_DEFINE(HAVE_STRUCT_IN6_ADDR)
+		AC_MSG_RESULT(yes)
+	],
+	[AC_MSG_RESULT(no)]
+)
+
+AC_MSG_CHECKING([for struct addrinfo])
+AC_TRY_COMPILE(
+	[
+		#include <sys/socket.h>
+		#include <netdb.h>
+	],
+	[struct addrinfo s; s.ai_flags = AI_PASSIVE;],
+	[
+		AC_DEFINE(HAVE_STRUCT_ADDRINFO)
+		AC_MSG_RESULT(yes)
+	],
+	[AC_MSG_RESULT(no)]
+)
+
 AC_ARG_WITH(pam,
 	[  --without-pam           Disable PAM support ],
 	[
@@ -330,7 +377,38 @@
 )
 AC_MSG_CHECKING([whether utmpx.h has ut_addr field])
 AC_EGREP_HEADER(ut_addr, utmpx.h, 
-	[AC_DEFINE(HAVE_ADDR_IN_UTMP) AC_MSG_RESULT(yes); ], 
+	[AC_DEFINE(HAVE_ADDR_IN_UTMPX) AC_MSG_RESULT(yes); ], 
+	[AC_MSG_RESULT(no)]
+)
+AC_MSG_CHECKING([whether utmp.h has ut_addr_v6 field])
+AC_EGREP_HEADER(ut_addr_v6, utmp.h, 
+	[AC_DEFINE(HAVE_ADDR_V6_IN_UTMP) AC_MSG_RESULT(yes); ], 
+	[AC_MSG_RESULT(no)]
+)
+AC_MSG_CHECKING([whether utmpx.h has ut_addr_v6 field])
+AC_EGREP_HEADER(ut_addr_v6, utmpx.h, 
+	[AC_DEFINE(HAVE_ADDR_V6_IN_UTMPX) AC_MSG_RESULT(yes); ], 
+	[AC_MSG_RESULT(no)]
+)
+
+AC_MSG_CHECKING([whether struct sockaddr_storage has ss_family field])
+AC_TRY_COMPILE(
+	[#include <sys/socket.h>],
+	[struct sockaddr_storage s; s.ss_family = 1;],
+	[
+		AC_DEFINE(HAVE_SS_FAMILY_IN_SS)
+		AC_MSG_RESULT(yes)
+	],
+	[AC_MSG_RESULT(no)]
+)
+AC_MSG_CHECKING([whether struct sockaddr_storage has __ss_family field])
+AC_TRY_COMPILE(
+	[#include <sys/socket.h>],
+	[struct sockaddr_storage s; s.__ss_family = 1;],
+	[
+		AC_DEFINE(HAVE___SS_FAMILY_IN_SS)
+		AC_MSG_RESULT(yes)
+	],
 	[AC_MSG_RESULT(no)]
 )