* configure.ac: Check for timegm.
* mkerrors: Prettier error formating for gpg-error style codes. * conversion.c (_gpgme_parse_timestamp): New. Now also handles ISO 8601 timestamps as used by gnupg 1.9.2. * keylist.c (parse_timestamp): Removed. Replaced calls by _gpgme_parse_timestamp. * verify.c (_gpgme_verify_status_handler): Replaced strtoul by _gpgme_parse_timestamp. * sign.c (append_xml_siginfo): Ditto.
This commit is contained in:
parent
43961ac064
commit
b440942f16
@ -1,3 +1,7 @@
|
|||||||
|
2003-11-18 Werner Koch <wk@gnupg.org>
|
||||||
|
|
||||||
|
* configure.ac: Check for timegm.
|
||||||
|
|
||||||
2003-02-18 Marcus Brinkmann <marcus@g10code.de>
|
2003-02-18 Marcus Brinkmann <marcus@g10code.de>
|
||||||
|
|
||||||
Released 0.3.15.
|
Released 0.3.15.
|
||||||
|
5
NEWS
5
NEWS
@ -1,3 +1,8 @@
|
|||||||
|
Noteworthy changes in version 0.3.16
|
||||||
|
-------------------------------------------------
|
||||||
|
|
||||||
|
* Compatibility fixes for GnuPG 1.9.
|
||||||
|
|
||||||
Noteworthy changes in version 0.3.15 (2003-02-18)
|
Noteworthy changes in version 0.3.15 (2003-02-18)
|
||||||
-------------------------------------------------
|
-------------------------------------------------
|
||||||
|
|
||||||
|
@ -1,3 +1,7 @@
|
|||||||
|
2003-11-18 Werner Koch <wk@gnupg.org>
|
||||||
|
|
||||||
|
* mkerrors: Prettier error formating for gpg-error style codes.
|
||||||
|
|
||||||
2002-05-03 Werner Koch <wk@gnupg.org>
|
2002-05-03 Werner Koch <wk@gnupg.org>
|
||||||
|
|
||||||
* assuan-pipe-connect.c (assuan_pipe_connect2): New to extend
|
* assuan-pipe-connect.c (assuan_pipe_connect2): New to extend
|
||||||
|
@ -40,7 +40,7 @@ const char *
|
|||||||
assuan_strerror (AssuanError err)
|
assuan_strerror (AssuanError err)
|
||||||
{
|
{
|
||||||
const char *s;
|
const char *s;
|
||||||
static char buf[25];
|
static char buf[50];
|
||||||
|
|
||||||
switch (err)
|
switch (err)
|
||||||
{
|
{
|
||||||
@ -62,7 +62,18 @@ printf "%s\"; break;\n", tolower(substr(s,8));
|
|||||||
'
|
'
|
||||||
|
|
||||||
cat <<EOF
|
cat <<EOF
|
||||||
default: sprintf (buf, "ec=%d", err ); s=buf; break;
|
default:
|
||||||
|
{
|
||||||
|
unsigned int source, code;
|
||||||
|
|
||||||
|
source = ((err >> 24) & 0xff);
|
||||||
|
code = (err & 0x00ffffff);
|
||||||
|
if (source) /* Assume this is an libgpg-error. */
|
||||||
|
sprintf (buf, "ec=%u.%u", source, code );
|
||||||
|
else
|
||||||
|
sprintf (buf, "ec=%d", err );
|
||||||
|
s=buf; break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return s;
|
return s;
|
||||||
|
@ -154,6 +154,8 @@ fi
|
|||||||
dnl
|
dnl
|
||||||
dnl Checks for library functions.
|
dnl Checks for library functions.
|
||||||
dnl
|
dnl
|
||||||
|
AC_CHECK_FUNCS(timegm)
|
||||||
|
|
||||||
|
|
||||||
AC_REPLACE_FUNCS(stpcpy)
|
AC_REPLACE_FUNCS(stpcpy)
|
||||||
|
|
||||||
|
@ -1,3 +1,13 @@
|
|||||||
|
2003-11-18 Werner Koch <wk@gnupg.org>
|
||||||
|
|
||||||
|
* conversion.c (_gpgme_parse_timestamp): New. Now also handles ISO
|
||||||
|
8601 timestamps as used by gnupg 1.9.2.
|
||||||
|
* keylist.c (parse_timestamp): Removed. Replaced calls by
|
||||||
|
_gpgme_parse_timestamp.
|
||||||
|
* verify.c (_gpgme_verify_status_handler): Replaced strtoul by
|
||||||
|
_gpgme_parse_timestamp.
|
||||||
|
* sign.c (append_xml_siginfo): Ditto.
|
||||||
|
|
||||||
2003-02-18 Marcus Brinkmann <marcus@g10code.de>
|
2003-02-18 Marcus Brinkmann <marcus@g10code.de>
|
||||||
|
|
||||||
* engine-gpgsm.c (_gpgme_gpgsm_op_sign): Call
|
* engine-gpgsm.c (_gpgme_gpgsm_op_sign): Call
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/* conversion.c - String conversion helper functions.
|
/* conversion.c - String conversion helper functions.
|
||||||
* Copyright (C) 2000 Werner Koch (dd9jn)
|
* Copyright (C) 2000 Werner Koch (dd9jn)
|
||||||
* Copyright (C) 2001, 2002 g10 Code GmbH
|
* Copyright (C) 2001, 2002, 2003 g10 Code GmbH
|
||||||
*
|
*
|
||||||
* This file is part of GPGME.
|
* This file is part of GPGME.
|
||||||
*
|
*
|
||||||
@ -23,11 +23,17 @@
|
|||||||
#include <config.h>
|
#include <config.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
|
#include <time.h>
|
||||||
#include "gpgme.h"
|
#include "gpgme.h"
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
|
|
||||||
|
#define atoi_1(p) (*(p) - '0' )
|
||||||
|
#define atoi_2(p) ((atoi_1(p) * 10) + atoi_1((p)+1))
|
||||||
|
#define atoi_4(p) ((atoi_2(p) * 100) + atoi_2((p)+2))
|
||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
_gpgme_hextobyte (const byte *str)
|
_gpgme_hextobyte (const byte *str)
|
||||||
@ -138,3 +144,56 @@ _gpgme_decode_c_string (const char *src, char **destp)
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
time_t
|
||||||
|
_gpgme_parse_timestamp (const char *timestamp)
|
||||||
|
{
|
||||||
|
/* Need toskip leading spaces, becuase that is what strtoul does but
|
||||||
|
not our ISO 8601 checking code. */
|
||||||
|
while (*timestamp && *timestamp== ' ')
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -44,7 +44,7 @@ extern "C" {
|
|||||||
AM_PATH_GPGME macro) check that this header matches the installed
|
AM_PATH_GPGME macro) check that this header matches the installed
|
||||||
library. Warning: Do not edit the next line. configure will do
|
library. Warning: Do not edit the next line. configure will do
|
||||||
that for you! */
|
that for you! */
|
||||||
#define GPGME_VERSION "0.3.15"
|
#define GPGME_VERSION "0.3.16-cvs"
|
||||||
|
|
||||||
|
|
||||||
/* The opaque data types used by GPGME. */
|
/* The opaque data types used by GPGME. */
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/* keylist.c - key listing
|
/* keylist.c - key listing
|
||||||
* Copyright (C) 2000 Werner Koch (dd9jn)
|
* Copyright (C) 2000 Werner Koch (dd9jn)
|
||||||
* Copyright (C) 2001, 2002 g10 Code GmbH
|
* Copyright (C) 2001, 2002, 2003 g10 Code GmbH
|
||||||
*
|
*
|
||||||
* This file is part of GPGME.
|
* This file is part of GPGME.
|
||||||
*
|
*
|
||||||
@ -118,16 +118,6 @@ keylist_status_handler (GpgmeCtx ctx, GpgmeStatusCode code, char *args)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static time_t
|
|
||||||
parse_timestamp (char *p)
|
|
||||||
{
|
|
||||||
if (!*p)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
return (time_t)strtoul (p, NULL, 10);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
set_mainkey_trust_info (GpgmeKey key, const char *s)
|
set_mainkey_trust_info (GpgmeKey key, const char *s)
|
||||||
{
|
{
|
||||||
@ -389,10 +379,10 @@ keylist_colon_handler (GpgmeCtx ctx, char *line)
|
|||||||
strcpy (key->keys.keyid, p);
|
strcpy (key->keys.keyid, p);
|
||||||
break;
|
break;
|
||||||
case 6: /* timestamp (seconds) */
|
case 6: /* timestamp (seconds) */
|
||||||
key->keys.timestamp = parse_timestamp (p);
|
key->keys.timestamp = _gpgme_parse_timestamp (p);
|
||||||
break;
|
break;
|
||||||
case 7: /* expiration time (seconds) */
|
case 7: /* expiration time (seconds) */
|
||||||
key->keys.expires_at = parse_timestamp (p);
|
key->keys.expires_at = _gpgme_parse_timestamp (p);
|
||||||
break;
|
break;
|
||||||
case 8: /* X.509 serial number */
|
case 8: /* X.509 serial number */
|
||||||
if (rectype == RT_CRT || rectype == RT_CRS)
|
if (rectype == RT_CRT || rectype == RT_CRS)
|
||||||
@ -444,10 +434,10 @@ keylist_colon_handler (GpgmeCtx ctx, char *line)
|
|||||||
strcpy (sk->keyid, p);
|
strcpy (sk->keyid, p);
|
||||||
break;
|
break;
|
||||||
case 6: /* timestamp (seconds) */
|
case 6: /* timestamp (seconds) */
|
||||||
sk->timestamp = parse_timestamp (p);
|
sk->timestamp = _gpgme_parse_timestamp (p);
|
||||||
break;
|
break;
|
||||||
case 7: /* expiration time (seconds) */
|
case 7: /* expiration time (seconds) */
|
||||||
sk->expires_at = parse_timestamp (p);
|
sk->expires_at = _gpgme_parse_timestamp (p);
|
||||||
break;
|
break;
|
||||||
case 8: /* reserved (LID) */
|
case 8: /* reserved (LID) */
|
||||||
break;
|
break;
|
||||||
|
@ -122,7 +122,7 @@ append_xml_siginfo (GpgmeData *rdh, char *args)
|
|||||||
_gpgme_data_append_string (dh, helpbuf);
|
_gpgme_data_append_string (dh, helpbuf);
|
||||||
SKIP_TOKEN_OR_RETURN (args);
|
SKIP_TOKEN_OR_RETURN (args);
|
||||||
|
|
||||||
ul = strtoul (args, NULL, 10);
|
ul = _gpgme_parse_timestamp (args);
|
||||||
sprintf (helpbuf, " <created>%lu</created>\n", ul);
|
sprintf (helpbuf, " <created>%lu</created>\n", ul);
|
||||||
_gpgme_data_append_string (dh, helpbuf);
|
_gpgme_data_append_string (dh, helpbuf);
|
||||||
SKIP_TOKEN_OR_RETURN (args);
|
SKIP_TOKEN_OR_RETURN (args);
|
||||||
|
@ -100,5 +100,6 @@ FILE *fopencookie (void *cookie, const char *opentype,
|
|||||||
/*-- conversion.c --*/
|
/*-- conversion.c --*/
|
||||||
GpgmeError _gpgme_decode_c_string (const char *src, char **destp);
|
GpgmeError _gpgme_decode_c_string (const char *src, char **destp);
|
||||||
int _gpgme_hextobyte (const byte *str);
|
int _gpgme_hextobyte (const byte *str);
|
||||||
|
time_t _gpgme_parse_timestamp (const char *p);
|
||||||
|
|
||||||
#endif /* UTIL_H */
|
#endif /* UTIL_H */
|
||||||
|
@ -251,9 +251,14 @@ _gpgme_verify_status_handler (GpgmeCtx ctx, GpgmeStatusCode code, char *args)
|
|||||||
while (args[i] && args[i] != ' ')
|
while (args[i] && args[i] != ' ')
|
||||||
i++;
|
i++;
|
||||||
/* And get the timestamp. */
|
/* And get the timestamp. */
|
||||||
ctx->result.verify->timestamp = strtoul (args+i, &p, 10);
|
ctx->result.verify->timestamp = _gpgme_parse_timestamp (args+i);
|
||||||
if (args[i])
|
if (args[i])
|
||||||
ctx->result.verify->exptimestamp = strtoul (p, NULL, 10);
|
{
|
||||||
|
/* Skip that timestamp. */
|
||||||
|
while (args[i] && args[i] != ' ')
|
||||||
|
i++;
|
||||||
|
ctx->result.verify->exptimestamp = _gpgme_parse_timestamp (args+i);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GPGME_STATUS_BADSIG:
|
case GPGME_STATUS_BADSIG:
|
||||||
|
Loading…
Reference in New Issue
Block a user