diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2019-06-07 12:29:24 +0200 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2019-06-07 12:30:23 +0200 |
commit | a5c5dc6f0b96f9ef8c567f40388d91d44aec1eb7 (patch) | |
tree | 3ad2c689d302dae350b23dc3f3c6cb234463d44d | |
parent | 5c317c0b8d7dd9bb86f220b445472e5d6cd6db02 (diff) | |
download | busybox-w32-a5c5dc6f0b96f9ef8c567f40388d91d44aec1eb7.tar.gz busybox-w32-a5c5dc6f0b96f9ef8c567f40388d91d44aec1eb7.tar.bz2 busybox-w32-a5c5dc6f0b96f9ef8c567f40388d91d44aec1eb7.zip |
passwd: do not set 0 as date of last password change, closes 11951
function old new delta
update_passwd 1491 1505 +14
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | libbb/update_passwd.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/libbb/update_passwd.c b/libbb/update_passwd.c index 95423d19b..dc967683a 100644 --- a/libbb/update_passwd.c +++ b/libbb/update_passwd.c | |||
@@ -270,10 +270,16 @@ int FAST_FUNC update_passwd(const char *filename, | |||
270 | if (shadow && *cp == ':') { | 270 | if (shadow && *cp == ':') { |
271 | /* /etc/shadow's field 3 (passwd change date) needs updating */ | 271 | /* /etc/shadow's field 3 (passwd change date) needs updating */ |
272 | /* move past old change date */ | 272 | /* move past old change date */ |
273 | unsigned time_days = (unsigned long)(time(NULL)) / (24*60*60); | ||
274 | |||
275 | if (time_days == 0) { | ||
276 | /* 0 as change date has special meaning, avoid it */ | ||
277 | time_days = 1; | ||
278 | } | ||
273 | cp = strchrnul(cp + 1, ':'); | 279 | cp = strchrnul(cp + 1, ':'); |
274 | /* "name:" + "new_passwd" + ":" + "change date" + ":rest of line" */ | 280 | /* "name:" + "new_passwd" + ":" + "change date" + ":rest of line" */ |
275 | fprintf(new_fp, "%s%s:%u%s\n", name_colon, new_passwd, | 281 | fprintf(new_fp, "%s%s:%u%s\n", name_colon, new_passwd, |
276 | (unsigned)(time(NULL)) / (24*60*60), cp); | 282 | time_days, cp); |
277 | } else { | 283 | } else { |
278 | /* "name:" + "new_passwd" + ":rest of line" */ | 284 | /* "name:" + "new_passwd" + ":rest of line" */ |
279 | fprintf(new_fp, "%s%s%s\n", name_colon, new_passwd, cp); | 285 | fprintf(new_fp, "%s%s%s\n", name_colon, new_passwd, cp); |