login: Write utmp entry

This commit is contained in:
sin 2014-07-01 15:42:31 +01:00
parent ae8ca1598b
commit d0145aaf1f

23
login.c
View File

@ -8,7 +8,9 @@
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <time.h>
#include <unistd.h> #include <unistd.h>
#include <utmp.h>
#include "config.h" #include "config.h"
#include "passwd.h" #include "passwd.h"
@ -26,7 +28,10 @@ int
main(int argc, char *argv[]) main(int argc, char *argv[])
{ {
struct passwd *pw; struct passwd *pw;
struct utmp usr;
FILE *fp;
char *pass; char *pass;
char *tty;
uid_t uid; uid_t uid;
gid_t gid; gid_t gid;
int pflag = 0; int pflag = 0;
@ -71,6 +76,24 @@ main(int argc, char *argv[])
if (setuid(uid) < 0) if (setuid(uid) < 0)
eprintf("setuid:"); eprintf("setuid:");
/* Write utmp entry */
memset(&usr, 0, sizeof(usr));
tty = ttyname(STDIN_FILENO);
if (!tty)
tty = "?";
usr.ut_type = USER_PROCESS;
usr.ut_pid = getpid();
strlcpy(usr.ut_user, argv[0], sizeof(usr.ut_user));
strlcpy(usr.ut_line, tty, sizeof(usr.ut_line));
usr.ut_tv.tv_sec = time(NULL);
fp = fopen("/var/run/utmp", "a");
if (!fp)
weprintf("fopen %s:", "/var/run/utmp");
fwrite(&usr, sizeof(usr), 1, fp);
fclose(fp);
return dologin(pw, pflag); return dologin(pw, pflag);
} }