agent/
authorWerner Koch <wk@gnupg.org>
Wed, 14 Feb 2007 16:27:55 +0000 (16:27 +0000)
committerWerner Koch <wk@gnupg.org>
Wed, 14 Feb 2007 16:27:55 +0000 (16:27 +0000)
* gpg-agent.c: New option --pinentry-touch-file.
(get_agent_socket_name): New.
* agent.h (opt):  Add pinentry_touch_file.
* call-pinentry.c (start_pinentry): Send new option to the
pinentry.

agent/ChangeLog
agent/agent.h
agent/call-pinentry.c
agent/gpg-agent.c
doc/ChangeLog
doc/gpg-agent.texi
doc/scdaemon.texi

index 06d7b85..cd19f35 100644 (file)
@@ -1,3 +1,11 @@
+2007-02-14  Werner Koch  <wk@g10code.com>
+
+       * gpg-agent.c: New option --pinentry-touch-file.
+       (get_agent_socket_name): New.
+       * agent.h (opt):  Add pinentry_touch_file.
+       * call-pinentry.c (start_pinentry): Send new option to the
+       pinentry.
+
 2007-01-31  Moritz Schulte  <moritz@g10code.com>  (wk)
 
        * command-ssh.c (stream_read_string): Initialize LENGTH to zero.
index c86ec1e..15830de 100644 (file)
@@ -72,6 +72,10 @@ struct
   int disable_scdaemon;         /* Never use the SCdaemon. */
   int no_grab;         /* Don't let the pinentry grab the keyboard */
 
+  /* The name of the file pinentry shall tocuh before exiting.  If
+     this is not set the filoe name of the standard socket is used. */
+  const char *pinentry_touch_file;
+
   /* The default and maximum TTL of cache entries. */
   unsigned long def_cache_ttl;     /* Default. */
   unsigned long def_cache_ttl_ssh; /* for SSH. */
@@ -186,6 +190,7 @@ cache_mode_t;
 
 /*-- gpg-agent.c --*/
 void agent_exit (int rc) JNLIB_GCC_A_NR; /* Also implemented in other tools */
+const char *get_agent_socket_name (void);
 
 /*-- command.c --*/
 gpg_error_t agent_write_status (ctrl_t ctrl, const char *keyword, ...);
index bb3b5de..8b527b2 100644 (file)
@@ -181,6 +181,7 @@ start_pinentry (ctrl_t ctrl)
   int no_close_list[3];
   int i;
   pth_event_t evt;
+  const char *tmpstr;
 
   evt = pth_event (PTH_EVENT_TIME, pth_timeout (LOCK_TIMEOUT, 0));
   if (!pth_mutex_acquire (&entry_lock, 0, evt))
@@ -297,6 +298,30 @@ start_pinentry (ctrl_t ctrl)
       if (rc)
        return unlock_pinentry (rc);
     }
+
+  
+  /* Tell the pinentry the name of a file it shall touch after having
+     messed with the tty.  This is optional and only supported by
+     newer pinentries and thus we do no error checking. */
+  tmpstr = opt.pinentry_touch_file;
+  if (tmpstr && !strcmp (tmpstr, "/dev/null"))
+    tmpstr = NULL;
+  else if (!tmpstr)
+    tmpstr = get_agent_socket_name ();
+  if (tmpstr)
+    {
+      char *optstr;
+      
+      if (asprintf (&optstr, "OPTION touch-file=%s", tmpstr ) < 0 )
+        ;
+      else
+        {
+          assuan_transact (entry_ctx, optstr, NULL, NULL, NULL, NULL, NULL,
+                           NULL);
+          free (optstr);
+        }
+    }
+
   return 0;
 }
 
index 72a4013..c88e22c 100644 (file)
@@ -78,6 +78,7 @@ enum cmd_and_opt_values
   oBatch,
 
   oPinentryProgram,
+  oPinentryTouchFile,
   oDisplay,
   oTTYname,
   oTTYtype,
@@ -131,6 +132,7 @@ static ARGPARSE_OPTS opts[] = {
 
   { oPinentryProgram, "pinentry-program", 2 ,
                                N_("|PGM|use PGM as the PIN-Entry program") },
+  { oPinentryTouchFile, "pinentry-touch-file", 2 , "@" },
   { oScdaemonProgram, "scdaemon-program", 2 ,
                                N_("|PGM|use PGM as the SCdaemon program") },
   { oDisableScdaemon, "disable-scdaemon", 0, N_("do not use the SCdaemon") },
@@ -401,6 +403,7 @@ parse_rereadable_options (ARGPARSE_ARGS *pargs, int reread)
       opt.debug = 0;
       opt.no_grab = 0;
       opt.pinentry_program = NULL;
+      opt.pinentry_touch_file = NULL;
       opt.scdaemon_program = NULL;
       opt.def_cache_ttl = DEFAULT_CACHE_TTL;
       opt.def_cache_ttl_ssh = DEFAULT_CACHE_TTL_SSH;
@@ -437,6 +440,7 @@ parse_rereadable_options (ARGPARSE_ARGS *pargs, int reread)
     case oNoGrab: opt.no_grab = 1; break;
       
     case oPinentryProgram: opt.pinentry_program = pargs->r.ret_str; break;
+    case oPinentryTouchFile: opt.pinentry_touch_file = pargs->r.ret_str; break;
     case oScdaemonProgram: opt.scdaemon_program = pargs->r.ret_str; break;
     case oDisableScdaemon: opt.disable_scdaemon = 1; break;
 
@@ -1186,6 +1190,16 @@ reread_configuration (void)
 }
 
 
+/* Return the file name of the socket we are using for native
+   requests.  */
+const char *
+get_agent_socket_name (void)
+{
+  const char *s = socket_name;
+
+  return (s && *s)? s : NULL;
+}
+
 
 
 /* Create a name for the socket.  With USE_STANDARD_SOCKET given as
index 1feda1b..96dd2f6 100644 (file)
@@ -1,3 +1,7 @@
+2007-02-14  Werner Koch  <wk@g10code.com>
+
+       * gpg-agent.texi (Agent Options): Doc --pinentry-touch-file.
+
 2007-02-05  Werner Koch  <wk@g10code.com>
 
        * debugging.texi (Common Problems): Tell how to export a private
index 12c8705..4119d66 100644 (file)
@@ -344,6 +344,17 @@ shorter than this value a warning will be displayed.  Defaults to 8.
 Use program @var{filename} as the PIN entry.  The default is installation
 dependend and can be shown with the @code{--version} command.
 
+@item --pinentry-touch-file @var{filename}
+@opindex pinentry-touch-file
+By default the file name of the socket gpg-agent is listening for
+requests is passed to Pinentry, so that it can touch that file before
+exiting (it does this only in curses mode).  This option changes the
+file passed to Pinentry to @var{filename}.  The special name
+@code{/dev/null} may be used to completely disable this feature.  Note
+that Pinentry will not create that file, it will only change the
+modification and access time.
+
+
 @item --scdaemon-program @var{filename}
 @opindex scdaemon-program
 Use program @var{filename} as the Smartcard daemon.  The default is
index 91b056a..6eb2f16 100644 (file)
@@ -311,7 +311,7 @@ used by @command{gpgsm}.
 @subsection The DINSIG card application ``dinsig''
 
 This is an application as described in the German draft standard
-@emph{DIN V 66291-1}.  It is intended to be used by cards supporteing
+@emph{DIN V 66291-1}.  It is intended to be used by cards supporting
 the German signature law and its bylaws (SigG and SigV).
 
 @node PKCS#15 Card