* g10.c, options.h: New option --limit-card-insert-tries.
authorWerner Koch <wk@gnupg.org>
Tue, 19 Jul 2005 12:14:39 +0000 (12:14 +0000)
committerWerner Koch <wk@gnupg.org>
Tue, 19 Jul 2005 12:14:39 +0000 (12:14 +0000)
* cardglue.c (open_card): Use it.

g10/ChangeLog
g10/cardglue.c
g10/g10.c
g10/options.h

index 241a041..f227536 100644 (file)
@@ -1,5 +1,8 @@
 2005-07-19  Werner Koch  <wk@g10code.com>
 
 2005-07-19  Werner Koch  <wk@g10code.com>
 
+       * g10.c, options.h: New option --limit-card-insert-tries.
+       * cardglue.c (open_card): Use it.
+
        * export.c (parse_export_options): New option
        export-reset-subkey-passwd.
        (do_export_stream): Implement it.
        * export.c (parse_export_options): New option
        export-reset-subkey-passwd.
        (do_export_stream): Implement it.
index f9fba68..0e2da27 100644 (file)
@@ -385,6 +385,7 @@ open_card (void)
   int rc;
   app_t app;
   int did_shutdown = 0;
   int rc;
   app_t app;
   int did_shutdown = 0;
+  int retry_count = 0;
 
   /* First check whether we can contact a gpg-agent and divert all
      operation to it. This is required because gpg as well as the
 
   /* First check whether we can contact a gpg-agent and divert all
      operation to it. This is required because gpg as well as the
@@ -421,7 +422,10 @@ open_card (void)
   app = xcalloc (1, sizeof *app);
   app->slot = slot;
   rc = app_select_openpgp (app);
   app = xcalloc (1, sizeof *app);
   app->slot = slot;
   rc = app_select_openpgp (app);
-  if (rc && !opt.batch)
+  if (opt.limit_card_insert_tries 
+      && ++retry_count >= opt.limit_card_insert_tries)
+    ;
+  else if (rc && !opt.batch)
     {
       write_status_text (STATUS_CARDCTRL, "1");
       
     {
       write_status_text (STATUS_CARDCTRL, "1");
       
index 626ee87..a0e698c 100644 (file)
--- a/g10/g10.c
+++ b/g10/g10.c
@@ -347,6 +347,7 @@ enum cmd_and_opt_values
     oMultifile,
     oKeyidFormat,
     oNoInteractiveSelection,
     oMultifile,
     oKeyidFormat,
     oNoInteractiveSelection,
+    oLimitCardInsertTries,
 
     oReaderPort,
     octapiDriver,
 
     oReaderPort,
     octapiDriver,
@@ -677,6 +678,7 @@ static ARGPARSE_OPTS opts[] = {
     { oMultifile, "multifile", 0, "@" },
     { oKeyidFormat, "keyid-format", 2, "@" },
     { oNoInteractiveSelection, "no-interactive-selection", 0, "@" },
     { oMultifile, "multifile", 0, "@" },
     { oKeyidFormat, "keyid-format", 2, "@" },
     { oNoInteractiveSelection, "no-interactive-selection", 0, "@" },
+    { oLimitCardInsertTries, "limit-card-insert-tries", 1, "@"},
 
     { oReaderPort, "reader-port",    2, "@"},
     { octapiDriver, "ctapi-driver",  2, "@"},
 
     { oReaderPort, "reader-port",    2, "@"},
     { octapiDriver, "ctapi-driver",  2, "@"},
@@ -1583,7 +1585,7 @@ parse_trust_model(const char *model)
 }
 
 int
 }
 
 int
-mainint argc, char **argv )
+main (int argc, char **argv )
 {
     ARGPARSE_ARGS pargs;
     IOBUF a;
 {
     ARGPARSE_ARGS pargs;
     IOBUF a;
@@ -2546,6 +2548,11 @@ main( int argc, char **argv )
           case oNoInteractiveSelection:
             opt.no_interactive_selection = 1;
             break;
           case oNoInteractiveSelection:
             opt.no_interactive_selection = 1;
             break;
+
+         case oLimitCardInsertTries: 
+            opt.limit_card_insert_tries = pargs.r.ret_int; 
+            break;
+
   
          case oNoop: break;
 
   
          case oNoop: break;
 
index 05741a9..45744e5 100644 (file)
@@ -195,6 +195,8 @@ struct
   byte *show_subpackets;
   int rfc2440_text;
 
   byte *show_subpackets;
   int rfc2440_text;
 
+  int limit_card_insert_tries; /* If > 0, limit the number of card
+                                  insertion prompts to this value. */
 #ifdef ENABLE_CARD_SUPPORT
   const char *ctapi_driver; /* Library to access the ctAPI. */
   const char *pcsc_driver;  /* Library to access the PC/SC system. */
 #ifdef ENABLE_CARD_SUPPORT
   const char *ctapi_driver; /* Library to access the ctAPI. */
   const char *pcsc_driver;  /* Library to access the PC/SC system. */