support numeric debug levels.
authorWerner Koch <wk@gnupg.org>
Thu, 3 Dec 2009 18:04:40 +0000 (18:04 +0000)
committerWerner Koch <wk@gnupg.org>
Thu, 3 Dec 2009 18:04:40 +0000 (18:04 +0000)
14 files changed:
NEWS
agent/ChangeLog
agent/gpg-agent.c
doc/gpg-agent.texi
doc/gpg.texi
doc/gpgsm.texi
doc/scdaemon.texi
g10/ChangeLog
g10/gpg.c
g13/g13.c
scd/ChangeLog
scd/scdaemon.c
sm/ChangeLog
sm/gpgsm.c

diff --git a/NEWS b/NEWS
index 8001381..070939b 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -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
    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.
 
+ * Numerical values may now be used as an alternative to the
+   debug-level keywords.
 
 
 Noteworthy changes in version 2.0.13 (2009-09-04)
index 139360d..1c1c6e8 100644 (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>
 
        * trustlist.c (read_trustfiles): Store the pointer returned from
index 07e6207..73f84ed 100644 (file)
@@ -361,19 +361,30 @@ my_strusage (int level)
 static void
 set_debug (void)
 {
+  int numok = (debug_level && digitp (debug_level));
+  int numlvl = numok? atoi (debug_level) : 0;
+
   if (!debug_level)
     ;
-  else if (!strcmp (debug_level, "none"))
+  else if (!strcmp (debug_level, "none") || (numok && numlvl < 1))
     opt.debug = 0;
-  else if (!strcmp (debug_level, "basic"))
+  else if (!strcmp (debug_level, "basic") || (numok && numlvl <= 2))
     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;
-  else if (!strcmp (debug_level, "expert"))
+  else if (!strcmp (debug_level, "expert") || (numok && numlvl <= 8))
     opt.debug = (DBG_ASSUAN_VALUE|DBG_COMMAND_VALUE
                  |DBG_CACHE_VALUE);
-  else if (!strcmp (debug_level, "guru"))
-    opt.debug = ~0;
+  else if (!strcmp (debug_level, "guru") || numok)
+    {
+      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
     {
       log_error (_("invalid debug-level `%s' given\n"), debug_level);
@@ -391,6 +402,17 @@ set_debug (void)
   if (opt.debug & DBG_CRYPTO_VALUE )
     gcry_control (GCRYCTL_SET_DEBUG_FLAGS, 1);
   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":"");
 }
  
 
index 74a3059..344f412 100644 (file)
@@ -213,20 +213,26 @@ forth to @var{epoch} which is the number of seconds elapsed since the year
 @item --debug-level @var{level}
 @opindex debug-level
 Select the debug level for investigating problems. @var{level} may be
-one of:
-
-   @table @code
-   @item none
-   no debugging at all.
-   @item basic  
-   some basic debug messages
-   @item advanced
-   more verbose debug messages
-   @item expert
-   even more detailed messages
-   @item guru
-   all of the debug messages you can get
-   @end table
+a numeric value or 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
index 8ec7556..b405e5b 100644 (file)
@@ -2146,6 +2146,34 @@ therefore enables a fast listing of the encryption keys.
 @opindex interactive
 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}
 @opindex debug
 Set debugging flags. All flags are or-ed and @var{flags} may
index 5835c72..ffa325a 100644 (file)
@@ -617,19 +617,25 @@ is given as fingerprint or keygrip.
 @item --debug-level @var{level}
 @opindex debug-level
 Select the debug level for investigating problems. @var{level} may be
-one of:
+a numeric value or by a keyword:
 
 @table @code
 @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  
-some basic debug messages
+Some basic debug messages.  A value between 1 and 2 may be used
+instead of the keyword.
 @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
-even more detailed messages
+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
+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
index 86ce9c0..3c84279 100644 (file)
@@ -123,20 +123,26 @@ verbose commands to @command{gpgsm}, such as @samp{-vv}.
 
 @item --debug-level @var{level}
 @opindex debug-level
-Select the debug level for investigating problems. @var{level} may be
-one of:
+Select the debug level for investigating problems.  @var{level} may be
+a numeric value or a keyword:
 
 @table @code
 @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  
-some basic debug messages
+Some basic debug messages.  A value between 1 and 2 may be used
+instead of the keyword.
 @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
-even more detailed messages
+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
+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
index 67a2eea..044369d 100644 (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>
 
        * keyedit.c (cmds, keyedit_menu): New command "checkbkupkey".
index 720c9f4..dc46016 100644 (file)
--- a/g10/gpg.c
+++ b/g10/gpg.c
@@ -976,19 +976,30 @@ set_opt_session_env (const char *name, const char *value)
 static void
 set_debug (const char *level)
 {
+  int numok = (level && digitp (level));
+  int numlvl = numok? atoi (level) : 0;
+
   if (!level)
     ;
-  else if (!strcmp (level, "none"))
+  else if (!strcmp (level, "none") || (numok && numlvl < 1))
     opt.debug = 0;
-  else if (!strcmp (level, "basic"))
+  else if (!strcmp (level, "basic") || (numok && numlvl <= 2))
     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;
-  else if (!strcmp (level, "expert"))
+  else if (!strcmp (level, "expert")  || (numok && numlvl <= 8))
     opt.debug = (DBG_MEMSTAT_VALUE|DBG_TRUST_VALUE|DBG_EXTPROG_VALUE
                  |DBG_CACHE_VALUE|DBG_FILTER_VALUE|DBG_PACKET_VALUE);
-  else if (!strcmp (level, "guru"))
-    opt.debug = ~0;
+  else if (!strcmp (level, "guru") || numok)
+    {
+      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
     {
       log_error (_("invalid debug-level `%s' given\n"), level);
@@ -1006,6 +1017,22 @@ set_debug (const char *level)
   if (opt.debug & DBG_IOBUF_VALUE )
     iobuf_debug_mode = 1;
   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":"");
 }
 
 
index 8444b19..5058d2c 100644 (file)
--- a/g13/g13.c
+++ b/g13/g13.c
@@ -258,18 +258,25 @@ wrong_args (const char *text)
 static void
 set_debug (void)
 {
+  int numok = (debug_level && digitp (debug_level));
+  int numlvl = numok? atoi (debug_level) : 0;
+
   if (!debug_level)
     ;
-  else if (!strcmp (debug_level, "none"))
+  else if (!strcmp (debug_level, "none") || (numok && numlvl < 1))
     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;
-  else if (!strcmp (debug_level, "advanced"))
+  else if (!strcmp (debug_level, "advanced") || (numok && numlvl <= 5))
     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);
-  else if (!strcmp (debug_level, "guru"))
-    opt.debug = ~0;
+  else if (!strcmp (debug_level, "guru") || numok)
+    {
+      opt.debug = ~0;
+      /* if (numok) */
+      /*   opt.debug &= ~(DBG_HASHING_VALUE); */
+    }
   else
     {
       log_error (_("invalid debug-level `%s' given\n"), debug_level);
@@ -286,6 +293,14 @@ set_debug (void)
   if (opt.debug & DBG_CRYPTO_VALUE )
     gcry_control (GCRYCTL_SET_DEBUG_FLAGS, 1);
   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":"");
 }
  
 
index 965e07b..fed5e0e 100644 (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>
 
        * command.c (scd_command_handler): Use assuan_fd_t and
index 5823c99..fd7d6a2 100644 (file)
@@ -289,19 +289,30 @@ tid_log_callback (void)
 static void
 set_debug (const char *level)
 {
+  int numok = (level && digitp (level));
+  int numlvl = numok? atoi (level) : 0;
+
   if (!level)
     ;
-  else if (!strcmp (level, "none"))
+  else if (!strcmp (level, "none") || (numok && numlvl < 1))
     opt.debug = 0;
-  else if (!strcmp (level, "basic"))
+  else if (!strcmp (level, "basic") || (numok && numlvl <= 2))
     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;
-  else if (!strcmp (level, "expert"))
+  else if (!strcmp (level, "expert") || (numok && numlvl <= 8))
     opt.debug = (DBG_ASSUAN_VALUE|DBG_COMMAND_VALUE
                  |DBG_CACHE_VALUE|DBG_CARD_IO_VALUE);
-  else if (!strcmp (level, "guru"))
-    opt.debug = ~0;
+  else if (!strcmp (level, "guru") || numok)
+    {
+      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
     {
       log_error (_("invalid debug-level `%s' given\n"), level);
@@ -319,6 +330,18 @@ set_debug (const char *level)
   if (opt.debug & DBG_CRYPTO_VALUE )
     gcry_control (GCRYCTL_SET_DEBUG_FLAGS, 1);
   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":"");
 }
  
 
index 1673163..39ae4df 100644 (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>
 
        * verify.c (gpgsm_verify): Add audit info on hash algorithms.
index 6e7cd84..834bcce 100644 (file)
@@ -648,23 +648,34 @@ set_opt_session_env (const char *name, const char *value)
 static void
 set_debug (void)
 {
+  int numok = (debug_level && digitp (debug_level));
+  int numlvl = numok? atoi (debug_level) : 0;
+
   if (!debug_level)
     ;
-  else if (!strcmp (debug_level, "none"))
+  else if (!strcmp (debug_level, "none") || (numok && numlvl < 1))
     opt.debug = 0;
-  else if (!strcmp (debug_level, "basic"))
+  else if (!strcmp (debug_level, "basic") || (numok && numlvl <= 2))
     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;
-  else if (!strcmp (debug_level, "expert"))
+  else if (!strcmp (debug_level, "expert")  || (numok && numlvl <= 8))
     opt.debug = (DBG_ASSUAN_VALUE|DBG_X509_VALUE
                  |DBG_CACHE_VALUE|DBG_CRYPTO_VALUE);
-  else if (!strcmp (debug_level, "guru"))
-    opt.debug = ~0;
+  else if (!strcmp (debug_level, "guru") || numok)
+    {
+      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
     {
       log_error (_("invalid debug-level `%s' given\n"), debug_level);
-      gpgsm_exit(2);
+      gpgsm_exit (2);
     }
 
   opt.debug |= debug_value;
@@ -679,6 +690,17 @@ set_debug (void)
   if (opt.debug & DBG_CRYPTO_VALUE )
     gcry_control (GCRYCTL_SET_DEBUG_FLAGS, 1);
   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":"" );
 }