[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
diff --git a/ChangeLog b/ChangeLog
index 1e5de86..b0d9389 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.
@@ -7663,4 +7666,4 @@
  - Wrote replacements for strlcpy and mkdtemp
  - Released 1.0pre1
 
-$Id: ChangeLog,v 1.1872 2002/02/24 20:42:46 mouring Exp $
+$Id: ChangeLog,v 1.1873 2002/02/25 01:56:46 tim Exp $
diff --git a/loginrec.c b/loginrec.c
index d7105ed..ea3ec4f 100644
--- a/loginrec.c
+++ b/loginrec.c
@@ -163,7 +163,7 @@
 #include "log.h"
 #include "atomicio.h"
 
-RCSID("$Id: loginrec.c,v 1.38 2001/10/30 02:50:40 tim Exp $");
+RCSID("$Id: loginrec.c,v 1.39 2002/02/25 01:56:47 tim Exp $");
 
 #ifdef HAVE_UTIL_H
 #  include <util.h>
@@ -701,6 +701,8 @@
 	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 @@
 	 * 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 @@
 {
 	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 be6843a..bf1a3ec 100644
--- a/session.c
+++ b/session.c
@@ -1677,7 +1677,7 @@
 
 	/* 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 2fb96bb..78c51ab 100644
--- a/sshlogin.c
+++ b/sshlogin.c
@@ -94,11 +94,11 @@
 /* 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 79d42a9..bd30278 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