1
0
mirror of git://git.gnupg.org/gnupg.git synced 2024-11-12 21:58:50 +01:00

Fix problem with unplugged card readers.

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.
This commit is contained in:
Werner Koch 2011-01-25 21:08:36 +01:00
parent abceb05d54
commit cb2f55e9ed
3 changed files with 19 additions and 1 deletions

1
THANKS
View File

@ -92,6 +92,7 @@ Geoff Keating geoffk at ozemail.com.au
Georg Schwarz georg.schwarz at iname.com Georg Schwarz georg.schwarz at iname.com
Giampaolo Tomassoni g.tomassoni at libero.it Giampaolo Tomassoni g.tomassoni at libero.it
Gilbert Fernandes gilbert_fernandes at hotmail.com Gilbert Fernandes gilbert_fernandes at hotmail.com
Grant Olson kgo at grant-olson net
Greg Louis glouis at dynamicro.on.ca Greg Louis glouis at dynamicro.on.ca
Greg Troxel gdt at ir.bbn.com Greg Troxel gdt at ir.bbn.com
Gregory Steuck steuck at iname.com Gregory Steuck steuck at iname.com

View 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.
2010-03-17 Werner Koch <wk@g10code.com> 2010-03-17 Werner Koch <wk@g10code.com>
* command.c (open_card): Return GPG_ERR_NOT_OPERATIONAL if no * command.c (open_card): Return GPG_ERR_NOT_OPERATIONAL if no

View 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; int no_service_flag;
ss->slot = apdu_open_reader (opt.reader_port, &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) if (no_service_flag)
{ {
log_info ("no card services - disabling scdaemon\n"); log_info ("no card services - disabling scdaemon\n");
@ -2192,6 +2200,8 @@ update_reader_status_file (int set_card_removed_flag)
if (sw_apdu == SW_HOST_NO_READER) if (sw_apdu == SW_HOST_NO_READER)
{ {
/* Most likely the _reader_ has been unplugged. */ /* Most likely the _reader_ has been unplugged. */
apdu_close_reader (ss->slot);
ss->valid = 0;
status = 0; status = 0;
changed = ss->changed; changed = ss->changed;
} }