mirror of git://git.suckless.org/ubase
Add last and lastb
This commit is contained in:
parent
249b5b5c0a
commit
2f03742e05
6
Makefile
6
Makefile
|
@ -33,6 +33,7 @@ LIB = \
|
|||
util/tty.o
|
||||
|
||||
SRC = \
|
||||
last.c \
|
||||
lastlog.c \
|
||||
chvt.c \
|
||||
clear.c \
|
||||
|
@ -131,7 +132,7 @@ MAN8 = \
|
|||
umount.8
|
||||
|
||||
OBJ = $(SRC:.c=.o) $(LIB)
|
||||
BIN = $(SRC:.c=)
|
||||
BIN = $(SRC:.c=) lastb
|
||||
|
||||
all: options binlib
|
||||
|
||||
|
@ -165,6 +166,9 @@ util.a: $(LIB)
|
|||
@$(AR) -r -c $@ $(LIB)
|
||||
@ranlib $@
|
||||
|
||||
lastb: last
|
||||
ln -f last lastb
|
||||
|
||||
install: all
|
||||
@echo installing executables to $(DESTDIR)$(PREFIX)/bin
|
||||
@mkdir -p $(DESTDIR)$(PREFIX)/bin
|
||||
|
|
|
@ -5,3 +5,7 @@
|
|||
#define PW_CIPHER "$6$" /* SHA-512 */
|
||||
#undef UTMP_PATH
|
||||
#define UTMP_PATH "/var/run/utmp"
|
||||
#undef BTMP_PATH
|
||||
#define BTMP_PATH "/var/log/btmp"
|
||||
#undef WTMP_PATH
|
||||
#define WTMP_PATH "/var/log/wtmp"
|
||||
|
|
|
@ -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;
|
||||
}
|
Loading…
Reference in New Issue