useradd: avoid creating several GB worth of sparse lastlog and faillog files
Closes: #1019245
This commit is contained in:
6
debian/changelog
vendored
6
debian/changelog
vendored
@@ -1,8 +1,14 @@
|
||||
shadow (1:4.12.3+dfsg1-1) UNRELEASED; urgency=medium
|
||||
|
||||
[ Balint Reczey ]
|
||||
* New upstream release
|
||||
* Refresh patches
|
||||
|
||||
[ Johannes Schauer Marin Rodrigues ]
|
||||
* useradd: cherry-pick patch from upstream to avoid creating several GB worth
|
||||
of sparse lastlog and faillog files for users with high uid values
|
||||
(Closes: #1019245)
|
||||
|
||||
-- Balint Reczey <balint@balintreczey.hu> Sat, 20 Aug 2022 18:18:43 +0200
|
||||
|
||||
shadow (1:4.11.1+dfsg1-2) unstable; urgency=medium
|
||||
|
||||
37
debian/patches/301_lastlog_faillog_do_not_reset_non-existent_data
vendored
Normal file
37
debian/patches/301_lastlog_faillog_do_not_reset_non-existent_data
vendored
Normal file
@@ -0,0 +1,37 @@
|
||||
From ebf9b232b012725d2be5e750876c7336cf1c37fd Mon Sep 17 00:00:00 2001
|
||||
From: David Kalnischkies <david@kalnischkies.de>
|
||||
Date: Wed, 24 Aug 2022 13:21:01 +0200
|
||||
Subject: [PATCH] useradd: Do not reset non-existent data in {last,fail}log
|
||||
|
||||
useradd does not create the files if they don't exist, but if they exist
|
||||
it will reset user data even if the data did not exist before creating
|
||||
a hole and an explicitly zero'd data point resulting (especially for
|
||||
high UIDs) in a lot of zeros ending up in containers and tarballs.
|
||||
---
|
||||
src/useradd.c | 6 ++++--
|
||||
1 file changed, 4 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/src/useradd.c
|
||||
+++ b/src/useradd.c
|
||||
@@ -1997,8 +1997,9 @@ static void faillog_reset (uid_t uid)
|
||||
struct faillog fl;
|
||||
int fd;
|
||||
off_t offset_uid = (off_t) (sizeof fl) * uid;
|
||||
+ struct stat st;
|
||||
|
||||
- if (access (FAILLOG_FILE, F_OK) != 0) {
|
||||
+ if (stat (FAILLOG_FILE, &st) != 0 || st.st_size <= offset_uid) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -2034,8 +2035,9 @@ static void lastlog_reset (uid_t uid)
|
||||
int fd;
|
||||
off_t offset_uid = (off_t) (sizeof ll) * uid;
|
||||
uid_t max_uid;
|
||||
+ struct stat st;
|
||||
|
||||
- if (access (LASTLOG_FILE, F_OK) != 0) {
|
||||
+ if (stat (LASTLOG_FILE, &st) != 0 || st.st_size <= offset_uid) {
|
||||
return;
|
||||
}
|
||||
|
||||
2
debian/patches/series
vendored
2
debian/patches/series
vendored
@@ -14,3 +14,5 @@
|
||||
463_login_delay_obeys_to_PAM
|
||||
505_useradd_recommend_adduser
|
||||
501_commonio_group_shadow
|
||||
|
||||
301_lastlog_faillog_do_not_reset_non-existent_data
|
||||
|
||||
Reference in New Issue
Block a user