support numeric debug levels.

This commit is contained in:
Werner Koch 2009-12-03 18:04:40 +00:00
parent edd95da365
commit cb5491bfaf
14 changed files with 236 additions and 59 deletions

6
NEWS
View File

@ -1,5 +1,5 @@
Noteworthy changes in version 2.1 (under development) Noteworthy changes in version 2.1.x (under development)
------------------------------------------------- -------------------------------------------------------
* Encrypted OpenPGP messages with trailing data (e.g. other OpenPGP * Encrypted OpenPGP messages with trailing data (e.g. other OpenPGP
packets) are now correctly parsed. packets) are now correctly parsed.
@ -8,6 +8,8 @@ Noteworthy changes in version 2.1 (under development)
* The G13 tool for disk encryption key management has been added. * The G13 tool for disk encryption key management has been added.
* Numerical values may now be used as an alternative to the
debug-level keywords.
Noteworthy changes in version 2.0.13 (2009-09-04) Noteworthy changes in version 2.0.13 (2009-09-04)

View File

@ -1,3 +1,8 @@
2009-12-03 Werner Koch <wk@g10code.com>
* gpg-agent.c (set_debug): Allow for numerical debug leveles. Print
active debug flags.
2009-12-02 Werner Koch <wk@g10code.com> 2009-12-02 Werner Koch <wk@g10code.com>
* trustlist.c (read_trustfiles): Store the pointer returned from * trustlist.c (read_trustfiles): Store the pointer returned from

View File

@ -361,19 +361,30 @@ my_strusage (int level)
static void static void
set_debug (void) set_debug (void)
{ {
int numok = (debug_level && digitp (debug_level));
int numlvl = numok? atoi (debug_level) : 0;
if (!debug_level) if (!debug_level)
; ;
else if (!strcmp (debug_level, "none")) else if (!strcmp (debug_level, "none") || (numok && numlvl < 1))
opt.debug = 0; opt.debug = 0;
else if (!strcmp (debug_level, "basic")) else if (!strcmp (debug_level, "basic") || (numok && numlvl <= 2))
opt.debug = DBG_ASSUAN_VALUE; opt.debug = DBG_ASSUAN_VALUE;
else if (!strcmp (debug_level, "advanced")) else if (!strcmp (debug_level, "advanced") || (numok && numlvl <= 5))
opt.debug = DBG_ASSUAN_VALUE|DBG_COMMAND_VALUE; opt.debug = DBG_ASSUAN_VALUE|DBG_COMMAND_VALUE;
else if (!strcmp (debug_level, "expert")) else if (!strcmp (debug_level, "expert") || (numok && numlvl <= 8))
opt.debug = (DBG_ASSUAN_VALUE|DBG_COMMAND_VALUE opt.debug = (DBG_ASSUAN_VALUE|DBG_COMMAND_VALUE
|DBG_CACHE_VALUE); |DBG_CACHE_VALUE);
else if (!strcmp (debug_level, "guru")) else if (!strcmp (debug_level, "guru") || numok)
opt.debug = ~0; {
opt.debug = ~0;
/* Unless the "guru" string has been used we don't want to allow
hashing debugging. The rationale is that people tend to
select the highest debug value and would then clutter their
disk with debug files which may reveal confidential data. */
if (numok)
opt.debug &= ~(DBG_HASHING_VALUE);
}
else else
{ {
log_error (_("invalid debug-level `%s' given\n"), debug_level); log_error (_("invalid debug-level `%s' given\n"), debug_level);
@ -391,6 +402,17 @@ set_debug (void)
if (opt.debug & DBG_CRYPTO_VALUE ) if (opt.debug & DBG_CRYPTO_VALUE )
gcry_control (GCRYCTL_SET_DEBUG_FLAGS, 1); gcry_control (GCRYCTL_SET_DEBUG_FLAGS, 1);
gcry_control (GCRYCTL_SET_VERBOSITY, (int)opt.verbose); gcry_control (GCRYCTL_SET_VERBOSITY, (int)opt.verbose);
if (opt.debug)
log_info ("enabled debug flags:%s%s%s%s%s%s%s%s\n",
(opt.debug & DBG_COMMAND_VALUE)? " command":"",
(opt.debug & DBG_MPI_VALUE )? " mpi":"",
(opt.debug & DBG_CRYPTO_VALUE )? " crypto":"",
(opt.debug & DBG_MEMORY_VALUE )? " memory":"",
(opt.debug & DBG_CACHE_VALUE )? " cache":"",
(opt.debug & DBG_MEMSTAT_VALUE)? " memstat":"",
(opt.debug & DBG_HASHING_VALUE)? " hashing":"",
(opt.debug & DBG_ASSUAN_VALUE )? " assuan":"");
} }

View File

@ -213,20 +213,26 @@ forth to @var{epoch} which is the number of seconds elapsed since the year
@item --debug-level @var{level} @item --debug-level @var{level}
@opindex debug-level @opindex debug-level
Select the debug level for investigating problems. @var{level} may be Select the debug level for investigating problems. @var{level} may be
one of: a numeric value or a keyword:
@table @code @table @code
@item none @item none
no debugging at all. No debugging at all. A value of less than 1 may be used instead of
@item basic the keyword.
some basic debug messages @item basic
@item advanced Some basic debug messages. A value between 1 and 2 may be used
more verbose debug messages instead of the keyword.
@item expert @item advanced
even more detailed messages More verbose debug messages. A value between 3 and 5 may be used
@item guru instead of the keyword.
all of the debug messages you can get @item expert
@end table Even more detailed messages. A value between 6 and 8 may be used
instead of the keyword.
@item guru
All of the debug messages you can get. A value greater than 8 may be
used instead of the keyword. The creation of hash tracing files is
only enabled if the keyword is used.
@end table
How these messages are mapped to the actual debugging flags is not How these messages are mapped to the actual debugging flags is not
specified and may change with newer releases of this program. They are specified and may change with newer releases of this program. They are

View File

@ -2146,6 +2146,34 @@ therefore enables a fast listing of the encryption keys.
@opindex interactive @opindex interactive
Prompt before overwriting any files. Prompt before overwriting any files.
@item --debug-level @var{level}
@opindex debug-level
Select the debug level for investigating problems. @var{level} may be
a numeric value or by a keyword:
@table @code
@item none
No debugging at all. A value of less than 1 may be used instead of
the keyword.
@item basic
Some basic debug messages. A value between 1 and 2 may be used
instead of the keyword.
@item advanced
More verbose debug messages. A value between 3 and 5 may be used
instead of the keyword.
@item expert
Even more detailed messages. A value between 6 and 8 may be used
instead of the keyword.
@item guru
All of the debug messages you can get. A value greater than 8 may be
used instead of the keyword. The creation of hash tracing files is
only enabled if the keyword is used.
@end table
How these messages are mapped to the actual debugging flags is not
specified and may change with newer releases of this program. They are
however carefully selected to best aid in debugging.
@item --debug @var{flags} @item --debug @var{flags}
@opindex debug @opindex debug
Set debugging flags. All flags are or-ed and @var{flags} may Set debugging flags. All flags are or-ed and @var{flags} may

View File

@ -617,19 +617,25 @@ is given as fingerprint or keygrip.
@item --debug-level @var{level} @item --debug-level @var{level}
@opindex debug-level @opindex debug-level
Select the debug level for investigating problems. @var{level} may be Select the debug level for investigating problems. @var{level} may be
one of: a numeric value or by a keyword:
@table @code @table @code
@item none @item none
no debugging at all. No debugging at all. A value of less than 1 may be used instead of
the keyword.
@item basic @item basic
some basic debug messages Some basic debug messages. A value between 1 and 2 may be used
instead of the keyword.
@item advanced @item advanced
more verbose debug messages More verbose debug messages. A value between 3 and 5 may be used
instead of the keyword.
@item expert @item expert
even more detailed messages Even more detailed messages. A value between 6 and 8 may be used
instead of the keyword.
@item guru @item guru
all of the debug messages you can get All of the debug messages you can get. A value greater than 8 may be
used instead of the keyword. The creation of hash tracing files is
only enabled if the keyword is used.
@end table @end table
How these messages are mapped to the actual debugging flags is not How these messages are mapped to the actual debugging flags is not

View File

@ -123,20 +123,26 @@ verbose commands to @command{gpgsm}, such as @samp{-vv}.
@item --debug-level @var{level} @item --debug-level @var{level}
@opindex debug-level @opindex debug-level
Select the debug level for investigating problems. @var{level} may be Select the debug level for investigating problems. @var{level} may be
one of: a numeric value or a keyword:
@table @code @table @code
@item none @item none
no debugging at all. No debugging at all. A value of less than 1 may be used instead of
the keyword.
@item basic @item basic
some basic debug messages Some basic debug messages. A value between 1 and 2 may be used
instead of the keyword.
@item advanced @item advanced
more verbose debug messages More verbose debug messages. A value between 3 and 5 may be used
instead of the keyword.
@item expert @item expert
even more detailed messages Even more detailed messages. A value between 6 and 8 may be used
instead of the keyword.
@item guru @item guru
all of the debug messages you can get All of the debug messages you can get. A value greater than 8 may be
used instead of the keyword. The creation of hash tracing files is
only enabled if the keyword is used.
@end table @end table
How these messages are mapped to the actual debugging flags is not How these messages are mapped to the actual debugging flags is not

View File

@ -1,3 +1,8 @@
2009-12-03 Werner Koch <wk@g10code.com>
* gpg.c (set_debug): Allow for numerical debug leveles. Print
active debug flags.
2009-11-27 Werner Koch <wk@g10code.com> 2009-11-27 Werner Koch <wk@g10code.com>
* keyedit.c (cmds, keyedit_menu): New command "checkbkupkey". * keyedit.c (cmds, keyedit_menu): New command "checkbkupkey".

View File

@ -976,19 +976,30 @@ set_opt_session_env (const char *name, const char *value)
static void static void
set_debug (const char *level) set_debug (const char *level)
{ {
int numok = (level && digitp (level));
int numlvl = numok? atoi (level) : 0;
if (!level) if (!level)
; ;
else if (!strcmp (level, "none")) else if (!strcmp (level, "none") || (numok && numlvl < 1))
opt.debug = 0; opt.debug = 0;
else if (!strcmp (level, "basic")) else if (!strcmp (level, "basic") || (numok && numlvl <= 2))
opt.debug = DBG_MEMSTAT_VALUE; opt.debug = DBG_MEMSTAT_VALUE;
else if (!strcmp (level, "advanced")) else if (!strcmp (level, "advanced") || (numok && numlvl <= 5))
opt.debug = DBG_MEMSTAT_VALUE|DBG_TRUST_VALUE|DBG_EXTPROG_VALUE; opt.debug = DBG_MEMSTAT_VALUE|DBG_TRUST_VALUE|DBG_EXTPROG_VALUE;
else if (!strcmp (level, "expert")) else if (!strcmp (level, "expert") || (numok && numlvl <= 8))
opt.debug = (DBG_MEMSTAT_VALUE|DBG_TRUST_VALUE|DBG_EXTPROG_VALUE opt.debug = (DBG_MEMSTAT_VALUE|DBG_TRUST_VALUE|DBG_EXTPROG_VALUE
|DBG_CACHE_VALUE|DBG_FILTER_VALUE|DBG_PACKET_VALUE); |DBG_CACHE_VALUE|DBG_FILTER_VALUE|DBG_PACKET_VALUE);
else if (!strcmp (level, "guru")) else if (!strcmp (level, "guru") || numok)
opt.debug = ~0; {
opt.debug = ~0;
/* Unless the "guru" string has been used we don't want to allow
hashing debugging. The rationale is that people tend to
select the highest debug value and would then clutter their
disk with debug files which may reveal confidential data. */
if (numok)
opt.debug &= ~(DBG_HASHING_VALUE);
}
else else
{ {
log_error (_("invalid debug-level `%s' given\n"), level); log_error (_("invalid debug-level `%s' given\n"), level);
@ -1006,6 +1017,22 @@ set_debug (const char *level)
if (opt.debug & DBG_IOBUF_VALUE ) if (opt.debug & DBG_IOBUF_VALUE )
iobuf_debug_mode = 1; iobuf_debug_mode = 1;
gcry_control (GCRYCTL_SET_VERBOSITY, (int)opt.verbose); gcry_control (GCRYCTL_SET_VERBOSITY, (int)opt.verbose);
if (opt.debug)
log_info ("enabled debug flags:%s%s%s%s%s%s%s%s%s%s%s%s%s\n",
(opt.debug & DBG_PACKET_VALUE )? " packet":"",
(opt.debug & DBG_MPI_VALUE )? " mpi":"",
(opt.debug & DBG_CIPHER_VALUE )? " cipher":"",
(opt.debug & DBG_FILTER_VALUE )? " filter":"",
(opt.debug & DBG_IOBUF_VALUE )? " iobuf":"",
(opt.debug & DBG_MEMORY_VALUE )? " memory":"",
(opt.debug & DBG_CACHE_VALUE )? " cache":"",
(opt.debug & DBG_MEMSTAT_VALUE)? " memstat":"",
(opt.debug & DBG_TRUST_VALUE )? " trust":"",
(opt.debug & DBG_HASHING_VALUE)? " hashing":"",
(opt.debug & DBG_EXTPROG_VALUE)? " extprog":"",
(opt.debug & DBG_CARD_IO_VALUE)? " cardio":"",
(opt.debug & DBG_ASSUAN_VALUE )? " assuan":"");
} }

View File

@ -258,18 +258,25 @@ wrong_args (const char *text)
static void static void
set_debug (void) set_debug (void)
{ {
int numok = (debug_level && digitp (debug_level));
int numlvl = numok? atoi (debug_level) : 0;
if (!debug_level) if (!debug_level)
; ;
else if (!strcmp (debug_level, "none")) else if (!strcmp (debug_level, "none") || (numok && numlvl < 1))
opt.debug = 0; opt.debug = 0;
else if (!strcmp (debug_level, "basic")) else if (!strcmp (debug_level, "basic") || (numok && numlvl <= 2))
opt.debug = DBG_ASSUAN_VALUE|DBG_MOUNT_VALUE; opt.debug = DBG_ASSUAN_VALUE|DBG_MOUNT_VALUE;
else if (!strcmp (debug_level, "advanced")) else if (!strcmp (debug_level, "advanced") || (numok && numlvl <= 5))
opt.debug = DBG_ASSUAN_VALUE|DBG_MOUNT_VALUE; opt.debug = DBG_ASSUAN_VALUE|DBG_MOUNT_VALUE;
else if (!strcmp (debug_level, "expert")) else if (!strcmp (debug_level, "expert") || (numok && numlvl <= 8))
opt.debug = (DBG_ASSUAN_VALUE|DBG_MOUNT_VALUE|DBG_CRYPTO_VALUE); opt.debug = (DBG_ASSUAN_VALUE|DBG_MOUNT_VALUE|DBG_CRYPTO_VALUE);
else if (!strcmp (debug_level, "guru")) else if (!strcmp (debug_level, "guru") || numok)
opt.debug = ~0; {
opt.debug = ~0;
/* if (numok) */
/* opt.debug &= ~(DBG_HASHING_VALUE); */
}
else else
{ {
log_error (_("invalid debug-level `%s' given\n"), debug_level); log_error (_("invalid debug-level `%s' given\n"), debug_level);
@ -286,6 +293,14 @@ set_debug (void)
if (opt.debug & DBG_CRYPTO_VALUE ) if (opt.debug & DBG_CRYPTO_VALUE )
gcry_control (GCRYCTL_SET_DEBUG_FLAGS, 1); gcry_control (GCRYCTL_SET_DEBUG_FLAGS, 1);
gcry_control (GCRYCTL_SET_VERBOSITY, (int)opt.verbose); gcry_control (GCRYCTL_SET_VERBOSITY, (int)opt.verbose);
if (opt.debug)
log_info ("enabled debug flags:%s%s%s%s%s\n",
(opt.debug & DBG_MOUNT_VALUE )? " mount":"",
(opt.debug & DBG_CRYPTO_VALUE )? " crypto":"",
(opt.debug & DBG_MEMORY_VALUE )? " memory":"",
(opt.debug & DBG_MEMSTAT_VALUE)? " memstat":"",
(opt.debug & DBG_ASSUAN_VALUE )? " assuan":"");
} }

View File

@ -1,3 +1,8 @@
2009-12-03 Werner Koch <wk@g10code.com>
* scdaemon.c (set_debug): Allow for numerical debug leveles. Print
active debug flags.
2009-11-25 Marcus Brinkmann <marcus@g10code.de> 2009-11-25 Marcus Brinkmann <marcus@g10code.de>
* command.c (scd_command_handler): Use assuan_fd_t and * command.c (scd_command_handler): Use assuan_fd_t and

View File

@ -289,19 +289,30 @@ tid_log_callback (void)
static void static void
set_debug (const char *level) set_debug (const char *level)
{ {
int numok = (level && digitp (level));
int numlvl = numok? atoi (level) : 0;
if (!level) if (!level)
; ;
else if (!strcmp (level, "none")) else if (!strcmp (level, "none") || (numok && numlvl < 1))
opt.debug = 0; opt.debug = 0;
else if (!strcmp (level, "basic")) else if (!strcmp (level, "basic") || (numok && numlvl <= 2))
opt.debug = DBG_ASSUAN_VALUE; opt.debug = DBG_ASSUAN_VALUE;
else if (!strcmp (level, "advanced")) else if (!strcmp (level, "advanced") || (numok && numlvl <= 5))
opt.debug = DBG_ASSUAN_VALUE|DBG_COMMAND_VALUE; opt.debug = DBG_ASSUAN_VALUE|DBG_COMMAND_VALUE;
else if (!strcmp (level, "expert")) else if (!strcmp (level, "expert") || (numok && numlvl <= 8))
opt.debug = (DBG_ASSUAN_VALUE|DBG_COMMAND_VALUE opt.debug = (DBG_ASSUAN_VALUE|DBG_COMMAND_VALUE
|DBG_CACHE_VALUE|DBG_CARD_IO_VALUE); |DBG_CACHE_VALUE|DBG_CARD_IO_VALUE);
else if (!strcmp (level, "guru")) else if (!strcmp (level, "guru") || numok)
opt.debug = ~0; {
opt.debug = ~0;
/* Unless the "guru" string has been used we don't want to allow
hashing debugging. The rationale is that people tend to
select the highest debug value and would then clutter their
disk with debug files which may reveal confidential data. */
if (numok)
opt.debug &= ~(DBG_HASHING_VALUE);
}
else else
{ {
log_error (_("invalid debug-level `%s' given\n"), level); log_error (_("invalid debug-level `%s' given\n"), level);
@ -319,6 +330,18 @@ set_debug (const char *level)
if (opt.debug & DBG_CRYPTO_VALUE ) if (opt.debug & DBG_CRYPTO_VALUE )
gcry_control (GCRYCTL_SET_DEBUG_FLAGS, 1); gcry_control (GCRYCTL_SET_DEBUG_FLAGS, 1);
gcry_control (GCRYCTL_SET_VERBOSITY, (int)opt.verbose); gcry_control (GCRYCTL_SET_VERBOSITY, (int)opt.verbose);
if (opt.debug)
log_info ("enabled debug flags:%s%s%s%s%s%s%s%s%s\n",
(opt.debug & DBG_COMMAND_VALUE)? " command":"",
(opt.debug & DBG_MPI_VALUE )? " mpi":"",
(opt.debug & DBG_CRYPTO_VALUE )? " crypto":"",
(opt.debug & DBG_MEMORY_VALUE )? " memory":"",
(opt.debug & DBG_CACHE_VALUE )? " cache":"",
(opt.debug & DBG_MEMSTAT_VALUE)? " memstat":"",
(opt.debug & DBG_HASHING_VALUE)? " hashing":"",
(opt.debug & DBG_ASSUAN_VALUE )? " assuan":"",
(opt.debug & DBG_CARD_IO_VALUE)? " cardio":"");
} }

View File

@ -1,3 +1,8 @@
2009-12-03 Werner Koch <wk@g10code.com>
* gpgsm.c (set_debug): Allow for numerical debug leveles. Print
active debug flags.
2009-12-02 Werner Koch <wk@g10code.com> 2009-12-02 Werner Koch <wk@g10code.com>
* verify.c (gpgsm_verify): Add audit info on hash algorithms. * verify.c (gpgsm_verify): Add audit info on hash algorithms.

View File

@ -648,23 +648,34 @@ set_opt_session_env (const char *name, const char *value)
static void static void
set_debug (void) set_debug (void)
{ {
int numok = (debug_level && digitp (debug_level));
int numlvl = numok? atoi (debug_level) : 0;
if (!debug_level) if (!debug_level)
; ;
else if (!strcmp (debug_level, "none")) else if (!strcmp (debug_level, "none") || (numok && numlvl < 1))
opt.debug = 0; opt.debug = 0;
else if (!strcmp (debug_level, "basic")) else if (!strcmp (debug_level, "basic") || (numok && numlvl <= 2))
opt.debug = DBG_ASSUAN_VALUE; opt.debug = DBG_ASSUAN_VALUE;
else if (!strcmp (debug_level, "advanced")) else if (!strcmp (debug_level, "advanced") || (numok && numlvl <= 5))
opt.debug = DBG_ASSUAN_VALUE|DBG_X509_VALUE; opt.debug = DBG_ASSUAN_VALUE|DBG_X509_VALUE;
else if (!strcmp (debug_level, "expert")) else if (!strcmp (debug_level, "expert") || (numok && numlvl <= 8))
opt.debug = (DBG_ASSUAN_VALUE|DBG_X509_VALUE opt.debug = (DBG_ASSUAN_VALUE|DBG_X509_VALUE
|DBG_CACHE_VALUE|DBG_CRYPTO_VALUE); |DBG_CACHE_VALUE|DBG_CRYPTO_VALUE);
else if (!strcmp (debug_level, "guru")) else if (!strcmp (debug_level, "guru") || numok)
opt.debug = ~0; {
opt.debug = ~0;
/* Unless the "guru" string has been used we don't want to allow
hashing debugging. The rationale is that people tend to
select the highest debug value and would then clutter their
disk with debug files which may reveal confidential data. */
if (numok)
opt.debug &= ~(DBG_HASHING_VALUE);
}
else else
{ {
log_error (_("invalid debug-level `%s' given\n"), debug_level); log_error (_("invalid debug-level `%s' given\n"), debug_level);
gpgsm_exit(2); gpgsm_exit (2);
} }
opt.debug |= debug_value; opt.debug |= debug_value;
@ -679,6 +690,17 @@ set_debug (void)
if (opt.debug & DBG_CRYPTO_VALUE ) if (opt.debug & DBG_CRYPTO_VALUE )
gcry_control (GCRYCTL_SET_DEBUG_FLAGS, 1); gcry_control (GCRYCTL_SET_DEBUG_FLAGS, 1);
gcry_control (GCRYCTL_SET_VERBOSITY, (int)opt.verbose); gcry_control (GCRYCTL_SET_VERBOSITY, (int)opt.verbose);
if (opt.debug)
log_info ("enabled debug flags:%s%s%s%s%s%s%s%s\n",
(opt.debug & DBG_X509_VALUE )? " x509":"",
(opt.debug & DBG_MPI_VALUE )? " mpi":"",
(opt.debug & DBG_CRYPTO_VALUE )? " crypto":"",
(opt.debug & DBG_MEMORY_VALUE )? " memory":"",
(opt.debug & DBG_CACHE_VALUE )? " cache":"",
(opt.debug & DBG_MEMSTAT_VALUE)? " memstat":"",
(opt.debug & DBG_HASHING_VALUE)? " hashing":"",
(opt.debug & DBG_ASSUAN_VALUE )? " assuan":"" );
} }