(parse_timestamp): Detect ISO 8601 timestamps and try
to convert them.
This commit is contained in:
parent
2250b42294
commit
2f1226cea9
5
TODO
5
TODO
@ -26,6 +26,7 @@ Hey Emacs, this is -*- outline -*- mode!
|
||||
|
||||
* Thread support:
|
||||
** When GNU Pth supports sendmsg/recvmsg, wrap them properly.
|
||||
** Without timegm (3) support our ISO time parser is not thread safe.
|
||||
|
||||
* New features:
|
||||
** notification system
|
||||
@ -56,6 +57,10 @@ Hey Emacs, this is -*- outline -*- mode!
|
||||
worked around in a different way
|
||||
*** Selecting the symmetric cipher.
|
||||
*** Exchanging keys with key servers.
|
||||
** Allow selection of subkeys
|
||||
** Allow to return time stamps in ISO format
|
||||
This allows us to handle years later than 2037 properly. With the
|
||||
time_t interface they are all mapped to 2037-12-31
|
||||
|
||||
* Documentation
|
||||
** Document validity and trust issues.
|
||||
|
@ -1,3 +1,8 @@
|
||||
2003-10-31 Werner Koch <wk@gnupg.org>
|
||||
|
||||
* keylist.c (parse_timestamp): Detect ISO 8601 timestamps and try
|
||||
to convert them.
|
||||
|
||||
2003-10-10 Marcus Brinkmann <marcus@g10code.de>
|
||||
|
||||
* genkey.c (get_key_parameter): Make a copy of the key parameters.
|
||||
|
@ -122,6 +122,44 @@ parse_timestamp (char *timestamp)
|
||||
if (!*timestamp)
|
||||
return 0;
|
||||
|
||||
if (strlen (timestamp) >= 15 && timestamp[8] == 'T')
|
||||
{
|
||||
struct tm buf;
|
||||
int year;
|
||||
|
||||
year = atoi_4 (timestamp);
|
||||
if (year < 1900)
|
||||
return (time_t)(-1);
|
||||
|
||||
/* Fixme: We would better use a configure test to see whether
|
||||
mktime can handle dates beyond 2038. */
|
||||
if (sizeof (time_t) <= 4 && year >= 2038)
|
||||
return (time_t)2145914603; /* 2037-12-31 23:23:23 */
|
||||
|
||||
memset (&buf, 0, sizeof buf);
|
||||
buf.tm_year = year - 1900;
|
||||
buf.tm_mon = atoi_2 (timestamp+4) - 1;
|
||||
buf.tm_mday = atoi_2 (timestamp+6);
|
||||
buf.tm_hour = atoi_2 (timestamp+9);
|
||||
buf.tm_min = atoi_2 (timestamp+11);
|
||||
buf.tm_sec = atoi_2 (timestamp+13);
|
||||
|
||||
#ifdef HAVE_TIMEGM
|
||||
return timegm (&buf);
|
||||
#else
|
||||
{
|
||||
time_t tim;
|
||||
|
||||
putenv ("TZ=UTC");
|
||||
tim = mktime (&buf);
|
||||
#ifdef __GNUC__
|
||||
#warning fixme: we must somehow reset TZ here. It is not threadsafe anyway.
|
||||
#endif
|
||||
return tim;
|
||||
}
|
||||
#endif /* !HAVE_TIMEGM */
|
||||
}
|
||||
else
|
||||
return (time_t) strtoul (timestamp, NULL, 10);
|
||||
}
|
||||
|
||||
|
@ -259,6 +259,8 @@ parse_valid_sig (gpgme_signature_t sig, char *args)
|
||||
{
|
||||
char *tail;
|
||||
errno = 0;
|
||||
|
||||
/* FIXME: We need to cope with ISO time strings here. */
|
||||
sig->timestamp = strtol (end, &tail, 0);
|
||||
if (errno || end == tail || (*tail && *tail != ' '))
|
||||
return gpg_error (GPG_ERR_INV_ENGINE);
|
||||
|
Loading…
Reference in New Issue
Block a user