diff --git a/scd/apdu.c b/scd/apdu.c index 43c807efe..68d4e9970 100644 --- a/scd/apdu.c +++ b/scd/apdu.c @@ -323,9 +323,6 @@ long (* DLSTDCALL pcsc_control) (unsigned long card, unsigned long recv_len, unsigned long *bytes_returned); -/* Flag set if PC/SC returned the no-service error. */ -static int pcsc_no_service; - /* Prototypes. */ static int pcsc_get_status (int slot, unsigned int *status); @@ -1693,11 +1690,8 @@ open_pcsc_reader_direct (const char *portstr) log_error ("pcsc_establish_context failed: %s (0x%lx)\n", pcsc_error_string (err), err); reader_table[slot].used = 0; - if (err == PCSC_E_NO_SERVICE) - pcsc_no_service = 1; return -1; } - pcsc_no_service = 0; err = pcsc_list_readers (reader_table[slot].pcsc.context, NULL, NULL, &nreader); @@ -1796,7 +1790,6 @@ open_pcsc_reader_wrapped (const char *portstr) { log_error ("can't run PC/SC access module '%s': %s\n", wrapperpgm, strerror (errno)); - pcsc_no_service = 1; return -1; } @@ -1893,8 +1886,6 @@ open_pcsc_reader_wrapped (const char *portstr) ; #undef WAIT - pcsc_no_service = 1; - /* Now send the open request. */ msgbuf[0] = 0x01; /* OPEN command. */ len = portstr? strlen (portstr):0; @@ -1927,15 +1918,11 @@ open_pcsc_reader_wrapped (const char *portstr) { log_error ("PC/SC returned a too large ATR (len=%lx)\n", (unsigned long)len); - pcsc_no_service = 0; goto command_failed; } err = PCSC_ERR_MASK ((msgbuf[5] << 24) | (msgbuf[6] << 16) | (msgbuf[7] << 8 ) | msgbuf[8]); - if (err != PCSC_E_NO_SERVICE) - pcsc_no_service = 0; - if (err) { log_error ("PC/SC OPEN failed: %s\n", pcsc_error_string (err)); @@ -2817,7 +2804,7 @@ unlock_slot (int slot) error. If PORTSTR is NULL we default to a suitable port (for ctAPI: the first USB reader. For PC/SC the first listed reader). */ int -apdu_open_reader (const char *portstr, int *r_no_service) +apdu_open_reader (const char *portstr) { static int pcsc_api_loaded, ct_api_loaded; int slot; @@ -2825,9 +2812,6 @@ apdu_open_reader (const char *portstr, int *r_no_service) if (DBG_READER) log_debug ("enter: apdu_open_reader: portstr=%s\n", portstr); - if (r_no_service) - *r_no_service = 0; - #ifdef HAVE_LIBUSB if (!opt.disable_ccid) { @@ -2988,8 +2972,6 @@ apdu_open_reader (const char *portstr, int *r_no_service) } slot = open_pcsc_reader (portstr); - if (slot == -1 && r_no_service && pcsc_no_service) - *r_no_service = 1; if (DBG_READER) log_debug ("leave: apdu_open_reader => slot=%d [pc/sc]\n", slot); diff --git a/scd/apdu.h b/scd/apdu.h index 75025469e..bf5534634 100644 --- a/scd/apdu.h +++ b/scd/apdu.h @@ -84,7 +84,7 @@ enum { /* Note, that apdu_open_reader returns no status word but -1 on error. */ -int apdu_open_reader (const char *portstr, int *r_no_service); +int apdu_open_reader (const char *portstr); int apdu_open_remote_reader (const char *portstr, const unsigned char *cookie, size_t length, int (*readfnc) (void *opaque, diff --git a/scd/command.c b/scd/command.c index 932db6ca1..40e61a48b 100644 --- a/scd/command.c +++ b/scd/command.c @@ -79,10 +79,6 @@ == locked_session->ctrl_backlink->server_local->vreader_idx)) -/* Flag indicating that the reader has been disabled. */ -static int reader_disabled; - - /* This structure is used to keep track of user readers. To eventually accommodate this structure for RFID cards, where more than one card is used per reader, we name it virtual reader. */ @@ -444,9 +440,7 @@ get_current_reader (void) /* Try to open the reader. */ if (vr->slot == -1) { - int no_service_flag; - - vr->slot = apdu_open_reader (opt.reader_port, &no_service_flag); + vr->slot = apdu_open_reader (opt.reader_port); /* If we still don't have a slot, we have no readers. Invalidate for now until a reader is attached. */ @@ -454,12 +448,6 @@ get_current_reader (void) { vr->valid = 0; } - - if (no_service_flag) - { - log_info ("no card services - disabling scdaemon\n"); - reader_disabled = 1; - } } /* Return the vreader index or -1. */ @@ -474,9 +462,6 @@ open_card (ctrl_t ctrl, const char *apptype) gpg_error_t err; int vrdr; - if (reader_disabled) - return gpg_error (GPG_ERR_NOT_OPERATIONAL); - /* If we ever got a card not present error code, return that. Only the SERIALNO command and a reset are able to clear from that state. */ @@ -512,7 +497,7 @@ open_card (ctrl_t ctrl, const char *apptype) vrdr = get_current_reader (); ctrl->server_local->vreader_idx = vrdr; if (vrdr == -1) - err = gpg_error (reader_disabled? GPG_ERR_NOT_OPERATIONAL: GPG_ERR_CARD); + err = gpg_error (GPG_ERR_CARD); else { /* Fixme: We should move the apdu_connect call to @@ -570,7 +555,7 @@ cmd_serialno (assuan_context_t ctx, char *line) /* Clear the remove flag so that the open_card is able to reread it. */ retry: - if (!reader_disabled && ctrl->server_local->card_removed) + if (ctrl->server_local->card_removed) { if ( IS_LOCKED (ctrl) ) return gpg_error (GPG_ERR_LOCKED); @@ -2122,7 +2107,7 @@ scd_command_handler (ctrl_t ctrl, int fd) BUG (); sl->next_session = ctrl->server_local->next_session; } - stopme = ctrl->server_local->stopme || reader_disabled; + stopme = ctrl->server_local->stopme; xfree (ctrl->server_local); ctrl->server_local = NULL; diff --git a/scd/sc-copykeys.c b/scd/sc-copykeys.c index 0056dd79a..3f34d6983 100644 --- a/scd/sc-copykeys.c +++ b/scd/sc-copykeys.c @@ -139,7 +139,7 @@ main (int argc, char **argv ) if (argc != 1) usage (1); - slot = apdu_open_reader (reader_port, NULL); + slot = apdu_open_reader (reader_port); if (slot == -1) exit (1); if (apdu_connect (slot))