diff -up shadow-4.1.5.1/src/faillog.c.null-tm shadow-4.1.5.1/src/faillog.c --- shadow-4.1.5.1/src/faillog.c.null-tm 2011-11-19 23:54:47.000000000 +0100 +++ shadow-4.1.5.1/src/faillog.c 2016-06-14 11:54:58.582314219 +0200 @@ -163,10 +163,14 @@ static void print_one (/*@null@*/const s } tm = localtime (&fl.fail_time); + if (tm == NULL) { + cp = "(unknown)"; + } else { #ifdef HAVE_STRFTIME - strftime (ptime, sizeof (ptime), "%D %H:%M:%S %z", tm); - cp = ptime; + strftime (ptime, sizeof (ptime), "%D %H:%M:%S %z", tm); + cp = ptime; #endif + } printf ("%-9s %5d %5d ", pw->pw_name, fl.fail_cnt, fl.fail_max); /* FIXME: cp is not defined ifndef HAVE_STRFTIME */ diff -up shadow-4.1.5.1/src/chage.c.null-tm shadow-4.1.5.1/src/chage.c --- shadow-4.1.5.1/src/chage.c.null-tm 2016-05-04 13:44:55.639787900 +0200 +++ shadow-4.1.5.1/src/chage.c 2016-06-14 11:54:58.583314243 +0200 @@ -168,6 +168,10 @@ static void date_to_str (char *buf, size struct tm *tp; tp = gmtime (&date); + if (tp == NULL) { + (void) snprintf (buf, maxsize, "(unknown)"); + return; + } #ifdef HAVE_STRFTIME (void) strftime (buf, maxsize, "%Y-%m-%d", tp); #else diff -up shadow-4.1.5.1/src/lastlog.c.null-tm shadow-4.1.5.1/src/lastlog.c --- shadow-4.1.5.1/src/lastlog.c.null-tm 2016-05-04 13:44:55.647788082 +0200 +++ shadow-4.1.5.1/src/lastlog.c 2016-06-14 11:54:58.584314267 +0200 @@ -165,13 +165,17 @@ static void print_one (/*@null@*/const s ll_time = ll.ll_time; tm = localtime (&ll_time); + if (tm == NULL) { + cp = "(unknown)"; + } else { #ifdef HAVE_STRFTIME - strftime (ptime, sizeof (ptime), "%a %b %e %H:%M:%S %z %Y", tm); - cp = ptime; + strftime (ptime, sizeof (ptime), "%a %b %e %H:%M:%S %z %Y", tm); + cp = ptime; #else - cp = asctime (tm); - cp[24] = '\0'; + cp = asctime (tm); + cp[24] = '\0'; #endif + } if (ll.ll_time == (time_t) 0) { cp = _("**Never logged in**\0"); diff -up shadow-4.1.5.1/src/passwd.c.null-tm shadow-4.1.5.1/src/passwd.c --- shadow-4.1.5.1/src/passwd.c.null-tm 2016-05-04 13:44:55.634787787 +0200 +++ shadow-4.1.5.1/src/passwd.c 2016-06-14 11:54:58.584314267 +0200 @@ -438,6 +438,9 @@ static /*@observer@*/const char *date_to struct tm *tm; tm = gmtime (&t); + if (tm == NULL) { + return "(unknown)"; + } #ifdef HAVE_STRFTIME (void) strftime (buf, sizeof buf, "%m/%d/%Y", tm); #else /* !HAVE_STRFTIME */ diff -up shadow-4.1.5.1/src/usermod.c.null-tm shadow-4.1.5.1/src/usermod.c --- shadow-4.1.5.1/src/usermod.c.null-tm 2016-05-04 13:44:55.648788104 +0200 +++ shadow-4.1.5.1/src/usermod.c 2016-06-14 11:54:58.585314291 +0200 @@ -186,6 +186,10 @@ static void date_to_str (/*@unique@*//*@ } else { time_t t = (time_t) date; tp = gmtime (&t); + if (tp == NULL) { + strncpy (buf, "unknown", maxsize); + return; + } #ifdef HAVE_STRFTIME strftime (buf, maxsize, "%Y-%m-%d", tp); #else