From f3837bc64665e433fdd3e6614537d105011faf11 Mon Sep 17 00:00:00 2001 From: tim Date: Mon, 25 Feb 2002 01:56:46 +0000 Subject: [PATCH] [loginrec.c session.c sshlogin.c sshlogin.h] Bug 84 patch by wknox@mitre.org (William Knox). [sshlogin.h] declare record_utmp_only for session.c --- ChangeLog | 3 +++ loginrec.c | 8 +++----- session.c | 2 +- sshlogin.c | 4 ++-- sshlogin.h | 7 ++++++- 5 files changed, 15 insertions(+), 9 deletions(-) diff --git a/ChangeLog b/ChangeLog index e4b0acc8..259d32aa 100644 --- a/ChangeLog +++ b/ChangeLog @@ -4,6 +4,9 @@ coming). - (bal) Part two.. Drop unused AIX header, fix up missing char *cp. All that is left is handling aix_usrinfo(). + - (tim) [loginrec.c session.c sshlogin.c sshlogin.h] Bug 84 + patch by wknox@mitre.org (William Knox). + [sshlogin.h] declare record_utmp_only for session.c 20020221 - (bal) Minor session.c fixup for cygwin. mispelt 'is_winnt' variable. diff --git a/loginrec.c b/loginrec.c index 87c336df..1805f3ee 100644 --- a/loginrec.c +++ b/loginrec.c @@ -701,6 +701,8 @@ construct_utmpx(struct logininfo *li, struct utmpx *utx) line_stripname(utx->ut_line, li->line, sizeof(utx->ut_line)); set_utmpx_time(li, utx); utx->ut_pid = li->pid; + /* strncpy(): Don't necessarily want null termination */ + strncpy(utx->ut_name, li->username, MIN_SIZEOF(utx->ut_name, li->username)); if (li->type == LTYPE_LOGOUT) return; @@ -710,8 +712,6 @@ construct_utmpx(struct logininfo *li, struct utmpx *utx) * for logouts. */ - /* strncpy(): Don't necessarily want null termination */ - strncpy(utx->ut_name, li->username, MIN_SIZEOF(utx->ut_name, li->username)); # ifdef HAVE_HOST_IN_UTMPX strncpy(utx->ut_host, li->hostname, MIN_SIZEOF(utx->ut_host, li->hostname)); # endif @@ -942,9 +942,7 @@ utmpx_perform_logout(struct logininfo *li) { struct utmpx utx; - memset(&utx, '\0', sizeof(utx)); - set_utmpx_time(li, &utx); - line_stripname(utx.ut_line, li->line, sizeof(utx.ut_line)); + construct_utmpx(li, &utx); # ifdef HAVE_ID_IN_UTMPX line_abbrevname(utx.ut_id, li->line, sizeof(utx.ut_id)); # endif diff --git a/session.c b/session.c index be6843ab..bf1a3ecf 100644 --- a/session.c +++ b/session.c @@ -1677,7 +1677,7 @@ session_pty_cleanup(void *session) /* Record that the user has logged out. */ if (s->pid != 0) - record_logout(s->pid, s->tty); + record_logout(s->pid, s->tty, s->pw->pw_name); /* Release the pseudo-tty. */ pty_release(s->tty); diff --git a/sshlogin.c b/sshlogin.c index 2fb96bb6..78c51abd 100644 --- a/sshlogin.c +++ b/sshlogin.c @@ -94,11 +94,11 @@ record_utmp_only(pid_t pid, const char *ttyname, const char *user, /* Records that the user has logged out. */ void -record_logout(pid_t pid, const char *ttyname) +record_logout(pid_t pid, const char *ttyname, const char *user) { struct logininfo *li; - li = login_alloc_entry(pid, NULL, NULL, ttyname); + li = login_alloc_entry(pid, user, NULL, ttyname); login_logout(li); login_free_entry(li); } diff --git a/sshlogin.h b/sshlogin.h index 79d42a98..bd30278e 100644 --- a/sshlogin.h +++ b/sshlogin.h @@ -17,7 +17,12 @@ void record_login(pid_t, const char *, const char *, uid_t, const char *, struct sockaddr *); -void record_logout(pid_t, const char *); +void record_logout(pid_t, const char *, const char *); u_long get_last_login_time(uid_t, const char *, char *, u_int); +#ifdef LOGIN_NEEDS_UTMPX +void record_utmp_only(pid_t, const char *, const char *, const char *, + struct sockaddr *); +#endif + #endif -- 2.45.1