diff --git a/agent/gpg-agent.c b/agent/gpg-agent.c index b8a5a3e07..79c83a5d3 100644 --- a/agent/gpg-agent.c +++ b/agent/gpg-agent.c @@ -771,7 +771,7 @@ main (int argc, char **argv ) assuan_set_gpg_err_source (GPG_ERR_SOURCE_DEFAULT); assuan_set_system_hooks (ASSUAN_SYSTEM_NPTH); assuan_sock_init (); - setup_libassuan_logging (&opt.debug); + setup_libassuan_logging (&opt.debug, NULL); setup_libgcrypt_logging (); gcry_control (GCRYCTL_USE_SECURE_RNDPOOL); diff --git a/common/asshelp.c b/common/asshelp.c index c03e67bff..bb01a03c7 100644 --- a/common/asshelp.c +++ b/common/asshelp.c @@ -69,6 +69,12 @@ static int log_cats; #define TEST_LOG_CAT(x) (!! (log_cats & (1 << (x - 1)))) +/* The assuan log monitor used to temporary inhibit log messages from + * assuan. */ +static int (*my_log_monitor) (assuan_context_t ctx, + unsigned int cat, + const char *msg); + static int my_libassuan_log_handler (assuan_context_t ctx, void *hook, @@ -76,8 +82,6 @@ my_libassuan_log_handler (assuan_context_t ctx, void *hook, { unsigned int dbgval; - (void)ctx; - if (! TEST_LOG_CAT (cat)) return 0; @@ -85,6 +89,9 @@ my_libassuan_log_handler (assuan_context_t ctx, void *hook, if (!(dbgval & 1024)) return 0; /* Assuan debugging is not enabled. */ + if (ctx && my_log_monitor && !my_log_monitor (ctx, cat, msg)) + return 0; /* Temporary disabled. */ + if (msg) log_string (GPGRT_LOG_DEBUG, msg); @@ -95,7 +102,10 @@ my_libassuan_log_handler (assuan_context_t ctx, void *hook, /* Setup libassuan to use our own logging functions. Should be used early at startup. */ void -setup_libassuan_logging (unsigned int *debug_var_address) +setup_libassuan_logging (unsigned int *debug_var_address, + int (*log_monitor)(assuan_context_t ctx, + unsigned int cat, + const char *msg)) { char *flagstr; @@ -104,9 +114,11 @@ setup_libassuan_logging (unsigned int *debug_var_address) log_cats = atoi (flagstr); else /* Default to log the control channel. */ log_cats = (1 << (ASSUAN_LOG_CONTROL - 1)); + my_log_monitor = log_monitor; assuan_set_log_cb (my_libassuan_log_handler, debug_var_address); } + /* Change the Libassuan log categories to those given by NEWCATS. NEWCATS is 0 the default category of ASSUAN_LOG_CONTROL is selected. Note, that setup_libassuan_logging overrides the values diff --git a/common/asshelp.h b/common/asshelp.h index 4eb1d9267..609b203da 100644 --- a/common/asshelp.h +++ b/common/asshelp.h @@ -38,7 +38,10 @@ /*-- asshelp.c --*/ -void setup_libassuan_logging (unsigned int *debug_var_address); +void setup_libassuan_logging (unsigned int *debug_var_address, + int (*log_monitor)(assuan_context_t ctx, + unsigned int cat, + const char *msg)); void set_libassuan_log_cats (unsigned int newcats); diff --git a/dirmngr/dirmngr.c b/dirmngr/dirmngr.c index 0667e59a2..2bb57b207 100644 --- a/dirmngr/dirmngr.c +++ b/dirmngr/dirmngr.c @@ -702,7 +702,7 @@ main (int argc, char **argv) assuan_set_gpg_err_source (GPG_ERR_SOURCE_DEFAULT); assuan_set_system_hooks (ASSUAN_SYSTEM_NPTH); assuan_sock_init (); - setup_libassuan_logging (&opt.debug); + setup_libassuan_logging (&opt.debug, NULL); setup_libgcrypt_logging (); diff --git a/g10/gpg.c b/g10/gpg.c index 0b0fb7e75..9f7da050b 100644 --- a/g10/gpg.c +++ b/g10/gpg.c @@ -2317,7 +2317,7 @@ main (int argc, char **argv) malloc_hooks.free = gcry_free; assuan_set_malloc_hooks (&malloc_hooks); assuan_set_gpg_err_source (GPG_ERR_SOURCE_DEFAULT); - setup_libassuan_logging (&opt.debug); + setup_libassuan_logging (&opt.debug, NULL); /* Try for a version specific config file first */ default_configname = get_default_configname (); diff --git a/g13/g13-syshelp.c b/g13/g13-syshelp.c index 7976be43d..7b4623946 100644 --- a/g13/g13-syshelp.c +++ b/g13/g13-syshelp.c @@ -302,7 +302,7 @@ main ( int argc, char **argv) /* Prepare libassuan. */ assuan_set_gpg_err_source (GPG_ERR_SOURCE_DEFAULT); /*assuan_set_system_hooks (ASSUAN_SYSTEM_NPTH);*/ - setup_libassuan_logging (&opt.debug); + setup_libassuan_logging (&opt.debug, NULL); /* Setup a default control structure for command line mode. */ memset (&ctrl, 0, sizeof ctrl); diff --git a/g13/g13.c b/g13/g13.c index 7744855c2..33f82d668 100644 --- a/g13/g13.c +++ b/g13/g13.c @@ -431,7 +431,7 @@ main ( int argc, char **argv) /* Prepare libassuan. */ assuan_set_gpg_err_source (GPG_ERR_SOURCE_DEFAULT); assuan_set_system_hooks (ASSUAN_SYSTEM_NPTH); - setup_libassuan_logging (&opt.debug); + setup_libassuan_logging (&opt.debug, NULL); /* Setup a default control structure for command line mode. */ memset (&ctrl, 0, sizeof ctrl); diff --git a/scd/scdaemon.c b/scd/scdaemon.c index 514e3c23c..bf54d95c0 100644 --- a/scd/scdaemon.c +++ b/scd/scdaemon.c @@ -433,7 +433,7 @@ main (int argc, char **argv ) assuan_set_gpg_err_source (GPG_ERR_SOURCE_DEFAULT); assuan_set_system_hooks (ASSUAN_SYSTEM_NPTH); assuan_sock_init (); - setup_libassuan_logging (&opt.debug); + setup_libassuan_logging (&opt.debug, NULL); setup_libgcrypt_logging (); gcry_control (GCRYCTL_USE_SECURE_RNDPOOL); diff --git a/sm/gpgsm.c b/sm/gpgsm.c index e3b1e888d..9bb3053c2 100644 --- a/sm/gpgsm.c +++ b/sm/gpgsm.c @@ -1006,7 +1006,7 @@ main ( int argc, char **argv) malloc_hooks.free = gcry_free; assuan_set_malloc_hooks (&malloc_hooks); assuan_set_gpg_err_source (GPG_ERR_SOURCE_DEFAULT); - setup_libassuan_logging (&opt.debug); + setup_libassuan_logging (&opt.debug, NULL); keybox_set_malloc_hooks (gcry_malloc, gcry_realloc, gcry_free); diff --git a/tools/gpg-wks-client.c b/tools/gpg-wks-client.c index c0e34c499..660d1bd8d 100644 --- a/tools/gpg-wks-client.c +++ b/tools/gpg-wks-client.c @@ -211,7 +211,7 @@ main (int argc, char **argv) init_common_subsystems (&argc, &argv); assuan_set_gpg_err_source (GPG_ERR_SOURCE_DEFAULT); - setup_libassuan_logging (&opt.debug); + setup_libassuan_logging (&opt.debug, NULL); /* Parse the command line. */ pargs.argc = &argc;