[git] GnuPG - branch, STABLE-BRANCH-2-0, updated. gnupg-2.0.19-44-g0d7cf7b
by NIIBE Yutaka
cvs at cvs.gnupg.org
Fri Dec 7 03:26:28 CET 2012
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "The GNU Privacy Guard".
The branch, STABLE-BRANCH-2-0 has been updated
via 0d7cf7bb0669ca280e6259a9c34612a8ff56acda (commit)
via 9afd2bb7fb9067eb8c753a5e5f672a36e93b2474 (commit)
from 2ee9fe4bc25df7966df759895b996206d3cf7a02 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 0d7cf7bb0669ca280e6259a9c34612a8ff56acda
Author: NIIBE Yutaka <gniibe at fsij.org>
Date: Fri Dec 7 10:31:37 2012 +0900
Revert SCD changes of 2010-05-03 (scd/ChangeLog 2010-03-17).
* scd/apdu.c (pcsc_no_service): Remove.
(open_pcsc_reader_direct, open_pcsc_reader_wrapped): Remove
pcsc_no_service support.
(apdu_open_reader): Remove R_NO_SERVICE.
* scd/apdu.h (apdu_open_reader): Remove R_NO_SERVICE.
* scd/command.c (reader_disabled): Remove.
(get_reader_slot): Follow the change of R_NO_SERVICE.
(open_card, cmd_serialno, scd_command_handler): Remove reader_disabled
support.
* scd/sc-copykeys.c (main): Follow the change of R_NO_SERVICE.
--
Daemon should handle all possible cases. Even if such a difficult
case like reader_disabled, it should not exit.
diff --git a/scd/apdu.c b/scd/apdu.c
index b369a26..962eb71 100644
--- a/scd/apdu.c
+++ b/scd/apdu.c
@@ -305,9 +305,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);
@@ -1712,11 +1709,8 @@ open_pcsc_reader_direct (const char *portstr)
pcsc_error_string (err), err);
reader_table[slot].used = 0;
unlock_slot (slot);
- 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);
@@ -1820,7 +1814,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;
}
@@ -1920,8 +1913,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;
@@ -1954,15 +1945,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 (0x%08x)\n",
@@ -2803,18 +2790,14 @@ open_rapdu_reader (int portno,
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;
-
- if (r_no_service)
- *r_no_service = 0;
#ifdef HAVE_LIBUSB
if (!opt.disable_ccid)
{
- int i;
+ int slot, i;
const char *s;
slot = open_ccid_reader (portstr);
@@ -2947,11 +2930,7 @@ apdu_open_reader (const char *portstr, int *r_no_service)
pcsc_api_loaded = 1;
}
- slot = open_pcsc_reader (portstr);
- if (slot == -1 && r_no_service && pcsc_no_service)
- *r_no_service = 1;
-
- return slot;
+ return open_pcsc_reader (portstr);
}
diff --git a/scd/apdu.h b/scd/apdu.h
index 94d7449..61501c4 100644
--- a/scd/apdu.h
+++ b/scd/apdu.h
@@ -81,7 +81,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 da11e88..2123b9d 100644
--- a/scd/command.c
+++ b/scd/command.c
@@ -74,10 +74,6 @@
&& (c)->reader_slot == locked_session->ctrl_backlink->reader_slot)
-/* Flag indicating that the reader has been disabled. */
-static int reader_disabled;
-
-
/* This structure is used to keep track of open readers (slots). */
struct slot_status_s
{
@@ -414,14 +410,7 @@ get_reader_slot (void)
/* Try to open the reader. */
if (ss->slot == -1)
{
- int no_service_flag;
- ss->slot = apdu_open_reader (opt.reader_port, &no_service_flag);
-
- if (no_service_flag)
- {
- log_info ("no card services - disabling scdaemon\n");
- reader_disabled = 1;
- }
+ ss->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. */
@@ -444,9 +433,6 @@ open_card (ctrl_t ctrl, const char *apptype)
gpg_error_t err;
int slot;
- 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. */
@@ -479,7 +465,7 @@ open_card (ctrl_t ctrl, const char *apptype)
slot = get_reader_slot ();
ctrl->reader_slot = slot;
if (slot == -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
@@ -537,7 +523,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);
@@ -2066,7 +2052,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 b863b01..615e4b2 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))
commit 9afd2bb7fb9067eb8c753a5e5f672a36e93b2474
Author: NIIBE Yutaka <gniibe at fsij.org>
Date: Thu Nov 22 16:04:51 2012 +0900
Don't keep opening unavailable card reader.
* scd/command.c (update_reader_status_file): Don't call
get_reader_slot.
--
This fix has a impact that the insertion of a card reader will not be
detected upon the insertion, but will be deferred until user tries to
access his card.
diff --git a/scd/command.c b/scd/command.c
index 3ce4a57..da11e88 100644
--- a/scd/command.c
+++ b/scd/command.c
@@ -2226,11 +2226,6 @@ update_reader_status_file (int set_card_removed_flag)
int idx;
unsigned int status, changed;
- /* Make sure that the reader has been opened. Like get_reader_slot,
- this part of the code assumes that there is only one reader. */
- if (!slot_table[0].valid)
- (void)get_reader_slot ();
-
/* Note, that we only try to get the status, because it does not
make sense to wait here for a operation to complete. If we are
busy working with a card, delays in the status file update should
-----------------------------------------------------------------------
Summary of changes:
scd/apdu.c | 27 +++------------------------
scd/apdu.h | 2 +-
scd/command.c | 27 ++++-----------------------
scd/sc-copykeys.c | 2 +-
4 files changed, 9 insertions(+), 49 deletions(-)
hooks/post-receive
--
The GNU Privacy Guard
http://git.gnupg.org
More information about the Gnupg-commits
mailing list