diff options
Diffstat (limited to '')
-rw-r--r-- | src/logoutd.c | 92 |
1 files changed, 35 insertions, 57 deletions
diff --git a/src/logoutd.c b/src/logoutd.c index 03680f3..c870510 100644 --- a/src/logoutd.c +++ b/src/logoutd.c @@ -15,13 +15,16 @@ #include <stdio.h> #include <sys/stat.h> #include <sys/types.h> +#include <utmpx.h> #include "defines.h" #include "prototypes.h" #include "shadowlog.h" +#include "sizeof.h" +#include "string/zustr2stp.h" /* * Global variables */ -const char *Prog; +static const char Prog[] = "logoutd"; #ifndef DEFAULT_HUP_MESG #define DEFAULT_HUP_MESG _("login time exceeded\n\n") @@ -31,38 +34,31 @@ const char *Prog; #define HUP_MESG_FILE "/etc/logoutd.mesg" #endif + /* local function prototypes */ -#ifdef USE_UTMPX static int check_login (const struct utmpx *ut); -#else /* !USE_UTMPX */ -static int check_login (const struct utmp *ut); -#endif /* !USE_UTMPX */ static void send_mesg_to_tty (int tty_fd); + /* - * check_login - check if user (struct utmpx/utmp) allowed to stay logged in + * check_login - check if user (struct utmpx) allowed to stay logged in */ -#ifdef USE_UTMPX -static int check_login (const struct utmpx *ut) -#else /* !USE_UTMPX */ -static int check_login (const struct utmp *ut) -#endif /* !USE_UTMPX */ +static int +check_login(const struct utmpx *ut) { - char user[sizeof (ut->ut_user) + 1]; - time_t now; + char user[sizeof(ut->ut_user) + 1]; + char line[sizeof(ut->ut_line) + 1]; + time_t now; - /* - * ut_user may not have the terminating NUL. - */ - strncpy (user, ut->ut_user, sizeof (ut->ut_user)); - user[sizeof (ut->ut_user)] = '\0'; + ZUSTR2STP(user, ut->ut_user); + ZUSTR2STP(line, ut->ut_line); (void) time (&now); /* * Check if they are allowed to be logged in right now. */ - if (!isttytime (user, ut->ut_line, now)) { + if (!isttytime(user, line, now)) { return 0; } return 1; @@ -116,23 +112,20 @@ static void send_mesg_to_tty (int tty_fd) * * logoutd is started at system boot time and enforces the login * time and port restrictions specified in /etc/porttime. The - * utmpx/utmp file is periodically scanned and offending users are logged + * utmp file is periodically scanned and offending users are logged * off from the system. */ -int main (int argc, char **argv) +int +main(int argc, char **argv) { - int i; - int status; - pid_t pid; - -#ifdef USE_UTMPX - struct utmpx *ut; -#else /* !USE_UTMPX */ - struct utmp *ut; -#endif /* !USE_UTMPX */ - char user[sizeof (ut->ut_user) + 1]; /* terminating NUL */ - char tty_name[sizeof (ut->ut_line) + 6]; /* /dev/ + NUL */ - int tty_fd; + int i; + int status; + pid_t pid; + + struct utmpx *ut; + char user[sizeof (ut->ut_user) + 1]; /* terminating NUL */ + char tty_name[sizeof (ut->ut_line) + 6]; /* /dev/ + NUL */ + int tty_fd; if (1 != argc) { (void) fputs (_("Usage: logoutd\n"), stderr); @@ -164,39 +157,29 @@ int main (int argc, char **argv) /* * Start syslogging everything */ - Prog = Basename (argv[0]); log_set_progname(Prog); log_set_logfd(stderr); - OPENLOG ("logoutd"); + OPENLOG (Prog); /* - * Scan the utmpx/utmp file once per minute looking for users that + * Scan the utmp file once per minute looking for users that * are not supposed to still be logged in. */ while (true) { /* - * Attempt to re-open the utmpx/utmp file. The file is only + * Attempt to re-open the utmp file. The file is only * open while it is being used. */ -#ifdef USE_UTMPX - setutxent (); -#else /* !USE_UTMPX */ - setutent (); -#endif /* !USE_UTMPX */ + setutxent(); /* - * Read all of the entries in the utmpx/utmp file. The entries + * Read all of the entries in the utmp file. The entries * for login sessions will be checked to see if the user * is permitted to be signed on at this time. */ -#ifdef USE_UTMPX - while ((ut = getutxent ()) != NULL) -#else /* !USE_UTMPX */ - while ((ut = getutent ()) != NULL) -#endif /* !USE_UTMPX */ - { + while ((ut = getutxent()) != NULL) { if (ut->ut_type != USER_PROCESS) { continue; } @@ -228,7 +211,7 @@ int main (int argc, char **argv) tty_name[0] = '\0'; } - strncat (tty_name, ut->ut_line, UT_LINESIZE); + strncat(tty_name, ut->ut_line, NITEMS(ut->ut_line)); #ifndef O_NOCTTY #define O_NOCTTY 0 #endif @@ -246,8 +229,7 @@ int main (int argc, char **argv) kill (-ut->ut_pid, SIGKILL); } - strncpy (user, ut->ut_user, sizeof (user) - 1); - user[sizeof (user) - 1] = '\0'; + ZUSTR2STP(user, ut->ut_user); SYSLOG ((LOG_NOTICE, "logged off user '%s' on '%s'", user, @@ -259,11 +241,7 @@ int main (int argc, char **argv) exit (EXIT_SUCCESS); } -#ifdef USE_UTMPX - endutxent (); -#else /* !USE_UTMPX */ - endutent (); -#endif /* !USE_UTMPX */ + endutxent(); #ifndef DEBUG sleep (60); |