- Fill in ut_utaddr utmp field. Report from Benjamin Charron
   <iretd@bigfoot.com>
diff --git a/ChangeLog b/ChangeLog
index d36fbc0..9221ae9 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -8,6 +8,8 @@
    <Franz.Sirl-kernel@lauterbach.com>
  - Prevent typedefs from being compiled more than once. Report from 
    Marc G. Fournier <marc.fournier@acadiau.ca>
+ - Fill in ut_utaddr utmp field. Report from Benjamin Charron
+   <iretd@bigfoot.com>
 
 19991230
  - OpenBSD CVS updates:
diff --git a/TODO b/TODO
index ddd5462..5d0ba5f 100644
--- a/TODO
+++ b/TODO
@@ -7,3 +7,17 @@
 - Replace the horror in acconfig.h which tries to comphensate for the 
   lack of u_intXX_t types. There must be a better way.
 
+- Hanging on logout:
+
+localhost$ ssh remotehost
+remotehost$ sleep 20 &
+remotehost$ logout
+(ssh hangs at logout for 20 seconds)
+
+Worse:
+
+localhost$ ssh root@remotehost
+remotehost# httpd
+remotehost# logout
+(ssh hangs at logout forever)
+
diff --git a/acconfig.h b/acconfig.h
index 3331a13..d0feb37 100644
--- a/acconfig.h
+++ b/acconfig.h
@@ -43,6 +43,12 @@
 /* Define is utmpx.h has a ut_host field */
 #undef HAVE_HOST_IN_UTMPX
 
+/* Define is utmp.h has a ut_addr field */
+#undef HAVE_ADDR_IN_UTMP
+
+/* Define is utmpx.h has a ut_addr field */
+#undef HAVE_ADDR_IN_UTMPX
+
 /* Define is utmpx.h has a syslen field */
 #undef HAVE_SYSLEN_IN_UTMPX
 
diff --git a/configure.in b/configure.in
index dd3e168..e9b2e69 100644
--- a/configure.in
+++ b/configure.in
@@ -325,6 +325,16 @@
 	[AC_DEFINE(HAVE_ID_IN_UTMP) AC_MSG_RESULT(yes); ], 
 	[AC_MSG_RESULT(no)]
 )
+AC_MSG_CHECKING([whether utmp.h has ut_addr field])
+AC_EGREP_HEADER(ut_addr, utmp.h, 
+	[AC_DEFINE(HAVE_ADDR_IN_UTMP) AC_MSG_RESULT(yes); ], 
+	[AC_MSG_RESULT(no)]
+)
+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_MSG_RESULT(no)]
+)
 
 dnl Look for lastlog location
 AC_ARG_WITH(lastlog,
diff --git a/login.c b/login.c
index 5c58d81..3dd208a 100644
--- a/login.c
+++ b/login.c
@@ -18,7 +18,7 @@
  */
 
 #include "includes.h"
-RCSID("$Id: login.c,v 1.15 1999/12/28 15:32:22 damien Exp $");
+RCSID("$Id: login.c,v 1.16 1999/12/30 22:42:24 damien Exp $");
 
 #if defined(HAVE_UTMPX_H) && defined(USE_UTMPX)
 # include <utmpx.h>
@@ -159,6 +159,9 @@
 #if defined(HAVE_HOST_IN_UTMP)
 	strncpy(u.ut_host, host, sizeof(u.ut_host));
 #endif
+#if defined(HAVE_ADDR_IN_UTMP)
+	u.ut_addr = addr->sin_addr.s_addr;
+#endif
 
 #if defined(HAVE_UTMPX_H) && defined(USE_UTMPX)
 	memset(&utx, 0, sizeof(utx));
@@ -176,6 +179,9 @@
 	strncpy(utx.ut_host, host, sizeof(utx.ut_host));
 #  endif /* HAVE_SYSLEN_IN_UTMPX */
 # endif
+# if defined(HAVE_ADDR_IN_UTMPX)
+	utx.ut_addr = addr->sin_addr.s_addr;
+# endif
 #endif /* defined(HAVE_UTMPX_H) && defined(USE_UTMPX) */
 
 /*#if defined(HAVE_UTMPX_H) && defined(USE_UTMPX) && !defined(HAVE_LOGIN)*/