diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2021-03-19 00:27:44 +0100 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2021-03-19 00:27:44 +0100 |
commit | 2a2ca935309bfacbc7f87de752f869a89748052c (patch) | |
tree | 6e77e3b09e400c959636cfffd3ae16d4fca031a2 /loginutils | |
parent | fe78d70ec6c48f88126f6deffe04d4707a65c9ac (diff) |
login: implement LOGIN_TIMEOUT
function old new delta
packed_usage 33559 33598 +39
login_main 953 986 +33
.rodata 103161 103175 +14
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 3/0 up/down: 86/0) Total: 86 bytes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'loginutils')
-rw-r--r-- | loginutils/login.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/loginutils/login.c b/loginutils/login.c index 21c32fc25..66ac7cf4c 100644 --- a/loginutils/login.c +++ b/loginutils/login.c @@ -60,6 +60,11 @@ //usage: "\n -f Don't authenticate (user already authenticated)" //usage: "\n -h HOST Host user came from (for network logins)" //usage: "\n -p Preserve environment" +//usage: "\n" +//usage: "\n$LOGIN_TIMEOUT Seconds (default 60, 0 - disable)" +//usage: IF_LOGIN_SCRIPTS( +//usage: "\n$LOGIN_PRE_SUID_SCRIPT Execute before user ID change" +//usage: ) #include "libbb.h" #include "common_bufsiz.h" @@ -130,7 +135,6 @@ static const struct pam_conv conv = { #endif enum { - TIMEOUT = 60, EMPTY_USERNAME_COUNT = 10, /* Some users found 32 chars limit to be too low: */ USERNAME_SIZE = 64, @@ -139,6 +143,7 @@ enum { struct globals { struct termios tty_attrs; + int timeout; } FIX_ALIASING; #define G (*(struct globals*)bb_common_bufsiz1) #define INIT_G() do { setup_common_bufsiz(); } while (0) @@ -302,7 +307,7 @@ static void alarm_handler(int sig UNUSED_PARAM) * when you are back at shell prompt, echo will be still off. */ tcsetattr_stdin_TCSANOW(&G.tty_attrs); - printf("\r\nLogin timed out after %u seconds\r\n", TIMEOUT); + printf("\r\nLogin timed out after %u seconds\r\n", G.timeout); fflush_all(); /* unix API is brain damaged regarding O_NONBLOCK, * we should undo it, or else we can affect other processes */ @@ -345,6 +350,8 @@ int login_main(int argc UNUSED_PARAM, char **argv) INIT_G(); + G.timeout = xatoi_positive(getenv("LOGIN_TIMEOUT") ? : "60"); + /* More of suid paranoia if called by non-root: */ /* Clear dangerous stuff, set PATH */ run_by_root = !sanitize_env_if_suid(); @@ -376,7 +383,7 @@ int login_main(int argc UNUSED_PARAM, char **argv) /* We install timeout handler only _after_ we saved G.tty_attrs */ signal(SIGALRM, alarm_handler); - alarm(TIMEOUT); + alarm(G.timeout); /* Find out and memorize our tty name */ full_tty = xmalloc_ttyname(STDIN_FILENO); |