[git] GnuPG - branch, master, updated. gnupg-2.1.15-318-gc1ea0b5

by Werner Koch cvs at cvs.gnupg.org
Thu Nov 3 20:14:36 CET 2016


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  c1ea0b577a468030d2b006317ba27fc1746c4b14 (commit)
      from  ab89164be02012f1bf159c971853b8610e966301 (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 c1ea0b577a468030d2b006317ba27fc1746c4b14
Author: Werner Koch <wk at gnupg.org>
Date:   Thu Nov 3 20:07:56 2016 +0100

    agent: Extend the PINENTRY_LAUNCHED inquiry and status.
    
    * agent/call-pinentry.c (start_pinentry): Get flavor and version and
    pass it to agent_inq_pinentry_launched.
    * agent/command.c (agent_inq_pinentry_launched): Add arg EXTRA.
    * g10/server.c (gpg_proxy_pinentry_notify): Print a new diagnostic.
    
    Signed-off-by: Werner Koch <wk at gnupg.org>

diff --git a/agent/agent.h b/agent/agent.h
index 1d40386..2775c84 100644
--- a/agent/agent.h
+++ b/agent/agent.h
@@ -349,7 +349,8 @@ void agent_sighup_action (void);
 int map_pk_openpgp_to_gcry (int openpgp_algo);
 
 /*-- command.c --*/
-gpg_error_t agent_inq_pinentry_launched (ctrl_t ctrl, unsigned long pid);
+gpg_error_t agent_inq_pinentry_launched (ctrl_t ctrl, unsigned long pid,
+                                         const char *extra);
 gpg_error_t agent_write_status (ctrl_t ctrl, const char *keyword, ...)
      GPGRT_ATTR_SENTINEL(0);
 gpg_error_t agent_print_status (ctrl_t ctrl, const char *keyword,
diff --git a/agent/call-pinentry.c b/agent/call-pinentry.c
index 813df9a..f83778e 100644
--- a/agent/call-pinentry.c
+++ b/agent/call-pinentry.c
@@ -225,6 +225,7 @@ getinfo_pid_cb (void *opaque, const void *buffer, size_t length)
   return 0;
 }
 
+
 /* Fork off the pin entry if this has not already been done.  Note,
    that this function must always be used to acquire the lock for the
    pinentry - we will serialize _all_ pinentry calls.
@@ -243,6 +244,7 @@ start_pinentry (ctrl_t ctrl)
   unsigned long pinentry_pid;
   const char *value;
   struct timespec abstime;
+  char *flavor_version;
   int err;
 
   npth_clock_gettime (&abstime);
@@ -539,6 +541,25 @@ start_pinentry (ctrl_t ctrl)
     }
 
 
+  /* Ask the pinentry for its version and flavor and streo that as a
+   * string in MB.  This information is useful for helping users to
+   * figure out Pinentry problems.  */
+  {
+    membuf_t mb;
+
+    init_membuf (&mb, 256);
+    if (assuan_transact (entry_ctx, "GETINFO flavor",
+                         put_membuf_cb, &mb, NULL, NULL, NULL, NULL))
+      put_membuf_str (&mb, "unknown");
+    put_membuf_str (&mb, " ");
+    if (assuan_transact (entry_ctx, "GETINFO version",
+                         put_membuf_cb, &mb, NULL, NULL, NULL, NULL))
+      put_membuf_str (&mb, "unknown");
+    put_membuf (&mb, "", 1);
+    flavor_version = get_membuf (&mb, NULL);
+  }
+
+
   /* Now ask the Pinentry for its PID.  If the Pinentry is new enough
      it will send the pid back and we will use an inquire to notify
      our client.  The client may answer the inquiry either with END or
@@ -555,7 +576,7 @@ start_pinentry (ctrl_t ctrl)
     log_error ("pinentry did not return a PID\n");
   else
     {
-      rc = agent_inq_pinentry_launched (ctrl, pinentry_pid);
+      rc = agent_inq_pinentry_launched (ctrl, pinentry_pid, flavor_version);
       if (gpg_err_code (rc) == GPG_ERR_CANCELED
           || gpg_err_code (rc) == GPG_ERR_FULLY_CANCELED)
         return unlock_pinentry (gpg_err_make (GPG_ERR_SOURCE_DEFAULT,
@@ -563,6 +584,8 @@ start_pinentry (ctrl_t ctrl)
       rc = 0;
     }
 
+  xfree (flavor_version);
+
   return 0;
 }
 
diff --git a/agent/command.c b/agent/command.c
index 999f608..4db2834 100644
--- a/agent/command.c
+++ b/agent/command.c
@@ -362,14 +362,15 @@ agent_print_status (ctrl_t ctrl, const char *keyword, const char *format, ...)
    that might disturb some older clients, this is only done if enabled
    via an option.  Returns an gpg error code. */
 gpg_error_t
-agent_inq_pinentry_launched (ctrl_t ctrl, unsigned long pid)
+agent_inq_pinentry_launched (ctrl_t ctrl, unsigned long pid, const char *extra)
 {
-  char line[100];
+  char line[256];
 
   if (!ctrl || !ctrl->server_local
       || !ctrl->server_local->allow_pinentry_notify)
     return 0;
-  snprintf (line, DIM(line), "PINENTRY_LAUNCHED %lu", pid);
+  snprintf (line, DIM(line), "PINENTRY_LAUNCHED %lu%s%s",
+            pid, extra?" ":"", extra? extra:"");
   return assuan_inquire (ctrl->server_local->assuan_ctx, line, NULL, NULL, 0);
 }
 
diff --git a/g10/server.c b/g10/server.c
index 258f08a..0e15176 100644
--- a/g10/server.c
+++ b/g10/server.c
@@ -770,6 +770,20 @@ gpg_server (ctrl_t ctrl)
 gpg_error_t
 gpg_proxy_pinentry_notify (ctrl_t ctrl, const unsigned char *line)
 {
+  if (opt.verbose)
+    {
+      char *linecopy = xtrystrdup (line);
+      char *fields[4];
+
+      if (linecopy
+          && split_fields (linecopy, fields, DIM (fields)) >= 4
+          && !strcmp (fields[0], "PINENTRY_LAUNCHED"))
+        log_info (_("pinentry launched (pid %s, flavor %s, version %s)\n"),
+                  fields[1], fields[2], fields[3]);
+
+      xfree (linecopy);
+    }
+
   if (!ctrl || !ctrl->server_local
       || !ctrl->server_local->allow_pinentry_notify)
     {

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

Summary of changes:
 agent/agent.h         |  3 ++-
 agent/call-pinentry.c | 25 ++++++++++++++++++++++++-
 agent/command.c       |  7 ++++---
 g10/server.c          | 14 ++++++++++++++
 4 files changed, 44 insertions(+), 5 deletions(-)


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




More information about the Gnupg-commits mailing list