diff options
-rw-r--r-- | include/libbb.h | 2 | ||||
-rw-r--r-- | init/init.c | 6 | ||||
-rw-r--r-- | libbb/utmp.c | 14 | ||||
-rw-r--r-- | loginutils/login.c | 2 | ||||
-rw-r--r-- | networking/telnetd.c | 12 |
5 files changed, 20 insertions, 16 deletions
diff --git a/include/libbb.h b/include/libbb.h index 68a7cf002..be792d6b2 100644 --- a/include/libbb.h +++ b/include/libbb.h @@ -921,9 +921,11 @@ void die_if_bad_username(const char* name) FAST_FUNC; #if ENABLE_FEATURE_UTMP void FAST_FUNC write_new_utmp(pid_t pid, int new_type, const char *tty_name, const char *username, const char *hostname); void FAST_FUNC update_utmp(pid_t pid, int new_type, const char *tty_name, const char *username, const char *hostname); +void FAST_FUNC update_utmp_DEAD_PROCESS(pid_t pid); #else # define write_new_utmp(pid, new_type, tty_name, username, hostname) ((void)0) # define update_utmp(pid, new_type, tty_name, username, hostname) ((void)0) +# define update_utmp_DEAD_PROCESS(pid) ((void)0) #endif diff --git a/init/init.c b/init/init.c index d99d68ce4..b2fe85635 100644 --- a/init/init.c +++ b/init/init.c @@ -538,11 +538,7 @@ static struct init_action *mark_terminated(pid_t pid) struct init_action *a; if (pid > 0) { - update_utmp(pid, DEAD_PROCESS, - /*tty_name:*/ NULL, - /*username:*/ NULL, - /*hostname:*/ NULL - ); + update_utmp_DEAD_PROCESS(pid); for (a = init_action_list; a; a = a->next) { if (a->pid == pid) { a->pid = 0; diff --git a/libbb/utmp.c b/libbb/utmp.c index 09443fb6c..8ad9ba27e 100644 --- a/libbb/utmp.c +++ b/libbb/utmp.c @@ -130,3 +130,17 @@ void FAST_FUNC update_utmp(pid_t pid, int new_type, const char *tty_name, const updwtmp(bb_path_wtmp_file, &utent); #endif } + +/* man utmp: + * When init(8) finds that a process has exited, it locates its utmp entry + * by ut_pid, sets ut_type to DEAD_PROCESS, and clears ut_user, ut_host + * and ut_time with null bytes. + * [same applies to other processes which maintain utmp entries, like telnetd] + * + * We do not bother actually clearing fields: + * it might be interesting to know who was logged in and from where + */ +void FAST_FUNC update_utmp_DEAD_PROCESS(pid_t pid) +{ + update_utmp(pid, DEAD_PROCESS, NULL, NULL, NULL); +} diff --git a/loginutils/login.c b/loginutils/login.c index a4b19ccfc..b9d910331 100644 --- a/loginutils/login.c +++ b/loginutils/login.c @@ -454,7 +454,7 @@ int login_main(int argc UNUSED_PARAM, char **argv) else { if (safe_waitpid(child_pid, NULL, 0) == -1) bb_perror_msg("waitpid"); - update_utmp(child_pid, DEAD_PROCESS, NULL, NULL, NULL); + update_utmp_DEAD_PROCESS(child_pid); } IF_PAM(login_pam_end(pamh);) return 0; diff --git a/networking/telnetd.c b/networking/telnetd.c index 9e7a84cce..6aee95871 100644 --- a/networking/telnetd.c +++ b/networking/telnetd.c @@ -462,15 +462,7 @@ static void handle_sigchld(int sig UNUSED_PARAM) while (ts) { if (ts->shell_pid == pid) { ts->shell_pid = -1; -// man utmp: -// When init(8) finds that a process has exited, it locates its utmp entry -// by ut_pid, sets ut_type to DEAD_PROCESS, and clears ut_user, ut_host -// and ut_time with null bytes. -// [same applies to other processes which maintain utmp entries, like telnetd] -// -// We do not bother actually clearing fields: -// it might be interesting to know who was logged in and from where - update_utmp(pid, DEAD_PROCESS, /*tty_name:*/ NULL, /*username:*/ NULL, /*hostname:*/ NULL); + update_utmp_DEAD_PROCESS(pid); break; } ts = ts->next; @@ -739,7 +731,7 @@ int telnetd_main(int argc UNUSED_PARAM, char **argv) continue; kill_session: if (ts->shell_pid > 0) - update_utmp(ts->shell_pid, DEAD_PROCESS, /*tty_name:*/ NULL, /*username:*/ NULL, /*hostname:*/ NULL); + update_utmp_DEAD_PROCESS(ts->shell_pid); free_session(ts); ts = next; } |