[dev] [ubase][PATCH] Add last and lastb

From: <k0ga_AT_shike2.com>
Date: Thu Oct 16 10:59:00 CES 2014

From: "Roberto E. Vargas Caballero" <k0ga_AT_shike2.com>

---
 Makefile     |    6 +++++-
 config.def.h |    2 ++
 last.c       |   59 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 66 insertions(+), 1 deletion(-)
 create mode 100644 last.c
diff --git a/Makefile b/Makefile
index 3989a77..07c2de0 100644
--- a/Makefile
+++ b/Makefile
_AT_@ -33,6 +33,7 @@ LIB = \
 	util/tty.o
 
 SRC = \
+	last.c              \
 	lastlog.c           \
 	chvt.c              \
 	clear.c             \
_AT_@ -131,7 +132,7 @@ MAN8 = \
 	umount.8
 
 OBJ = $(SRC:.c=.o) $(LIB)
-BIN = $(SRC:.c=)
+BIN = $(SRC:.c=) lastb
 
 all: options binlib
 
_AT_@ -165,6 +166,9 @@ util.a: $(LIB)
 	_AT_$(AR) -r -c $@ $(LIB)
 	_AT_ranlib $@
 
+lastb: last
+	ln -f last lastb
+
 install: all
 	_AT_echo installing executables to $(DESTDIR)$(PREFIX)/bin
 	_AT_mkdir -p $(DESTDIR)$(PREFIX)/bin
diff --git a/config.def.h b/config.def.h
index 1ea5ca5..636bc2d 100644
--- a/config.def.h
+++ b/config.def.h
_AT_@ -5,3 +5,5 @@
 #define PW_CIPHER	"$6$"	/* SHA-512 */
 #undef UTMP_PATH
 #define UTMP_PATH	"/var/run/utmp"
+#undef BTMP_PATH
+#define BTMP_PATH	"/var/log/btmp"
diff --git a/last.c b/last.c
new file mode 100644
index 0000000..14fb386
--- /dev/null
+++ b/last.c
_AT_@ -0,0 +1,59 @@
+/* See LICENSE file for copyright and license details. */
+#include <errno.h>
+#include <paths.h>
+#include <pwd.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include <utmp.h>
+#include <unistd.h>
+
+#include "config.h"
+#include "util.h"
+
+void
+usage(void)
+{
+	fputs("last [user]\n", stderr);
+	exit(1);
+}
+
+int
+main(int argc, char **argv)
+{
+	FILE *fp;
+	struct utmp ut;
+	char *user, *file, *prog;
+	time_t t;
+
+	switch (argc) {
+	case 1:
+		user = NULL;
+		break;
+	case 2:
+		user = argv[1];
+		break;
+	default:
+		usage();
+	}
+
+	prog = basename(argv[0]);
+	file = (!strcmp(prog, "last")) ? WTMP_PATH : BTMP_PATH;
+	if ((fp = fopen(file, "r")) == NULL)
+                eprintf("fopen %s:", file);
+
+	while (fread(&ut, sizeof(ut), 1, fp) == 1) {
+		if (ut.ut_type != USER_PROCESS ||
+		    (user && strcmp(user, ut.ut_name))) {
+			continue;
+		}
+
+		t = ut.ut_time;
+		printf("%-8.8s %-8.8s %-16.16s %s",
+		       ut.ut_user, ut.ut_line, ut.ut_host, ctime(&t));
+	}
+	if (fclose(fp))
+		eprintf("fclose %s:", file);
+	return 0;
+}
-- 
1.7.10.4
Received on Thu Jan 01 1970 - 00:59:59 CET

This archive was generated by hypermail 2.3.0 : Thu Oct 16 2014 - 11:36:08 CEST