1
0
Fork 0
mirror of git://git.gnupg.org/gnupg.git synced 2025-07-02 22:46:30 +02:00
* 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.
This commit is contained in:
Werner Koch 2007-02-14 16:27:55 +00:00
parent b46c93fb10
commit 5240d014f8
7 changed files with 68 additions and 1 deletions

View 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.

View 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, ...);

View 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;
}

View 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