aboutsummaryrefslogtreecommitdiffstats
path: root/src/log-login-utmp.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/log-login-utmp.c126
1 files changed, 62 insertions, 64 deletions
diff --git a/src/log-login-utmp.c b/src/log-login-utmp.c
index 8a4d281..db0b291 100644
--- a/src/log-login-utmp.c
+++ b/src/log-login-utmp.c
@@ -1,7 +1,7 @@
/**
* cerberus-logging – Log-in logging extension for cerberus
*
- * Copyright © 2014, 2015 Mattias Andrée (maandree@member.fsf.org)
+ * Copyright © 2014, 2015 Mattias Andrée (m@maandree.se)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -20,72 +20,70 @@
#include <utmp.h>
-int do_log(void)
+int
+do_log(void)
{
- struct utmp ut;
- struct utmp *entry;
- pid_t pid_;
- const char* ttyno;
-
- if (!streq(action, "login"))
- return 0;
-
- pid_ = (pid_t)atoll(pid);
- ttyno = first_digit(ttyname);
- memset(&ut, 0, sizeof(struct utmp));
-
- utmpname(_PATH_UTMP);
- setutent();
-
- while ((entry = getutent()))
- if (entry->ut_pid == pid_)
- if ((INIT_PROCESS <= entry->ut_type) && (entry->ut_type <= DEAD_PROCESS))
- break;
-
- if ((entry == NULL) && ttyname)
- {
- setutent();
- ut.ut_type = LOGIN_PROCESS;
- xstrcpy(ut.ut_line, ttyname);
- entry = getutline(&ut);
- }
- if ((entry == NULL) && ttyno)
- {
- setutent();
- ut.ut_type = DEAD_PROCESS;
- xstrcpy(ut.ut_id, ttyno);
- entry = getutline(&ut);
- }
-
- if (entry) memcpy(&ut, entry, sizeof(struct utmp));
- else memset(&ut, 0, sizeof(struct utmp));
-
- ut.ut_type = USER_PROCESS;
- ut.ut_pid = pid_;
- xstrcpy(ut.ut_user, username);
- xstrcpy(ut.ut_host, hostname);
- xstrcpy(ut.ut_line, ttyname);
- xstrcpy(ut.ut_id, first_digit(ttyname));
- xmemcpy(ut.ut_addr_v6, get_hostaddress(hostname));
-
+ struct utmp ut;
+ struct utmp *entry;
+ pid_t pid_;
+ const char* ttyno;
+
+ if (!streq(action, "login"))
+ return 0;
+
+ pid_ = (pid_t)atoll(pid);
+ ttyno = first_digit(ttyname);
+ memset(&ut, 0, sizeof(struct utmp));
+
+ utmpname(_PATH_UTMP);
+ setutent();
+
+ while ((entry = getutent()))
+ if (entry->ut_pid == pid_)
+ if (INIT_PROCESS <= entry->ut_type && entry->ut_type <= DEAD_PROCESS)
+ break;
+
+ if (!entry && ttyname) {
+ setutent();
+ ut.ut_type = LOGIN_PROCESS;
+ xstrcpy(ut.ut_line, ttyname);
+ entry = getutline(&ut);
+ }
+ if (!entry && ttyno) {
+ setutent();
+ ut.ut_type = DEAD_PROCESS;
+ xstrcpy(ut.ut_id, ttyno);
+ entry = getutline(&ut);
+ }
+
+ if (entry) memcpy(&ut, entry, sizeof(struct utmp));
+ else memset(&ut, 0, sizeof(struct utmp));
+
+ ut.ut_type = USER_PROCESS;
+ ut.ut_pid = pid_;
+ xstrcpy(ut.ut_user, username);
+ xstrcpy(ut.ut_host, hostname);
+ xstrcpy(ut.ut_line, ttyname);
+ xstrcpy(ut.ut_id, first_digit(ttyname));
+ xmemcpy(ut.ut_addr_v6, get_hostaddress(hostname));
+
#ifdef _HAVE_UT_TV
- {
- struct timeval tv;
- gettimeofday(&tv, NULL);
- ut.ut_tv.tv_sec = (typeof(ut.ut_tv.tv_sec))(tv.tv_sec);
- ut.ut_tv.tv_usec = (typeof(ut.ut_tv.tv_usec))(tv.tv_usec);
- }
+ {
+ struct timeval tv;
+ gettimeofday(&tv, NULL);
+ ut.ut_tv.tv_sec = (typeof(ut.ut_tv.tv_sec))tv.tv_sec;
+ ut.ut_tv.tv_usec = (typeof(ut.ut_tv.tv_usec))tv.tv_usec;
+ }
#else
- {
- time_t t;
- time(&t);
- ut.ut_time = t;
- }
+ {
+ time_t t;
+ time(&t);
+ ut.ut_time = t;
+ }
#endif
- pututline(&ut);
- endutent();
- updwtmp(_PATH_WTMP, &ut);
- return 0;
+ pututline(&ut);
+ endutent();
+ updwtmp(_PATH_WTMP, &ut);
+ return 0;
}
-