43 lines
1.3 KiB
Diff
43 lines
1.3 KiB
Diff
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(-)
|
|
|
|
diff --git a/src/useradd.c b/src/useradd.c
|
|
index 6eaeb533..39a744ee 100644
|
|
--- a/src/useradd.c
|
|
+++ b/src/useradd.c
|
|
@@ -1996,8 +1996,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;
|
|
}
|
|
|
|
@@ -2033,8 +2034,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.37.3
|
|
|