The pre19 code assumes that struct lastlog either exists in lastlog.h or isn't there. On NetBSD, struct lastlog is defined in utmp.h. Even worse, the non-lastlog code in login.h is terrible on NetBSD (since NetBSD doesn't have a ut_type struct member). With the patch below, openssh will compile and run on NetBSD again. Thanks, David --- configure.orig Tue Dec 21 06:51:22 1999 +++ configure Thu Dec 23 14:15:16 1999 @@ -2073,12 +2073,43 @@ fi rm -f conftest* -echo $ac_n "checking whether pam_strerror takes only one argument""... $ac_c" 1>&6 -echo "configure:2078: checking whether pam_strerror takes only one argument" >&5 +echo $ac_n "checking For struct lastlog in utmp.h""... $ac_c" 1>&6 +echo "configure:2078: checking For struct lastlog in utmp.h" >&5 cat > conftest.$ac_ext <<EOF #line 2080 "configure" #include "confdefs.h" + #include <sys/types.h> + #include <utmp.h> + +int main() { +struct lastlog c; c.ll_time = 0; +; return 0; } +EOF +if { (eval echo configure:2090: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + + cat >> confdefs.h <<\EOF +#define HAVE_LASTLOG 1 +EOF + + echo "$ac_t""yes" 1>&6 + +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + echo "$ac_t""no" 1>&6 + +fi +rm -f conftest* + +echo $ac_n "checking whether pam_strerror takes only one argument""... $ac_c" 1>&6 +echo "configure:2109: checking whether pam_strerror takes only one argument" >&5 +cat > conftest.$ac_ext <<EOF +#line 2111 "configure" +#include "confdefs.h" + #include <stdlib.h> #include <security/pam_appl.h> --- config.h.in.orig Thu Dec 23 13:50:18 1999 +++ config.h.in Thu Dec 23 13:59:23 1999 @@ -148,6 +148,9 @@ /* Define if you have the <lastlog.h> header file. */ #undef HAVE_LASTLOG_H +/* Define if you don't have the <lastlog.h> header file but have lastlog. */ +#undef HAVE_LASTLOG + /* Define if you have the <login.h> header file. */ #undef HAVE_LOGIN_H @@ -405,3 +408,7 @@ #if !defined(HAVE_SETEUID) && defined(HAVE_SETREUID) # define seteuid(a) setreuid(-1,a) #endif /* !defined(HAVE_SETEUID) && defined(HAVE_SETREUID) */ + +#if defined(HAVE_LASTLOG_H) && !defined(HAVE_LASTLOG) +# define HAVE_LASTLOG +#endif /* defined (HAVE_LASTLOG_H) && !defined(HAVE_LASTLOG) */ --- login.c.orig Thu Dec 23 13:34:04 1999 +++ login.c Thu Dec 23 13:40:37 1999 @@ -53,7 +53,7 @@ get_last_login_time(uid_t uid, const char *logname, char *buf, unsigned int bufsize) { -#if defined(HAVE_LASTLOG_H) && !defined(DISABLE_LASTLOG) +#if defined(HAVE_LASTLOG) && !defined(DISABLE_LASTLOG) struct lastlog ll; char *lastlog; int fd; --- configure.in.orig Thu Dec 23 13:41:02 1999 +++ configure.in Thu Dec 23 13:48:33 1999 @@ -151,6 +151,18 @@ [AC_MSG_RESULT(no)] ) +dnl On NetBSD (at least), lastlog is in utmp.h +AC_MSG_CHECKING([For struct lastlog in utmp.h]) +AC_TRY_COMPILE( + [#include <utmp.h>], + [struct lastlog c; c.ll_time = 0;], + [ + AC_DEFINE(HAVE_LASTLOG) + AC_MSG_RESULT(yes) + ], + [AC_MSG_RESULT(no)] +) + dnl Check PAM strerror arguments AC_MSG_CHECKING([whether pam_strerror takes only one argument]) AC_TRY_COMPILE(