diff options
Diffstat (limited to '')
| -rw-r--r-- | src/log-login-utmp.c | 126 |
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; } - |
