From 4ff2b9bf429f40cb4d8119108cd7c4aa76c081ee Mon Sep 17 00:00:00 2001 From: Damien Miller Date: Tue, 28 Dec 1999 10:41:12 +1100 Subject: [PATCH] - NetBSD login.c compile fix from David Rankin - Fully set ut_tv if present in utmp or utmpx --- ChangeLog | 3 +++ acconfig.h | 9 +++++++++ configure.in | 15 +++++++++++++++ login.c | 16 ++++++++++++---- 4 files changed, 39 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index 70e1c037a..55051011f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 19991228 - Replacement for getpagesize() for systems which lack it + - NetBSD login.c compile fix from David Rankin + + - Fully set ut_tv if present in utmp or utmpx 19991227 - Automatically correct paths in manpages and configuration files. Patch diff --git a/acconfig.h b/acconfig.h index 15de34575..f3a7225e2 100644 --- a/acconfig.h +++ b/acconfig.h @@ -36,6 +36,15 @@ /* Define is utmpx.h has a syslen field */ #undef HAVE_SYSLEN_IN_UTMPX +/* Define is utmp.h has a ut_pid field */ +#undef HAVE_PID_IN_UTMP + +/* Define is utmp.h has a ut_type field */ +#undef HAVE_TYPE_IN_UTMP + +/* Define is utmp.h has a ut_tv field */ +#undef HAVE_TV_IN_UTMP + /* Define if you want to use utmpx */ #undef USE_UTMPX diff --git a/configure.in b/configure.in index 57b08a421..6fb5d63c6 100644 --- a/configure.in +++ b/configure.in @@ -264,6 +264,21 @@ AC_EGREP_HEADER(syslen, utmpx.h, [AC_DEFINE(HAVE_SYSLEN_IN_UTMPX) AC_MSG_RESULT(yes); ], [AC_MSG_RESULT(no)] ) +AC_MSG_CHECKING([whether utmp.h has ut_pid field]) +AC_EGREP_HEADER(ut_pid, utmp.h, + [AC_DEFINE(HAVE_PID_IN_UTMP) AC_MSG_RESULT(yes); ], + [AC_MSG_RESULT(no)] +) +AC_MSG_CHECKING([whether utmp.h has ut_type field]) +AC_EGREP_HEADER(ut_type, utmp.h, + [AC_DEFINE(HAVE_TYPE_IN_UTMP) AC_MSG_RESULT(yes); ], + [AC_MSG_RESULT(no)] +) +AC_MSG_CHECKING([whether utmp.h has ut_tv field]) +AC_EGREP_HEADER(ut_tv, utmp.h, + [AC_DEFINE(HAVE_TV_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 f03db0532..80a63f3d7 100644 --- a/login.c +++ b/login.c @@ -18,7 +18,7 @@ */ #include "includes.h" -RCSID("$Id: login.c,v 1.13 1999/12/27 00:33:56 damien Exp $"); +RCSID("$Id: login.c,v 1.14 1999/12/27 23:41:12 damien Exp $"); #if defined(HAVE_UTMPX_H) && defined(USE_UTMPX) # include @@ -142,10 +142,18 @@ record_login(int pid, const char *ttyname, const char *user, uid_t uid, memset(&u, 0, sizeof(u)); strncpy(u.ut_line, ttyname + 5, sizeof(u.ut_line)); strncpy(u.ut_id, ttyname + 8, sizeof(u.ut_id)); - u.ut_pid = (pid_t)pid; - u.ut_time = time(NULL); strncpy(u.ut_name, user, sizeof(u.ut_name)); +#if defined(HAVE_TV_IN_UTMP) + (void)gettimeofday(&u.ut_tv, NULL); +#else /* defined(HAVE_TV_IN_UTMP) */ + u.ut_time = time(NULL); +#endif /* defined(HAVE_TV_IN_UTMP) */ +#if defined(HAVE_PID_IN_UTMP) + u.ut_pid = (pid_t)pid; +#endif /* HAVE_PID_IN_UTMP */ +#if defined(HAVE_TYPE_IN_UTMP) u.ut_type = (uid == -1)?DEAD_PROCESS:USER_PROCESS; +#endif /* HAVE_TYPE_IN_UTMP */ #if defined(HAVE_HOST_IN_UTMP) strncpy(u.ut_host, host, sizeof(u.ut_host)); #endif @@ -156,7 +164,7 @@ record_login(int pid, const char *ttyname, const char *user, uid_t uid, strncpy(utx.ut_line, ttyname + 5, sizeof(utx.ut_line)); strncpy(utx.ut_id, ttyname + 8, sizeof(utx.ut_id)); utx.ut_pid = (pid_t)pid; - utx.ut_tv.tv_sec = time(NULL); + (void)gettimeofday(&utx.ut_tv, NULL); utx.ut_type = (uid == -1)?DEAD_PROCESS:USER_PROCESS; # ifdef HAVE_HOST_IN_UTMPX # ifdef HAVE_SYSLEN_IN_UTMPX