aboutsummaryrefslogtreecommitdiffstats
path: root/tools/gpg-connect-agent.c
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2014-11-19 09:31:34 +0000
committerWerner Koch <[email protected]>2014-11-19 09:47:56 +0000
commit0e7dd40342bd56810c27db1c38c1928f56f43bfd (patch)
tree633cf48590609754cd1858e0ed3b68339d102dfc /tools/gpg-connect-agent.c
parentcommon: Change a string to a simlar one to ease translation. (diff)
downloadgnupg-0e7dd40342bd56810c27db1c38c1928f56f43bfd.tar.gz
gnupg-0e7dd40342bd56810c27db1c38c1928f56f43bfd.zip
Add "gpgconf --kill dirmngr" and avoid useless launch before a kill.
* common/asshelp.c (start_new_gpg_agent): Add arg autostart. Change all callers to use 1 for it. (start_new_dirmngr): Ditto. * tools/gpg-connect-agent.c: Add option --no-autostart. (main): Default autostart to 1. (start_agent): Implement no-autostart. * tools/gpgconf-comp.c (gpg_agent_runtime_change): Use --no-autostart. (scdaemon_runtime_change): Ditto. (dirmngr_runtime_change): New. Signed-off-by: Werner Koch <[email protected]>
Diffstat (limited to 'tools/gpg-connect-agent.c')
-rw-r--r--tools/gpg-connect-agent.c28
1 files changed, 25 insertions, 3 deletions
diff --git a/tools/gpg-connect-agent.c b/tools/gpg-connect-agent.c
index 78dea2a4b..8e8ebcb71 100644
--- a/tools/gpg-connect-agent.c
+++ b/tools/gpg-connect-agent.c
@@ -63,7 +63,8 @@ enum cmd_and_opt_values
oHex,
oDecode,
oNoExtConnect,
- oDirmngr
+ oDirmngr,
+ oNoAutostart,
};
@@ -89,6 +90,7 @@ static ARGPARSE_OPTS opts[] = {
N_("|FILE|run commands from FILE on startup")),
ARGPARSE_s_n (oSubst, "subst", N_("run /subst on startup")),
+ ARGPARSE_s_n (oNoAutostart, "no-autostart", "@"),
ARGPARSE_s_n (oNoVerbose, "no-verbose", "@"),
ARGPARSE_s_s (oHomedir, "homedir", "@" ),
ARGPARSE_s_s (oAgentProgram, "agent-program", "@"),
@@ -103,6 +105,7 @@ struct
{
int verbose; /* Verbosity level. */
int quiet; /* Be extra quiet. */
+ int autostart; /* Start the server if not running. */
const char *homedir; /* Configuration directory name */
const char *agent_program; /* Value of --agent-program. */
const char *dirmngr_program; /* Value of --dirmngr-program. */
@@ -1175,6 +1178,7 @@ main (int argc, char **argv)
opt.homedir = default_homedir ();
+ opt.autostart = 1;
opt.connect_flags = 1;
/* Parse the command line. */
@@ -1191,6 +1195,7 @@ main (int argc, char **argv)
case oHomedir: opt.homedir = pargs.r.ret_str; break;
case oAgentProgram: opt.agent_program = pargs.r.ret_str; break;
case oDirmngrProgram: opt.dirmngr_program = pargs.r.ret_str; break;
+ case oNoAutostart: opt.autostart = 0; break;
case oHex: opt.hex = 1; break;
case oDecode: opt.decode = 1; break;
case oDirmngr: opt.use_dirmngr = 1; break;
@@ -2195,6 +2200,7 @@ start_agent (void)
GPG_ERR_SOURCE_DEFAULT,
opt.homedir,
opt.dirmngr_program,
+ opt.autostart,
!opt.quiet, 0,
NULL, NULL);
else
@@ -2204,14 +2210,30 @@ start_agent (void)
opt.agent_program,
NULL, NULL,
session_env,
+ opt.autostart,
!opt.quiet, 0,
NULL, NULL);
session_env_release (session_env);
if (err)
{
- log_error (_("error sending standard options: %s\n"), gpg_strerror (err));
- exit (1);
+ if (!opt.autostart
+ && (gpg_err_code (err)
+ == opt.use_dirmngr? GPG_ERR_NO_DIRMNGR : GPG_ERR_NO_AGENT))
+ {
+ /* In the no-autostart case we don't make gpg-connect-agent
+ fail on a missing server. */
+ log_info (opt.use_dirmngr?
+ _("no dirmngr running in this session\n"):
+ _("no gpg-agent running in this session\n"));
+ exit (0);
+ }
+ else
+ {
+ log_error (_("error sending standard options: %s\n"),
+ gpg_strerror (err));
+ exit (1);
+ }
}
return ctx;