Utmp
Section: User Contributed Perl Documentation (3pm)
Updated: 2006-03-27
Index
Return to Main Contents
NAME
User::Utmp - Perl access to utmp- and utmpx-style databases
SYNOPSIS
use User::Utmp qw(:constants :utmpx);
@utmp = getutx();
or, using utmp:
use User::Utmp qw(:constants :utmp);
@utmp = getut();
DESCRIPTION
UNIX systems record information about current and past logins in a
user accounting database. This database is realized by two files:
File utmpx contains a record of all users currently logged onto the
system, while file wtmpx contains a record of all logins and
logouts. Some systems (such as HP-UX and AIX) also maintain a third
file containing failed login attempts. The information in these files
is used by commands such as who(1), last(1), write(1), or login(1).
The exact location of these files in the file system varies between
operating systems, but they are typically stored in directories like
/var/adm, /var/run, or /var/log. The Single UNIX
Specification specifies an API for reading from and writing to these
files.
The utmpx file format and functions were derived from the older utmp
file format and functions. For compatibility reasons, many systems
still support the utmp functions and maintain utmp database files. It
is recommended, however, to use the utmpx functions instead of the
obsolete utmp functions.
The User::Utmp module provides functions for reading and writing utmpx
and utmp files by providing a Perl interface to the system functions.
Utmpx and utmp records are represented in Perl by hash references.
The hash keys are the names of the elements of the utmpx structure.
For details consult utmpx(4) (utmpx(5) on some systems). The hash
values are (mostly) the same as in C.
As an example, here is a typical record as it may be returned by the
getutxent(), getutxid(), getutxline() or the corresponding utmp
functions:
{ut_tv => {tv_sec => 1141256698, tv_usec => 0},
ut_line => "ttyp0",
ut_time => 1141256698,
ut_id => "p0",
ut_host => ":0.0",
ut_exit => {e_termination => 0, e_exit => 2},
ut_pid => 4577,
ut_user => "mxp",
ut_type => USER_PROCESS,}
The array returned by the getutx() and getut() functions is composed
of hash references like this.
Utmpx functions
User::Utmp offers a high-level function for reading a utmpx database,
getutx(), and access to the lower-level utmpx functions defined by the
Single UNIX Specification and vendor extensions.
- getutx()
-
Reads a utmpx-like file and converts it to a Perl array of hashes.
See above for a description of the hashes.
Note that "ut_addr" (if provided by the utmpx implementation)
contains an Internet address (four bytes in network order), not a
number. It is therefore converted to a string suitable as parameter
to gethostbyname(). If the record doesn't describe a remote login
"ut_addr" is the empty string.
For compatibility with utmp, User::Utmp provides a "ut_time" field
which contains the same value as the "ut_tv.tv_sec" field.
The following functions are equivalent to the C functions of the same
names; refer to your system's documentation for details.
- endutxent()
-
Closes the database.
- getutxent()
-
Read the next entry from the database. Returns a hash ref or undef if
the end of the database is reached.
- getutxid()
-
This function takes a hash ref as argument and searches for a database
entry matching the values for the "ut_type" and "ut_id" keys
specified in the argument. Returns a hash ref or undef if no matching
entry could be found.
- getutxline()
-
This function takes a hash ref as argument and searches for an entry
of the type LOGIN_PROCESS or USER_PROCESS which also has a "ut_line"
value matching that in the argument.
- pututxline()
-
Writes out the supplied utmpx record into the current database.
pututxline() takes a reference to a hash which has the same structure
and contents as the elements of the array returned by getut().
Whether or not pututxline() creates the utmp file if it doesn't exist
is implementation-dependent.
- setutxent()
-
Resets the current database.
- utmpxname()
-
Allows the user to change the name of the file being examined from the
default file (see the section ``Constants'' below) to any other
file. The name provided to utmpxname() will then be used for all
following utmpx functions.
This is a vendor extension, which may not be available on all systems.
Utmp functions
User::Utmp offers a high-level function for reading a utmp database,
getut(), and access to the lower-level utmp functions.
- getut()
-
Reads a utmp-like file and converts it to a Perl array of hashes.
See above for a description of the hashes.
Note that "ut_addr" (if provided by the utmpx implementation)
contains an Internet address (four bytes in network order), not a
number. It is therefore converted to a string suitable as parameter
to gethostbyname(). If the record doesn't describe a remote login
"ut_addr" is the empty string.
The following functions are equivalent to the C functions of the same
names; refer to your system's documentation for details. Since utmp
is not formally standardized, not all functions may be available on
your system, or their behavior may vary.
- endutent()
-
Closes the database.
- getutent()
-
Read the next entry from the database. Returns a hash ref or undef if
the end of the database is reached.
- getutid()
-
This function takes a hash ref as argument and searches for a database
entry matching the values for the "ut_type" and "ut_id" keys
specified in the argument. Returns a hash ref or undef if no matching
entry could be found.
- getutline()
-
This function takes a hash ref as argument and searches for an entry
of the type LOGIN_PROCESS or USER_PROCESS which also has a "ut_line"
value matching that in the argument.
- pututline()
-
Writes out the supplied utmp record into the utmp file. pututline()
takes a reference to a hash which has the same structure and contents
as the elements of the array returned by getut(). Whether or not
pututline() creates the utmp file if it doesn't exist is
implementation-dependent.
- setutent()
-
Resets the current database.
- utmpname()
-
Allows the user to change the name of the file being examined from the
default file (typically something like /etc/utmp or
/var/run/utmp; see the section ``Constants'' below) to any other
file. In this case, the name provided to utmpname() will be used for
the getut() and pututline() functions. On some operating systems,
this may also implicitly set the database for utmpx functions.
Constants
User::Utmp also provides the following constants as functions:
- HAS_UTMPX
-
True if User::Utmp was built with support for utmpx.
- UTMP_FILE UTMPX_FILE WTMP_FILE WTMPX_FILE
-
The default databases. These constants may not be available on all
platforms.
- BOOT_TIME DEAD_PROCESS EMPTY INIT_PROCESS LOGIN_PROCESS NEW_TIME OLD_TIME RUN_LVL USER_PROCESS
-
Values used in the ut_type field. EMPTY is also used on Linux
(instead of the non-standard UT_UNKNOWN used in some Linux versions).
EXAMPLES
See the files example.pl and test.pl in the distribution for
usage examples.
NOTES
The utmpx interface is standardized in the the Single UNIX
Specificaton and should therefore be used in preference to the legacy
utmp functions. Some systems only provide minimal utmp support.
RESTRICTIONS
Reading the whole file into an array might not be the most efficient
approach for very large databases.
This module is based on the non-reentrant utmpx and utmp functions; it
is therefore not thread-safe.
AUTHOR
Michael Piotrowski <mxp@dynalabs.de>
SEE ALSO
utmpx(4), utmp(4); on some systems: utmpx(5), utmp(5)
Index
- NAME
-
- SYNOPSIS
-
- DESCRIPTION
-
- Utmpx functions
-
- Utmp functions
-
- Constants
-
- EXAMPLES
-
- NOTES
-
- RESTRICTIONS
-
- AUTHOR
-
- SEE ALSO
-
This document was created by