summaryrefslogtreecommitdiff
path: root/modules/pam_tally2
diff options
context:
space:
mode:
authorDmitry V. Levin <ldv@altlinux.org>2017-11-08 23:58:58 +0000
committerDmitry V. Levin <ldv@altlinux.org>2017-11-10 11:30:54 +0000
commitf3a166bf9590e7b63af888950eb52223ded5b525 (patch)
treef4e37aaa779d22b1130335dd1ce6b2a572e6da6a /modules/pam_tally2
parentee204e9914be30c0b4462aefa1f4d45aa1068c0a (diff)
pam_tally2 --reset: avoid creating a missing tallylog file
There is no need for pam_tally2 in --reset=0 mode to create a missing tallylog file because its absence has the same meaning as its existence with the appropriate entry reset. This was not a big deal until useradd(8) from shadow suite release 4.5 started to invoke /sbin/pam_tally2 --reset routinely regardless of PAM configuration. The positive effect of this change is noticeable when using tools like cpio(1) that cannot archive huge sparse files efficiently. * modules/pam_tally2/pam_tally2.c [MAIN] (main) <cline_user>: Stat cline_filename when cline_reset == 0, exit early if the file is missing.
Diffstat (limited to 'modules/pam_tally2')
-rw-r--r--modules/pam_tally2/pam_tally2.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/modules/pam_tally2/pam_tally2.c b/modules/pam_tally2/pam_tally2.c
index 9f3bebeb..da1c0481 100644
--- a/modules/pam_tally2/pam_tally2.c
+++ b/modules/pam_tally2/pam_tally2.c
@@ -959,6 +959,18 @@ main( int argc UNUSED, char **argv )
exit(1);
}
+ if (cline_reset == 0) {
+ struct stat st;
+
+ if (stat(cline_filename, &st) && errno == ENOENT) {
+ if (!cline_quiet) {
+ memset(&tally, 0, sizeof(tally));
+ print_one(&tally, uid);
+ }
+ return 0; /* no file => nothing to reset */
+ }
+ }
+
i=get_tally(NULL, uid, cline_filename, &tfile, &tally, 0);
if ( i != PAM_SUCCESS ) {
if (tfile != -1)