summaryrefslogtreecommitdiffstats
path: root/usr.sbin/lastlogin
diff options
context:
space:
mode:
authorru <ru@FreeBSD.org>2000-11-14 17:49:38 +0000
committerru <ru@FreeBSD.org>2000-11-14 17:49:38 +0000
commit4e5cd1b9b82b74a0d9a00fed11ec31078d618515 (patch)
tree23703987392bbb5564861f6b65a38b14c86c6f2c /usr.sbin/lastlogin
parentc3b10269853048910fb4a5a9c7bbb0b91a50068d (diff)
downloadFreeBSD-src-4e5cd1b9b82b74a0d9a00fed11ec31078d618515.zip
FreeBSD-src-4e5cd1b9b82b74a0d9a00fed11ec31078d618515.tar.gz
Added the lastlogin utility.
Obtained from: NetBSD
Diffstat (limited to 'usr.sbin/lastlogin')
-rw-r--r--usr.sbin/lastlogin/Makefile7
-rw-r--r--usr.sbin/lastlogin/lastlogin.876
-rw-r--r--usr.sbin/lastlogin/lastlogin.c136
3 files changed, 219 insertions, 0 deletions
diff --git a/usr.sbin/lastlogin/Makefile b/usr.sbin/lastlogin/Makefile
new file mode 100644
index 0000000..289e46e
--- /dev/null
+++ b/usr.sbin/lastlogin/Makefile
@@ -0,0 +1,7 @@
+# $FreeBSD$
+
+PROG= lastlogin
+MAN8= lastlogin.8
+CFLAGS+=-Wall
+
+.include <bsd.prog.mk>
diff --git a/usr.sbin/lastlogin/lastlogin.8 b/usr.sbin/lastlogin/lastlogin.8
new file mode 100644
index 0000000..3a9929d
--- /dev/null
+++ b/usr.sbin/lastlogin/lastlogin.8
@@ -0,0 +1,76 @@
+.\" $FreeBSD$
+.\" $NetBSD: lastlogin.8,v 1.3 1998/02/06 06:20:39 perry Exp $
+.\"
+.\" Copyright (c) 1996 John M. Vinopal
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\" notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\" notice, this list of conditions and the following disclaimer in the
+.\" documentation and/or other materials provided with the distribution.
+.\" 3. All advertising materials mentioning features or use of this software
+.\" must display the following acknowledgement:
+.\" This product includes software developed for the NetBSD Project
+.\" by John M. Vinopal.
+.\" 4. The name of the author may not be used to endorse or promote products
+.\" derived from this software without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+.\" IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+.\" BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+.\" LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+.\" AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+.\" OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.Dd January 11, 1996
+.Dt LASTLOGIN 8
+.Os
+.Sh NAME
+.Nm lastlogin
+.Nd indicate last login time of users
+.Sh SYNOPSIS
+.Nm
+.Op user ...
+.Sh DESCRIPTION
+.Nm
+will list the last login session of specified
+.Ar users ,
+or for all users by default. Each line of output contains
+the user name, the tty from which the session was conducted, any
+hostname, and the start time for the session.
+.Pp
+If multiple
+.Ar users
+are given, the session information for each user is printed in
+the order given on the command line. Otherwise, information
+for all users is printed, sorted by uid.
+.Pp
+.Nm
+differs from
+.Xr last 1
+in that it only prints information regarding the very last login session.
+The last login database is never turned over or deleted in standard usage.
+.Sh FILES
+.Bl -tag -width /var/log/lastlog -compact
+.It Pa /var/log/lastlog
+last login database
+.El
+.Sh SEE ALSO
+.Xr last 1 ,
+.Xr lastlog 5 ,
+.Xr ac 8
+.Sh AUTHORS
+.An John M. Vinopal
+wrote this program in January 1996 and contributed it
+to the
+.Nx
+project.
diff --git a/usr.sbin/lastlogin/lastlogin.c b/usr.sbin/lastlogin/lastlogin.c
new file mode 100644
index 0000000..1d84cc3
--- /dev/null
+++ b/usr.sbin/lastlogin/lastlogin.c
@@ -0,0 +1,136 @@
+/* $FreeBSD$ */
+/* $NetBSD: lastlogin.c,v 1.4 1998/02/03 04:45:35 perry Exp $ */
+/*
+ * Copyright (c) 1996 John M. Vinopal
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed for the NetBSD Project
+ * by John M. Vinopal.
+ * 4. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+#ifndef lint
+__RCSID("$FreeBSD$");
+__RCSID("$NetBSD: lastlogin.c,v 1.4 1998/02/03 04:45:35 perry Exp $");
+#endif
+
+#include <sys/types.h>
+#include <err.h>
+#include <errno.h>
+#include <pwd.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+#include <utmp.h>
+#include <unistd.h>
+
+extern char *__progname;
+static const char *logfile = _PATH_LASTLOG;
+
+ int main __P((int, char **));
+static void output __P((struct passwd *, struct lastlog *));
+static void usage __P((void));
+
+int
+main(argc, argv)
+ int argc;
+ char *argv[];
+{
+ int ch, i;
+ FILE *fp;
+ struct passwd *passwd;
+ struct lastlog last;
+
+ while ((ch = getopt(argc, argv, "")) != -1) {
+ usage();
+ }
+
+ fp = fopen(logfile, "r");
+ if (fp == NULL)
+ err(1, "%s", logfile);
+
+ setpassent(1); /* Keep passwd file pointers open */
+
+ /* Process usernames given on the command line. */
+ if (argc > 1) {
+ long offset;
+ for (i = 1; i < argc; ++i) {
+ if ((passwd = getpwnam(argv[i])) == NULL) {
+ warnx("user '%s' not found", argv[i]);
+ continue;
+ }
+ /* Calculate the offset into the lastlog file. */
+ offset = (long)(passwd->pw_uid * sizeof(last));
+ if (fseek(fp, offset, SEEK_SET)) {
+ warn("fseek error");
+ continue;
+ }
+ if (fread(&last, sizeof(last), 1, fp) != 1) {
+ warnx("fread error on '%s'", passwd->pw_name);
+ clearerr(fp);
+ continue;
+ }
+ output(passwd, &last);
+ }
+ }
+ /* Read all lastlog entries, looking for active ones */
+ else {
+ for (i = 0; fread(&last, sizeof(last), 1, fp) == 1; i++) {
+ if (last.ll_time == 0)
+ continue;
+ if ((passwd = getpwuid((uid_t)i)) != NULL)
+ output(passwd, &last);
+ }
+ if (ferror(fp))
+ warnx("fread error");
+ }
+
+ setpassent(0); /* Close passwd file pointers */
+
+ fclose(fp);
+ exit(0);
+}
+
+/* Duplicate the output of last(1) */
+static void
+output(p, l)
+ struct passwd *p;
+ struct lastlog *l;
+{
+ printf("%-*.*s %-*.*s %-*.*s %s",
+ UT_NAMESIZE, UT_NAMESIZE, p->pw_name,
+ UT_LINESIZE, UT_LINESIZE, l->ll_line,
+ UT_HOSTSIZE, UT_HOSTSIZE, l->ll_host,
+ (l->ll_time) ? ctime(&(l->ll_time)) : "Never logged in\n");
+}
+
+static void
+usage()
+{
+ fprintf(stderr, "usage: %s [user ...]\n", __progname);
+ exit(1);
+}
OpenPOWER on IntegriCloud