utmp.ut_time and lastlog.ll_time are explicitly int32_t rather than

time_t.  Deal with the possibility that time_t != int32_t.  This boils
down to this sort of thing:
 -   time(&ut.ut_time);
 +   ut.ut_time = time(NULL);
and similar for ctime(3) etc.  I've kept it minimal for the stuff
that may need to be portable (or 3rd party code), but used Matt's time32
stuff for cases where that isn't as much of a concern.

Approved by: re (jhb)
This commit is contained in:
peter 2002-11-15 22:42:00 +00:00
parent c841be9bcb
commit 97526c738c
4 changed files with 13 additions and 9 deletions

View File

@ -71,6 +71,7 @@ pam_sm_open_session(pam_handle_t *pamh, int flags,
struct passwd *pwd;
struct utmp utmp;
struct lastlog ll;
time_t t;
const char *rhost, *user, *tty;
off_t llpos;
int fd, pam_err;
@ -109,13 +110,14 @@ pam_sm_open_session(pam_handle_t *pamh, int flags,
goto file_err;
if ((flags & PAM_SILENT) == 0) {
if (read(fd, &ll, sizeof ll) == sizeof ll && ll.ll_time != 0) {
t = ll.ll_time;
if (*ll.ll_host != '\0')
pam_info(pamh, "Last login: %.*s from %.*s",
24 - 5, ctime(&ll.ll_time),
24 - 5, ctime(&t),
(int)sizeof(ll.ll_host), ll.ll_host);
else
pam_info(pamh, "Last login: %.*s on %.*s",
24 - 5, ctime(&ll.ll_time),
24 - 5, ctime(&t),
(int)sizeof(ll.ll_line), ll.ll_line);
}
if (lseek(fd, llpos, L_SET) != llpos)
@ -123,7 +125,7 @@ pam_sm_open_session(pam_handle_t *pamh, int flags,
}
bzero(&ll, sizeof(ll));
time(&ll.ll_time);
ll.ll_time = time(NULL);
/* note: does not need to be NUL-terminated */
strncpy(ll.ll_line, tty, sizeof(ll.ll_line));
@ -140,7 +142,7 @@ pam_sm_open_session(pam_handle_t *pamh, int flags,
* Record session in utmp(5) and wtmp(5).
*/
bzero(&utmp, sizeof(utmp));
time(&utmp.ut_time);
utmp.ut_time = time(NULL);
/* note: does not need to be NUL-terminated */
strncpy(utmp.ut_name, user, sizeof(utmp.ut_name));
if (rhost != NULL)

View File

@ -42,6 +42,7 @@ __FBSDID("$FreeBSD$");
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <timeconv.h>
#include <unistd.h>
#include <utmp.h>
@ -160,7 +161,7 @@ row(struct utmp *ut)
{
char buf[80], tty[sizeof(_PATH_DEV) + UT_LINESIZE];
struct stat sb;
time_t idle;
time_t idle, t;
static int d_first = -1;
struct tm *tm;
char state;
@ -184,7 +185,8 @@ row(struct utmp *ut)
if (Tflag)
printf("%c ", state);
printf("%-*.*s ", UT_LINESIZE, UT_LINESIZE, ut->ut_line);
tm = localtime(&ut->ut_time);
t = _time32_to_time(ut->ut_time);
tm = localtime(&t);
strftime(buf, sizeof(buf), d_first ? "%e %b %R" : "%b %e %R", tm);
printf("%-*s ", 12, buf);
if (uflag) {
@ -265,7 +267,7 @@ whoami(FILE *fp)
name = "?";
strncpy(ut.ut_name, name, UT_NAMESIZE);
strncpy(ut.ut_line, tty, UT_LINESIZE);
time(&ut.ut_time);
ut.ut_time = _time_to_time32(time(NULL));
row(&ut);
}

View File

@ -916,7 +916,7 @@ physical_Login(struct physical *p, const char *name)
char *colon;
memset(&ut, 0, sizeof ut);
time(&ut.ut_time);
ut.ut_time = time(NULL);
strncpy(ut.ut_name, name, sizeof ut.ut_name);
if (p->handler && (p->handler->type == TCP_DEVICE ||
p->handler->type == UDP_DEVICE)) {

View File

@ -995,7 +995,7 @@ plogin(user, passwd, msg, msglen)
#endif
memset((void *)&utmp, 0, sizeof(utmp));
(void)time(&utmp.ut_time);
utmp.ut_time = time(NULL);
(void)strncpy(utmp.ut_name, user, sizeof(utmp.ut_name));
(void)strncpy(utmp.ut_host, ":PPP", sizeof(utmp.ut_host));
(void)strncpy(utmp.ut_line, tty, sizeof(utmp.ut_line));