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>
This commit is contained in:
Denys Vlasenko 2019-06-07 12:29:24 +02:00
parent 5c317c0b8d
commit a5c5dc6f0b

View File

@ -270,10 +270,16 @@ int FAST_FUNC update_passwd(const char *filename,
if (shadow && *cp == ':') { if (shadow && *cp == ':') {
/* /etc/shadow's field 3 (passwd change date) needs updating */ /* /etc/shadow's field 3 (passwd change date) needs updating */
/* move past old change date */ /* move past old change date */
unsigned time_days = (unsigned long)(time(NULL)) / (24*60*60);
if (time_days == 0) {
/* 0 as change date has special meaning, avoid it */
time_days = 1;
}
cp = strchrnul(cp + 1, ':'); cp = strchrnul(cp + 1, ':');
/* "name:" + "new_passwd" + ":" + "change date" + ":rest of line" */ /* "name:" + "new_passwd" + ":" + "change date" + ":rest of line" */
fprintf(new_fp, "%s%s:%u%s\n", name_colon, new_passwd, fprintf(new_fp, "%s%s:%u%s\n", name_colon, new_passwd,
(unsigned)(time(NULL)) / (24*60*60), cp); time_days, cp);
} else { } else {
/* "name:" + "new_passwd" + ":rest of line" */ /* "name:" + "new_passwd" + ":rest of line" */
fprintf(new_fp, "%s%s%s\n", name_colon, new_passwd, cp); fprintf(new_fp, "%s%s%s\n", name_colon, new_passwd, cp);