Fixed problem with unplugging card readers.
authorWerner Koch <wk@gnupg.org>
Tue, 25 Jan 2011 21:03:16 +0000 (22:03 +0100)
committerWerner Koch <wk@gnupg.org>
Tue, 25 Jan 2011 21:03:16 +0000 (22:03 +0100)
From Grant Olsons's mail to gnupg-devel@:

  This is three-quarters NIIBE and one-quarter me, but I though it would
  be easier to have a single complete patch that applies to
  STABLE-BRANCH-2-0 than two patches floating around.

  This is basically NIIBE Yatuka's patch here:

  http://lists.gnupg.org/pipermail/gnupg-devel/2010-November/025828.html

  Plus another check that closes down the reader explicitly if we get a
  SW_HOST_NO_READER error, so that an unplugged reader doesn't hold onto
  the first slot, preventing us from getting to the active plugged reader.

THANKS
scd/ChangeLog
scd/command.c

diff --git a/THANKS b/THANKS
index c86fda3..b6dfc40 100644 (file)
--- a/THANKS
+++ b/THANKS
@@ -92,6 +92,7 @@ Geoff Keating            geoffk at ozemail.com.au
 Georg Schwarz              georg.schwarz at iname.com
 Giampaolo Tomassoni        g.tomassoni at libero.it
 Gilbert Fernandes          gilbert_fernandes at hotmail.com
 Georg Schwarz              georg.schwarz at iname.com
 Giampaolo Tomassoni        g.tomassoni at libero.it
 Gilbert Fernandes          gilbert_fernandes at hotmail.com
+Grant Olson                kgo at grant-olson net
 Greg Louis                glouis at dynamicro.on.ca
 Greg Troxel               gdt at ir.bbn.com
 Gregory Steuck            steuck at iname.com
 Greg Louis                glouis at dynamicro.on.ca
 Greg Troxel               gdt at ir.bbn.com
 Gregory Steuck            steuck at iname.com
index d1e942a..c9f92b4 100644 (file)
@@ -1,3 +1,10 @@
+2011-01-25  NIIBE Yutaka <gniibe@fsij.org>,
+           Grant Olson <kgo@grant-olson.net>  (wk)
+
+       * command.c (do_reset, get_reader_slot)
+       (update_reader_status_file): Fix handling of the VALID flag for
+       unplugged readers.
+
 2011-01-25  Werner Koch  <wk@g10code.com>
 
        From 2.0 branch, 2010-03-17:
 2011-01-25  Werner Koch  <wk@g10code.com>
 
        From 2.0 branch, 2010-03-17:
index 36aff97..a44378d 100644 (file)
@@ -309,7 +309,7 @@ do_reset (ctrl_t ctrl, int send_reset)
     {
       if (apdu_reset (slot)) 
         {
     {
       if (apdu_reset (slot)) 
         {
-          slot_table[slot].reset_failed = 1;
+          slot_table[slot].valid = 0;
         }
       application_notify_card_reset (slot);
     }
         }
       application_notify_card_reset (slot);
     }
@@ -401,6 +401,14 @@ get_reader_slot (void)
     {
       int no_service_flag;
       ss->slot = apdu_open_reader (opt.reader_port, &no_service_flag);
     {
       int no_service_flag;
       ss->slot = apdu_open_reader (opt.reader_port, &no_service_flag);
+
+      /* If we still don't have a slot, we have no readers.
+        Invalidate for now until a reader is attached. */
+      if(ss->slot == -1)
+       {
+         ss->valid = 0;
+       }
+
       if (no_service_flag)
         {
           log_info ("no card services - disabling scdaemon\n");
       if (no_service_flag)
         {
           log_info ("no card services - disabling scdaemon\n");
@@ -2190,6 +2198,8 @@ update_reader_status_file (int set_card_removed_flag)
       if (sw_apdu == SW_HOST_NO_READER)
         {
           /* Most likely the _reader_ has been unplugged.  */
       if (sw_apdu == SW_HOST_NO_READER)
         {
           /* Most likely the _reader_ has been unplugged.  */
+         apdu_close_reader(ss->slot);
+         ss->valid = 0;
           status = 0;
           changed = ss->changed;
         }
           status = 0;
           changed = ss->changed;
         }