Index: shadow-4.5/src/faillog.c =================================================================== --- shadow-4.5.orig/src/faillog.c +++ shadow-4.5/src/faillog.c @@ -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 */ Index: shadow-4.5/src/chage.c =================================================================== --- shadow-4.5.orig/src/chage.c +++ shadow-4.5/src/chage.c @@ -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 Index: shadow-4.5/src/lastlog.c =================================================================== --- shadow-4.5.orig/src/lastlog.c +++ shadow-4.5/src/lastlog.c @@ -158,13 +158,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"); Index: shadow-4.5/src/passwd.c =================================================================== --- shadow-4.5.orig/src/passwd.c +++ shadow-4.5/src/passwd.c @@ -455,6 +455,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 */ Index: shadow-4.5/src/usermod.c =================================================================== --- shadow-4.5.orig/src/usermod.c +++ shadow-4.5/src/usermod.c @@ -210,6 +210,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