diff options
author | djm <djm> | 2010-03-03 01:14:15 +0000 |
---|---|---|
committer | djm <djm> | 2010-03-03 01:14:15 +0000 |
commit | 7a9ebb6fe195d7f8cf9bcecf0c95bf6b3f7efc73 (patch) | |
tree | 7748aeb5b1c57737397abe4e85adf78e9e9ac0d2 | |
parent | 05feeb2ca8376a2de83916129b0f4f7fc3cb71a4 (diff) | |
download | openssh-7a9ebb6fe195d7f8cf9bcecf0c95bf6b3f7efc73.tar.gz |
- djm@cvs.openbsd.org 2010/03/02 23:20:57
[ssh-keygen.c]
POSIX strptime is stricter than OpenBSD's so do a little dance to
appease it.
-rw-r--r-- | ssh-keygen.c | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/ssh-keygen.c b/ssh-keygen.c index 60261c21..7dc10808 100644 --- a/ssh-keygen.c +++ b/ssh-keygen.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh-keygen.c,v 1.179 2010/02/26 20:29:54 djm Exp $ */ +/* $OpenBSD: ssh-keygen.c,v 1.180 2010/03/02 23:20:57 djm Exp $ */ /* * Author: Tatu Ylonen <ylo@cs.hut.fi> * Copyright (c) 1994 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland @@ -1243,13 +1243,29 @@ parse_absolute_time(const char *s) { struct tm tm; time_t tt; + char buf[32], *fmt; - if (strlen(s) != 8 && strlen(s) != 14) + /* + * POSIX strptime says "The application shall ensure that there + * is white-space or other non-alphanumeric characters between + * any two conversion specifications" so arrange things this way. + */ + switch (strlen(s)) { + case 8: + fmt = "%Y/%m/%d"; + snprintf(buf, sizeof(buf), "%.4s/%.2s/%.2s", s, s + 4, s + 6); + break; + case 14: + fmt = "%Y/%m/%d %H:%M:%S"; + snprintf(buf, sizeof(buf), "%.4s/%.2s/%.2s %.2s:%.2s:%.2s", + s, s + 4, s + 6, s + 8, s + 10, s + 12); + break; + default: fatal("Invalid certificate time format %s", s); + } bzero(&tm, sizeof(tm)); - if (strptime(s, - strlen(s) == 8 ? "%Y%m%d" : "%Y%m%d%H%M%S", &tm) == NULL) + if (strptime(buf, fmt, &tm) == NULL) fatal("Invalid certificate time %s", s); if ((tt = mktime(&tm)) < 0) fatal("Certificate time %s cannot be represented", s); |