[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