scd: call update_card_removed only when detecting removal.
authorNIIBE Yutaka <gniibe@fsij.org>
Mon, 25 Mar 2013 23:43:15 +0000 (08:43 +0900)
committerNIIBE Yutaka <gniibe@fsij.org>
Mon, 25 Mar 2013 23:43:15 +0000 (08:43 +0900)
* scd/command.c (update_reader_status_file): Add condition
ss->status == 0.

--

To reproduce the bug: (1) insert card,
  (2) run "gpg2 --card-status",
  (3) remove card, (4) invoke "gpg2 --card-edit",
  (5) invoke some command like "verify"
The last step fails (but with no error message to user).

scd/command.c

index e45153f..fc1f5a2 100644 (file)
@@ -2310,10 +2310,8 @@ update_reader_status_file (int set_card_removed_flag)
             xfree (homestr);
           }
 
-          /* Set the card removed flag for all current sessions.  We
-             will set this on any card change because a reset or
-             SERIALNO request must be done in any case.  */
-          if (ss->any && set_card_removed_flag)
+          /* Set the card removed flag for all current sessions.  */
+          if (ss->any && ss->status == 0 && set_card_removed_flag)
             update_card_removed (idx, 1);
 
           ss->any = 1;