[Bug 84] New: last command provides incorrect information on Solaris 8
bugzilla-daemon at mindrot.org
bugzilla-daemon at mindrot.org
Wed Jan 30 06:57:19 EST 2002
http://bugzilla.mindrot.org/show_bug.cgi?id=84
Summary: last command provides incorrect information on Solaris 8
Product: Portable OpenSSH
Version: -current
Platform: UltraSparc
OS/Version: Solaris
Status: NEW
Severity: normal
Priority: P2
Component: ssh
AssignedTo: openssh-unix-dev at mindrot.org
ReportedBy: wknox at mitre.org
The utmpx entry done upon logout from ssh does not contain all the fields that
the login record does - this prevents the last command from working properly on
Solaris 8. I have created a patch to correct this (attached below). The problem
with last without this patch exhibits itself when you run "last username" -
entries come up indicating that you are still logged in because the last command
cannot find the logout for that login (it looks for an entry with the same
username, which is not being used in the logout utmpx entries currently). The
patch, which is against 3.0.2p1, merely puts all the same information into the
utmpx entry for both a login and a logout. This bugzilla entry duplicates an
e-mail I sent in in late November, in case this comes up as a duplicate of a
known issue.
--- loginrec.c~ Mon Oct 29 21:50:40 2001
+++ loginrec.c Tue Jan 29 10:56:59 2002
@@ -701,6 +701,7 @@
line_stripname(utx->ut_line, li->line, sizeof(utx->ut_line));
set_utmpx_time(li, utx);
utx->ut_pid = li->pid;
+ strncpy(utx->ut_name, li->username, MIN_SIZEOF(utx->ut_name,
li->username));
if (li->type == LTYPE_LOGOUT)
return;
@@ -711,7 +712,6 @@
*/
/* 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
--- session.c~ Sat Dec 1 18:37:08 2001
+++ session.c Tue Jan 29 10:56:59 2002
@@ -1866,7 +1866,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);
--- sshlogin.c~ Tue May 8 16:33:06 2001
+++ sshlogin.c Tue Jan 29 10:56:59 2002
@@ -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);
}
--- sshlogin.h~ Wed Jul 4 00:46:58 2001
+++ sshlogin.h Tue Jan 29 10:56:59 2002
@@ -17,7 +17,7 @@
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);
#endif
------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.
More information about the openssh-unix-dev
mailing list