passwd: do not set 0 as date of last password change, closes 11951
authorDenys Vlasenko <vda.linux@googlemail.com>
Fri, 7 Jun 2019 10:29:24 +0000 (12:29 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Fri, 7 Jun 2019 10:30:23 +0000 (12:30 +0200)
function                                             old     new   delta
update_passwd                                       1491    1505     +14

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
libbb/update_passwd.c

index 95423d19bafc114f44c5cb400578afd73538967e..dc967683ade111026226a9487ea63c2f51ee71d3 100644 (file)
@@ -270,10 +270,16 @@ int FAST_FUNC update_passwd(const char *filename,
                        if (shadow && *cp == ':') {
                                /* /etc/shadow's field 3 (passwd change date) needs updating */
                                /* 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, ':');
                                /* "name:" + "new_passwd" + ":" + "change date" + ":rest of line" */
                                fprintf(new_fp, "%s%s:%u%s\n", name_colon, new_passwd,
-                                       (unsigned)(time(NULL)) / (24*60*60), cp);
+                                       time_days, cp);
                        } else {
                                /* "name:" + "new_passwd" + ":rest of line" */
                                fprintf(new_fp, "%s%s%s\n", name_colon, new_passwd, cp);