[git] GnuPG - branch, master, updated. gnupg-2.1.19-81-gc1e6302

by NIIBE Yutaka cvs at cvs.gnupg.org
Mon Mar 27 07:05:22 CEST 2017


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, master has been updated
       via  c1e6302b347caf852a056b9c721469ccb51f44da (commit)
       via  d58275703f035e8cfd58cd1c2d0d5ac7dc59e110 (commit)
      from  0848cfcce738150b53bfb65b78efc1e6dc9f3d26 (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 c1e6302b347caf852a056b9c721469ccb51f44da
Author: NIIBE Yutaka <gniibe at fsij.org>
Date:   Mon Mar 27 14:02:01 2017 +0900

    g10: Support specifying SERIALNO for --card-status.
    
    * g10/gpg.c (main): Allow an argument for --card-status.
    * g10/card-util.c (current_card_status): Rename from card_status.
    (card_status): New, which supports multiple cards.
    (get_one_name): Use current_card_status.
    
    Signed-off-by: NIIBE Yutaka <gniibe at fsij.org>

diff --git a/g10/card-util.c b/g10/card-util.c
index d643724..b88a9ed 100644
--- a/g10/card-util.c
+++ b/g10/card-util.c
@@ -361,8 +361,8 @@ fpr_is_ff (const char *fpr)
 
 
 /* Print all available information about the current card. */
-void
-card_status (estream_t fp, char *serialno, size_t serialnobuflen)
+static void
+current_card_status (estream_t fp, char *serialno, size_t serialnobuflen)
 {
   struct agent_card_info_s info;
   PKT_public_key *pk = xcalloc (1, sizeof *pk);
@@ -625,6 +625,70 @@ card_status (estream_t fp, char *serialno, size_t serialnobuflen)
 }
 
 
+/* Print all available information for specific card with SERIALNO.
+   Print all available information for current card when SERIALNO is NULL.
+   Or print llfor all cards when SERIALNO is "all".  */
+void
+card_status (estream_t fp, const char *serialno)
+{
+  int err;
+  strlist_t card_list, sl;
+  char *serialno0;
+  int all_cards = 0;
+
+  if (serialno == NULL)
+    {
+      current_card_status (fp, NULL, 0);
+      return;
+    }
+
+  if (!strcmp (serialno, "all"))
+    all_cards = 1;
+
+  err = agent_scd_serialno (&serialno0, NULL);
+  if (err)
+    {
+      if (gpg_err_code (err) != GPG_ERR_ENODEV && opt.verbose)
+        log_info (_("error getting serial number of card: %s\n"),
+                  gpg_strerror (err));
+      /* Nothing available.  */
+      return;
+    }
+
+  err = agent_scd_cardlist (&card_list);
+
+  for (sl = card_list; sl; sl = sl->next)
+    {
+      char *serialno1;
+
+      if (!all_cards && strcmp (serialno, sl->d))
+        continue;
+
+      err = agent_scd_serialno (&serialno1, sl->d);
+      if (err)
+        {
+          if (opt.verbose)
+            log_info (_("error getting serial number of card: %s\n"),
+                      gpg_strerror (err));
+          continue;
+        }
+
+      current_card_status (fp, NULL, 0);
+      xfree (serialno1);
+
+      if (!all_cards)
+        goto leave;
+    }
+
+  /* Select the original card again.  */
+  err = agent_scd_serialno (&serialno0, serialno0);
+
+ leave:
+  xfree (serialno0);
+  free_strlist (card_list);
+}
+
+
 static char *
 get_one_name (const char *prompt1, const char *prompt2)
 {
@@ -1919,16 +1983,16 @@ card_edit (ctrl_t ctrl, strlist_t commands)
       int cmd_admin_only;
 
       tty_printf("\n");
-      if (redisplay )
+      if (redisplay)
         {
           if (opt.with_colons)
             {
-              card_status (es_stdout, serialnobuf, DIM (serialnobuf));
+              current_card_status (es_stdout, serialnobuf, DIM (serialnobuf));
               fflush (stdout);
             }
           else
             {
-              card_status (NULL, serialnobuf, DIM (serialnobuf));
+              current_card_status (NULL, serialnobuf, DIM (serialnobuf));
               tty_printf("\n");
             }
           redisplay = 0;
diff --git a/g10/gpg.c b/g10/gpg.c
index b3d606b..507422c 100644
--- a/g10/gpg.c
+++ b/g10/gpg.c
@@ -4791,9 +4791,12 @@ main (int argc, char **argv)
 
 #ifdef ENABLE_CARD_SUPPORT
       case aCardStatus:
-        if (argc)
-            wrong_args ("--card-status");
-        card_status (es_stdout, NULL, 0);
+        if (argc == 0)
+          card_status (es_stdout, NULL);
+        else if (argc == 1)
+          card_status (es_stdout, *argv);
+        else
+            wrong_args ("--card-status [serialno]");
         break;
 
       case aCardEdit:
diff --git a/g10/main.h b/g10/main.h
index 32d323b..96e5562 100644
--- a/g10/main.h
+++ b/g10/main.h
@@ -485,7 +485,7 @@ gpg_error_t gpg_proxy_pinentry_notify (ctrl_t ctrl,
 #ifdef ENABLE_CARD_SUPPORT
 /*-- card-util.c --*/
 void change_pin (int no, int allow_admin);
-void card_status (estream_t fp, char *serialno, size_t serialnobuflen);
+void card_status (estream_t fp, const char *serialno);
 void card_edit (ctrl_t ctrl, strlist_t commands);
 gpg_error_t  card_generate_subkey (KBNODE pub_keyblock);
 int  card_store_subkey (KBNODE node, int use);

commit d58275703f035e8cfd58cd1c2d0d5ac7dc59e110
Author: NIIBE Yutaka <gniibe at fsij.org>
Date:   Mon Mar 27 13:56:02 2017 +0900

    scd: Change the order of applications when accessed.
    
    * scd/app.c (select_application): Move the app to top.
    
    Signed-off-by: NIIBE Yutaka <gniibe at fsij.org>

diff --git a/scd/app.c b/scd/app.c
index 472adc7..044bb1d 100644
--- a/scd/app.c
+++ b/scd/app.c
@@ -316,7 +316,7 @@ select_application (ctrl_t ctrl, const char *name, app_t *r_app,
                     size_t serialno_bin_len)
 {
   gpg_error_t err = 0;
-  app_t a;
+  app_t a, a_prev = NULL;
 
   *r_app = NULL;
 
@@ -375,6 +375,7 @@ select_application (ctrl_t ctrl, const char *name, app_t *r_app,
           && !memcmp (a->serialno, serialno_bin, a->serialnolen))
         break;
       unlock_app (a);
+      a_prev = a;
     }
 
   if (a)
@@ -384,7 +385,13 @@ select_application (ctrl_t ctrl, const char *name, app_t *r_app,
         {
           a->ref_count++;
           *r_app = a;
-        }
+          if (a_prev)
+            {
+              a_prev->next = a->next;
+              a->next = app_top;
+              app_top = a;
+            }
+      }
       unlock_app (a);
     }
   else

-----------------------------------------------------------------------

Summary of changes:
 g10/card-util.c | 74 +++++++++++++++++++++++++++++++++++++++++++++++++++++----
 g10/gpg.c       |  9 ++++---
 g10/main.h      |  2 +-
 scd/app.c       | 11 +++++++--
 4 files changed, 85 insertions(+), 11 deletions(-)


hooks/post-receive
-- 
The GNU Privacy Guard
http://git.gnupg.org




More information about the Gnupg-commits mailing list