mirror of
git://git.gnupg.org/gnupg.git
synced 2024-12-22 10:19:57 +01:00
Improved logging for error orginating from libgcrypt.
This commit is contained in:
parent
e3a8e6b727
commit
b89d98e335
2
NEWS
2
NEWS
@ -7,6 +7,8 @@ Noteworthy changes in version 2.0.4
|
||||
* PKCS#12 import now tries several encodings in case the passphrase
|
||||
was not utf-8 encoded. New option --p12-charset for gpgsm.
|
||||
|
||||
* Improved the libgcrypt logging support in all modules.
|
||||
|
||||
|
||||
Noteworthy changes in version 2.0.3 (2007-03-08)
|
||||
------------------------------------------------
|
||||
|
@ -1,3 +1,10 @@
|
||||
2007-04-20 Werner Koch <wk@g10code.com>
|
||||
|
||||
* gpg-agent.c (my_gcry_logger, my_gcry_outofcore_handler): Removed.
|
||||
(main): Call the setup_libgcrypt_logging helper.
|
||||
* protect-tool.c (my_gcry_logger): Removed.
|
||||
(main): Call the setup_libgcrypt_logging helper.
|
||||
|
||||
2007-04-03 Werner Koch <wk@g10code.com>
|
||||
|
||||
* trustlist.c (read_trustfiles): Take a missing trustlist as an
|
||||
|
@ -276,48 +276,6 @@ i18n_init (void)
|
||||
|
||||
|
||||
|
||||
/* Used by gcry for logging */
|
||||
static void
|
||||
my_gcry_logger (void *dummy, int level, const char *fmt, va_list arg_ptr)
|
||||
{
|
||||
/* translate the log levels */
|
||||
switch (level)
|
||||
{
|
||||
case GCRY_LOG_CONT: level = JNLIB_LOG_CONT; break;
|
||||
case GCRY_LOG_INFO: level = JNLIB_LOG_INFO; break;
|
||||
case GCRY_LOG_WARN: level = JNLIB_LOG_WARN; break;
|
||||
case GCRY_LOG_ERROR:level = JNLIB_LOG_ERROR; break;
|
||||
case GCRY_LOG_FATAL:level = JNLIB_LOG_FATAL; break;
|
||||
case GCRY_LOG_BUG: level = JNLIB_LOG_BUG; break;
|
||||
case GCRY_LOG_DEBUG:level = JNLIB_LOG_DEBUG; break;
|
||||
default: level = JNLIB_LOG_ERROR; break;
|
||||
}
|
||||
log_logv (level, fmt, arg_ptr);
|
||||
}
|
||||
|
||||
|
||||
/* This function is called by libgcrypt if it ran out of core and
|
||||
there is no way to return that error to the caller. We do our own
|
||||
function here to make use of our logging functions. */
|
||||
static int
|
||||
my_gcry_outofcore_handler ( void *opaque, size_t req_n, unsigned int flags)
|
||||
{
|
||||
static int been_here; /* Used to protect against recursive calls. */
|
||||
|
||||
if (!been_here)
|
||||
{
|
||||
been_here = 1;
|
||||
if ( (flags & 1) )
|
||||
log_fatal (_("out of core in secure memory "
|
||||
"while allocating %lu bytes"), (unsigned long)req_n);
|
||||
else
|
||||
log_fatal (_("out of core while allocating %lu bytes"),
|
||||
(unsigned long)req_n);
|
||||
}
|
||||
return 0; /* Let libgcrypt call its own fatal error handler. */
|
||||
}
|
||||
|
||||
|
||||
/* Setup the debugging. With the global variable DEBUG_LEVEL set to NULL
|
||||
only the active debug flags are propagated to the subsystems. With
|
||||
DEBUG_LEVEL set, a specific set of debug flags is set; thus overriding
|
||||
@ -518,7 +476,7 @@ main (int argc, char **argv )
|
||||
the option parsing may need services of the library. */
|
||||
if (!gcry_check_version (NEED_LIBGCRYPT_VERSION) )
|
||||
{
|
||||
log_fatal( _("libgcrypt is too old (need %s, have %s)\n"),
|
||||
log_fatal( _("%s is too old (need %s, have %s)\n"), "libgcrypt",
|
||||
NEED_LIBGCRYPT_VERSION, gcry_check_version (NULL) );
|
||||
}
|
||||
|
||||
@ -527,8 +485,7 @@ main (int argc, char **argv )
|
||||
assuan_set_assuan_log_prefix (log_get_prefix (NULL));
|
||||
assuan_set_assuan_err_source (GPG_ERR_SOURCE_DEFAULT);
|
||||
|
||||
gcry_set_log_handler (my_gcry_logger, NULL);
|
||||
gcry_set_outofcore_handler (my_gcry_outofcore_handler, NULL);
|
||||
setup_libgcrypt_logging ();
|
||||
gcry_control (GCRYCTL_USE_SECURE_RNDPOOL);
|
||||
|
||||
may_coredump = disable_core_dumps ();
|
||||
|
@ -177,25 +177,6 @@ i18n_init (void)
|
||||
|
||||
|
||||
|
||||
/* Used by gcry for logging */
|
||||
static void
|
||||
my_gcry_logger (void *dummy, int level, const char *fmt, va_list arg_ptr)
|
||||
{
|
||||
/* translate the log levels */
|
||||
switch (level)
|
||||
{
|
||||
case GCRY_LOG_CONT: level = JNLIB_LOG_CONT; break;
|
||||
case GCRY_LOG_INFO: level = JNLIB_LOG_INFO; break;
|
||||
case GCRY_LOG_WARN: level = JNLIB_LOG_WARN; break;
|
||||
case GCRY_LOG_ERROR:level = JNLIB_LOG_ERROR; break;
|
||||
case GCRY_LOG_FATAL:level = JNLIB_LOG_FATAL; break;
|
||||
case GCRY_LOG_BUG: level = JNLIB_LOG_BUG; break;
|
||||
case GCRY_LOG_DEBUG:level = JNLIB_LOG_DEBUG; break;
|
||||
default: level = JNLIB_LOG_ERROR; break; }
|
||||
log_logv (level, fmt, arg_ptr);
|
||||
}
|
||||
|
||||
|
||||
/* static void */
|
||||
/* print_mpi (const char *text, gcry_mpi_t a) */
|
||||
/* { */
|
||||
@ -1075,12 +1056,11 @@ main (int argc, char **argv )
|
||||
|
||||
if (!gcry_check_version (NEED_LIBGCRYPT_VERSION) )
|
||||
{
|
||||
log_fatal( _("libgcrypt is too old (need %s, have %s)\n"),
|
||||
log_fatal( _("%s is too old (need %s, have %s)\n"), "libgcrypt",
|
||||
NEED_LIBGCRYPT_VERSION, gcry_check_version (NULL) );
|
||||
}
|
||||
|
||||
gcry_set_log_handler (my_gcry_logger, NULL);
|
||||
|
||||
setup_libgcrypt_logging ();
|
||||
gcry_control (GCRYCTL_INIT_SECMEM, 16384, 0);
|
||||
|
||||
|
||||
|
@ -1,3 +1,10 @@
|
||||
2007-04-20 Werner Koch <wk@g10code.com>
|
||||
|
||||
* miscellaneous.c (my_gcry_logger, my_gcry_outofcore_handler):
|
||||
Moved from gpg-agent to here.
|
||||
(my_gcry_fatalerror_handler): new.
|
||||
(setup_libgcrypt_logging): New.
|
||||
|
||||
2007-03-19 Werner Koch <wk@g10code.com>
|
||||
|
||||
* miscellaneous.c (print_hexstring): New.
|
||||
|
@ -23,8 +23,75 @@
|
||||
#include <stdlib.h>
|
||||
#include <errno.h>
|
||||
|
||||
#define JNLIB_NEED_LOG_LOGV
|
||||
#include "util.h"
|
||||
#include "iobuf.h"
|
||||
#include "i18n.h"
|
||||
|
||||
|
||||
/* Used by libgcrypt for logging. */
|
||||
static void
|
||||
my_gcry_logger (void *dummy, int level, const char *fmt, va_list arg_ptr)
|
||||
{
|
||||
/* Map the log levels. */
|
||||
switch (level)
|
||||
{
|
||||
case GCRY_LOG_CONT: level = JNLIB_LOG_CONT; break;
|
||||
case GCRY_LOG_INFO: level = JNLIB_LOG_INFO; break;
|
||||
case GCRY_LOG_WARN: level = JNLIB_LOG_WARN; break;
|
||||
case GCRY_LOG_ERROR:level = JNLIB_LOG_ERROR; break;
|
||||
case GCRY_LOG_FATAL:level = JNLIB_LOG_FATAL; break;
|
||||
case GCRY_LOG_BUG: level = JNLIB_LOG_BUG; break;
|
||||
case GCRY_LOG_DEBUG:level = JNLIB_LOG_DEBUG; break;
|
||||
default: level = JNLIB_LOG_ERROR; break;
|
||||
}
|
||||
log_logv (level, fmt, arg_ptr);
|
||||
}
|
||||
|
||||
|
||||
/* This function is called by libgcrypt on a fatal error. */
|
||||
static void
|
||||
my_gcry_fatalerror_handler (void *opaque, int rc, const char *text)
|
||||
{
|
||||
log_fatal ("libgcrypt problem: %s\n", text ? text : gpg_strerror (rc));
|
||||
abort ();
|
||||
}
|
||||
|
||||
|
||||
/* This function is called by libgcrypt if it ran out of core and
|
||||
there is no way to return that error to the caller. We do our own
|
||||
function here to make use of our logging functions. */
|
||||
static int
|
||||
my_gcry_outofcore_handler (void *opaque, size_t req_n, unsigned int flags)
|
||||
{
|
||||
static int been_here; /* Used to protect against recursive calls. */
|
||||
|
||||
if (!been_here)
|
||||
{
|
||||
been_here = 1;
|
||||
if ( (flags & 1) )
|
||||
log_fatal (_("out of core in secure memory "
|
||||
"while allocating %lu bytes"), (unsigned long)req_n);
|
||||
else
|
||||
log_fatal (_("out of core while allocating %lu bytes"),
|
||||
(unsigned long)req_n);
|
||||
}
|
||||
return 0; /* Let libgcrypt call its own fatal error handler.
|
||||
Actually this will turn out to be
|
||||
my_gcry_fatalerror_handler. */
|
||||
}
|
||||
|
||||
|
||||
/* Setup libgcrypt to use our own logging functions. Should be used
|
||||
early at startup. */
|
||||
void
|
||||
setup_libgcrypt_logging (void)
|
||||
{
|
||||
gcry_set_log_handler (my_gcry_logger, NULL);
|
||||
gcry_set_fatalerror_handler (my_gcry_fatalerror_handler, NULL);
|
||||
gcry_set_outofcore_handler (my_gcry_outofcore_handler, NULL);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* Decide whether the filename is stdout or a real filename and return
|
||||
|
@ -171,6 +171,10 @@ void gnupg_rl_initialize (void);
|
||||
|
||||
/*-- miscellaneous.c --*/
|
||||
|
||||
/* This function is called at startup to tell libgcrypt to use our own
|
||||
logging subsystem. */
|
||||
void setup_libgcrypt_logging (void);
|
||||
|
||||
/* Same as asprintf but return an allocated buffer suitable to be
|
||||
freed using xfree. This function simply dies on memory failure,
|
||||
thus no extra check is required. */
|
||||
|
@ -429,7 +429,7 @@ main( int argc, char **argv )
|
||||
the option parsing may need services of the library. */
|
||||
if (!gcry_check_version (NEED_LIBGCRYPT_VERSION) )
|
||||
{
|
||||
log_fatal( _("libgcrypt is too old (need %s, have %s)\n"),
|
||||
log_fatal (_("%s is too old (need %s, have %s)\n"), "libgcrypt",
|
||||
NEED_LIBGCRYPT_VERSION, gcry_check_version (NULL) );
|
||||
}
|
||||
|
||||
|
@ -14,6 +14,7 @@ common/http.c
|
||||
common/simple-pwquery.c
|
||||
common/sysutils.c
|
||||
common/yesno.c
|
||||
common/miscellaneous.c
|
||||
|
||||
g10/armor.c
|
||||
g10/build-packet.c
|
||||
|
@ -1,3 +1,10 @@
|
||||
2007-04-20 Werner Koch <wk@g10code.com>
|
||||
|
||||
* sc-copykeys.c (my_gcry_logger): Removed.
|
||||
(main): Call setup_libgcrypt_logging helper.
|
||||
* scdaemon.c (my_gcry_logger): Removed.
|
||||
(main): Call setup_libgcrypt_logging helper.
|
||||
|
||||
2007-04-03 Werner Koch <wk@g10code.com>
|
||||
|
||||
* command.c (cmd_getinfo): New subcommand "reader_list".
|
||||
|
@ -93,25 +93,6 @@ my_strusage (int level)
|
||||
return p;
|
||||
}
|
||||
|
||||
/* Used by gcry for logging */
|
||||
static void
|
||||
my_gcry_logger (void *dummy, int level, const char *fmt, va_list arg_ptr)
|
||||
{
|
||||
/* translate the log levels */
|
||||
switch (level)
|
||||
{
|
||||
case GCRY_LOG_CONT: level = JNLIB_LOG_CONT; break;
|
||||
case GCRY_LOG_INFO: level = JNLIB_LOG_INFO; break;
|
||||
case GCRY_LOG_WARN: level = JNLIB_LOG_WARN; break;
|
||||
case GCRY_LOG_ERROR:level = JNLIB_LOG_ERROR; break;
|
||||
case GCRY_LOG_FATAL:level = JNLIB_LOG_FATAL; break;
|
||||
case GCRY_LOG_BUG: level = JNLIB_LOG_BUG; break;
|
||||
case GCRY_LOG_DEBUG:level = JNLIB_LOG_DEBUG; break;
|
||||
default: level = JNLIB_LOG_ERROR; break;
|
||||
}
|
||||
log_logv (level, fmt, arg_ptr);
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
main (int argc, char **argv )
|
||||
@ -131,11 +112,11 @@ main (int argc, char **argv )
|
||||
the option parsing may need services of the library */
|
||||
if (!gcry_check_version (NEED_LIBGCRYPT_VERSION) )
|
||||
{
|
||||
log_fatal( _("libgcrypt is too old (need %s, have %s)\n"),
|
||||
log_fatal (_("%s is too old (need %s, have %s)\n"), "libgcrypt",
|
||||
NEED_LIBGCRYPT_VERSION, gcry_check_version (NULL) );
|
||||
}
|
||||
|
||||
gcry_set_log_handler (my_gcry_logger, NULL);
|
||||
setup_libgcrypt_logging ();
|
||||
gcry_control (GCRYCTL_DISABLE_SECMEM, 0); /* FIXME - we want to use it */
|
||||
/* FIXME? gcry_control (GCRYCTL_USE_SECURE_RNDPOOL);*/
|
||||
|
||||
|
@ -221,25 +221,6 @@ i18n_init (void)
|
||||
|
||||
|
||||
|
||||
/* Used by gcry for logging */
|
||||
static void
|
||||
my_gcry_logger (void *dummy, int level, const char *fmt, va_list arg_ptr)
|
||||
{
|
||||
/* translate the log levels */
|
||||
switch (level)
|
||||
{
|
||||
case GCRY_LOG_CONT: level = JNLIB_LOG_CONT; break;
|
||||
case GCRY_LOG_INFO: level = JNLIB_LOG_INFO; break;
|
||||
case GCRY_LOG_WARN: level = JNLIB_LOG_WARN; break;
|
||||
case GCRY_LOG_ERROR:level = JNLIB_LOG_ERROR; break;
|
||||
case GCRY_LOG_FATAL:level = JNLIB_LOG_FATAL; break;
|
||||
case GCRY_LOG_BUG: level = JNLIB_LOG_BUG; break;
|
||||
case GCRY_LOG_DEBUG:level = JNLIB_LOG_DEBUG; break;
|
||||
default: level = JNLIB_LOG_ERROR; break;
|
||||
}
|
||||
log_logv (level, fmt, arg_ptr);
|
||||
}
|
||||
|
||||
|
||||
/* Setup the debugging. With a LEVEL of NULL only the active debug
|
||||
flags are propagated to the subsystems. With LEVEL set, a specific
|
||||
@ -355,7 +336,7 @@ main (int argc, char **argv )
|
||||
the option parsing may need services of the library */
|
||||
if (!gcry_check_version (NEED_LIBGCRYPT_VERSION) )
|
||||
{
|
||||
log_fatal( _("libgcrypt is too old (need %s, have %s)\n"),
|
||||
log_fatal (_("%s is too old (need %s, have %s)\n"), "libgcrypt",
|
||||
NEED_LIBGCRYPT_VERSION, gcry_check_version (NULL) );
|
||||
}
|
||||
|
||||
@ -366,8 +347,7 @@ main (int argc, char **argv )
|
||||
assuan_set_assuan_log_prefix (log_get_prefix (NULL));
|
||||
assuan_set_assuan_err_source (GPG_ERR_SOURCE_DEFAULT);
|
||||
|
||||
|
||||
gcry_set_log_handler (my_gcry_logger, NULL);
|
||||
setup_libgcrypt_logging ();
|
||||
gcry_control (GCRYCTL_USE_SECURE_RNDPOOL);
|
||||
|
||||
may_coredump = disable_core_dumps ();
|
||||
|
@ -1,3 +1,7 @@
|
||||
2007-04-20 Werner Koch <wk@g10code.com>
|
||||
|
||||
* gpgsm.c (main): Parameterize failed versions check messages.
|
||||
|
||||
2007-04-19 Werner Koch <wk@g10code.com>
|
||||
|
||||
* certcheck.c (do_encode_md): Add arg PKEY. Add support for DSA2
|
||||
|
12
sm/gpgsm.c
12
sm/gpgsm.c
@ -768,15 +768,11 @@ main ( int argc, char **argv)
|
||||
/* Check that the libraries are suitable. Do it here because the
|
||||
option parse may need services of the library */
|
||||
if (!gcry_check_version (NEED_LIBGCRYPT_VERSION) )
|
||||
{
|
||||
log_fatal( _("libgcrypt is too old (need %s, have %s)\n"),
|
||||
NEED_LIBGCRYPT_VERSION, gcry_check_version (NULL) );
|
||||
}
|
||||
log_fatal (_("%s is too old (need %s, have %s)\n"), "libgcrypt",
|
||||
NEED_LIBGCRYPT_VERSION, gcry_check_version (NULL) );
|
||||
if (!ksba_check_version (NEED_KSBA_VERSION) )
|
||||
{
|
||||
log_fatal( _("libksba is too old (need %s, have %s)\n"),
|
||||
NEED_KSBA_VERSION, ksba_check_version (NULL) );
|
||||
}
|
||||
log_fatal (_("%s is too old (need %s, have %s)\n"), "libksba",
|
||||
NEED_KSBA_VERSION, ksba_check_version (NULL) );
|
||||
|
||||
|
||||
gcry_control (GCRYCTL_USE_SECURE_RNDPOOL);
|
||||
|
@ -1,3 +1,8 @@
|
||||
2007-04-20 Werner Koch <wk@g10code.com>
|
||||
|
||||
* symcryptrun.c (my_gcry_logger): Removed.
|
||||
(main): Call setup_libgcrypt_logging.
|
||||
|
||||
2007-04-03 Werner Koch <wk@g10code.com>
|
||||
|
||||
* gpgconf-comp.c: Allow changing of --allow-mark-trusted.
|
||||
|
@ -95,25 +95,6 @@
|
||||
#define SIMPLE_PWQUERY_IMPLEMENTATION 1
|
||||
#include "../common/simple-pwquery.h"
|
||||
|
||||
|
||||
/* Used by gcry for logging */
|
||||
static void
|
||||
my_gcry_logger (void *dummy, int level, const char *fmt, va_list arg_ptr)
|
||||
{
|
||||
/* translate the log levels */
|
||||
switch (level)
|
||||
{
|
||||
case GCRY_LOG_CONT: level = JNLIB_LOG_CONT; break;
|
||||
case GCRY_LOG_INFO: level = JNLIB_LOG_INFO; break;
|
||||
case GCRY_LOG_WARN: level = JNLIB_LOG_WARN; break;
|
||||
case GCRY_LOG_ERROR:level = JNLIB_LOG_ERROR; break;
|
||||
case GCRY_LOG_FATAL:level = JNLIB_LOG_FATAL; break;
|
||||
case GCRY_LOG_BUG: level = JNLIB_LOG_BUG; break;
|
||||
case GCRY_LOG_DEBUG:level = JNLIB_LOG_DEBUG; break;
|
||||
default: level = JNLIB_LOG_ERROR; break; }
|
||||
log_logv (level, fmt, arg_ptr);
|
||||
}
|
||||
|
||||
|
||||
/* From simple-gettext.c. */
|
||||
|
||||
@ -1053,10 +1034,10 @@ main (int argc, char **argv)
|
||||
gcry_control (GCRYCTL_SUSPEND_SECMEM_WARN);
|
||||
if (!gcry_check_version (NEED_LIBGCRYPT_VERSION) )
|
||||
{
|
||||
log_fatal( _("libgcrypt is too old (need %s, have %s)\n"),
|
||||
log_fatal (_("%s is too old (need %s, have %s)\n"), "libgcrypt",
|
||||
NEED_LIBGCRYPT_VERSION, gcry_check_version (NULL) );
|
||||
}
|
||||
gcry_set_log_handler (my_gcry_logger, NULL);
|
||||
setup_libgcrypt_logging ();
|
||||
gcry_control (GCRYCTL_INIT_SECMEM, 16384, 0);
|
||||
|
||||
if (!opt.class)
|
||||
|
Loading…
x
Reference in New Issue
Block a user