.\" Copyright (c) 1993 Michael Haardt (michael@cantor.informatik.rwth-aachen.de),
.\" Fri Apr 2 11:32:09 MET DST 1993
.\"
+.\" %%%LICENSE_START(GPLv2+_DOC_FULL)
.\" This is free documentation; you can redistribute it and/or
.\" modify it under the terms of the GNU General Public License as
.\" published by the Free Software Foundation; either version 2 of
.\" GNU General Public License for more details.
.\"
.\" You should have received a copy of the GNU General Public
-.\" License along with this manual; if not, write to the Free
-.\" Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111,
-.\" USA.
+.\" License along with this manual; if not, see
+.\" <http://www.gnu.org/licenses/>.
+.\" %%%LICENSE_END
.\"
.\" Modified 1993-07-25 by Rik Faith (faith@cs.unc.edu)
.\" Modified 1995-02-26 by Michael Haardt
.\" Modified 1996-07-20 by Michael Haardt
-.\" Modified 1997-07-02 by Nicolás Lichtmaier <nick@debian.org>
+.\" Modified 1997-07-02 by Nicolás Lichtmaier <nick@debian.org>
.\" Modified 2004-10-31 by aeb, following Gwenole Beauchesne
-.TH UTMP 5 2008-06-29 "Linux" "Linux Programmer's Manual"
+.TH UTMP 5 2017-09-15 "Linux" "Linux Programmer's Manual"
.SH NAME
utmp, wtmp \- login records
.SH SYNOPSIS
.PP
.B Warning:
.I utmp
-must not be writable, because many system programs (foolishly)
+must not be writable by the user class "other",
+because many system programs (foolishly)
depend on its integrity.
You risk faked system logfiles and
modifications of system files if you leave
.I utmp
-writable to any user.
+writable to any user other than the owner and group owner of the file.
.PP
-The file is a sequence of
+The file is a sequence of
.I utmp
structures,
declared as follows in
.IR <utmp.h>
(note that this is only one of several definitions
around; details depend on the version of libc):
+.PP
.in +4n
-.nf
-.sp
+.EX
/* Values for ut_type field, below */
#define EMPTY 0 /* Record does not contain valid info
messages */
struct exit_status ut_exit; /* Exit status of a process
marked as DEAD_PROCESS; not
- used by Linux init(8) */
+ used by Linux init (1 */
/* The ut_session and ut_tv fields must be the same size when
compiled 32- and 64-bit. This allows data files and shared
memory to be shared between 32- and 64-bit applications. */
char __unused[20]; /* Reserved for future use */
};
-/* Backwards compatibility hacks */
+/* Backward compatibility hacks */
#define ut_name ut_user
#ifndef _NO_UT_TIME
#define ut_time ut_tv.tv_sec
#endif
#define ut_xtime ut_tv.tv_sec
#define ut_addr ut_addr_v6[0]
-.sp
-.fi
+.EE
.in
+.PP
This structure gives the name of the special file associated with the
user's terminal, the user's login name, and the time of login in the form
of
.BR time (2).
-String fields are terminated by \fB\(aq\e0\(aq\fP
+String fields are terminated by a null byte (\(aq\e0\(aq)
if they are shorter than the size
of the field.
.PP
The first entries ever created result from
-.BR init (8)
+.BR init (1)
processing
.BR inittab (5).
Before an entry is processed, though,
-.BR init (8)
+.BR init (1)
cleans up utmp by setting \fIut_type\fP to \fBDEAD_PROCESS\fP, clearing
\fIut_user\fP, \fIut_host\fP, and \fIut_time\fP with null bytes for each
record which \fIut_type\fP is not \fBDEAD_PROCESS\fP or \fBRUN_LVL\fP
and where no process with PID \fIut_pid\fP exists.
If no empty record
with the needed \fIut_id\fP can be found,
-.BR init (8)
+.BR init (1)
creates a new one.
It sets \fIut_id\fP from the inittab, \fIut_pid\fP and \fIut_time\fP to the
current values, and \fIut_type\fP to \fBINIT_PROCESS\fP.
\fIut_line\fP instead of the preferable \fIut_pid\fP.
.PP
When
-.BR init (8)
+.BR init (1)
finds that a process has exited, it locates its utmp
entry by \fIut_pid\fP, sets \fIut_type\fP to \fBDEAD_PROCESS\fP, and
clears \fIut_user\fP, \fIut_host\fP and \fIut_time\fP with null bytes.
changes it.
\fIwtmp\fP is maintained by
.BR login (1),
-.BR init (8),
+.BR init (1),
and some versions of
.BR getty (8)
(e.g.,
None of these programs creates the file, so if it is
removed, record-keeping is turned off.
.SH FILES
-/var/run/utmp
+.I /var/run/utmp
.br
-/var/log/wtmp
-.SH "CONFORMING TO"
+.I /var/log/wtmp
+.SH CONFORMING TO
.PP
POSIX.1 does not specify a
.I utmp
and
.I ut_user
fields.
-
+.PP
Linux defines the
.I utmpx
structure to be the same as the
.I utmp
structure.
-.SS Comparison with Historical Systems
+.SS Comparison with historical systems
Linux utmp entries conform neither to v7/BSD nor to System V; they are a
mix of the two.
-
+.PP
v7/BSD has fewer fields; most importantly it lacks
\fIut_type\fP, which causes native v7/BSD-like programs to display (for
example) dead or login entries.
Further, there is no configuration file
which allocates slots to sessions.
BSD does so because it lacks \fIut_id\fP fields.
-
+.PP
In Linux (as in System V), the \fIut_id\fP field of a
record will never change once it has been set, which reserves that slot
without needing a configuration file.
systems, where utmp logging can be disabled by removing the file, utmp
must always exist on Linux.
If you want to disable
-.BR who (1)
+.BR who (1),
then do not make utmp world readable.
.PP
The file format is machine-dependent, so it is recommended that it be
.IR tv_usec .
Since \fIut_tv\fP may not be the same as \fIstruct timeval\fP,
then instead of the call:
+.PP
.in +4n
-.nf
-.sp
+.EX
gettimeofday((struct timeval *) &ut.ut_tv, NULL);
-.fi
+.EE
.in
-
+.PP
the following method of setting this field is recommended:
+.PP
.in +4n
-.nf
-.sp
+.EX
struct utmp ut;
struct timeval tv;
gettimeofday(&tv, NULL);
ut.ut_tv.tv_sec = tv.tv_sec;
ut.ut_tv.tv_usec = tv.tv_usec;
-.fi
+.EE
.in
-.PP
-Note that the \fIutmp\fP struct from libc5 has changed in libc6.
-Because of this,
-binaries using the old libc5 struct will corrupt
-.IR /var/run/utmp " and/or " /var/log/wtmp .
-.SH BUGS
-This man page is based on the libc5 one, things may work differently now.
-.SH "SEE ALSO"
+.\" .PP
+.\" Note that the \fIutmp\fP struct from libc5 has changed in libc6.
+.\" Because of this,
+.\" binaries using the old libc5 struct will corrupt
+.\" .IR /var/run/utmp " and/or " /var/log/wtmp .
+.\" .SH BUGS
+.\" This man page is based on the libc5 one, things may work differently now.
+.SH SEE ALSO
.BR ac (1),
.BR date (1),
+.BR init (1),
.BR last (1),
.BR login (1),
+.BR logname (1),
+.BR lslogins (1),
+.BR users (1),
+.BR utmpdump (1),
.BR who (1),
.BR getutent (3),
.BR getutmp (3),
.BR login (3),
.BR logout (3),
.BR logwtmp (3),
-.BR updwtmp (3),
-.BR init (8)
+.BR updwtmp (3)