diff options
author | Werner Koch <[email protected]> | 2014-11-19 09:31:34 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2014-11-19 09:47:56 +0000 |
commit | 0e7dd40342bd56810c27db1c38c1928f56f43bfd (patch) | |
tree | 633cf48590609754cd1858e0ed3b68339d102dfc /tools/gpgconf-comp.c | |
parent | common: Change a string to a simlar one to ease translation. (diff) | |
download | gnupg-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/gpgconf-comp.c')
-rw-r--r-- | tools/gpgconf-comp.c | 55 |
1 files changed, 41 insertions, 14 deletions
diff --git a/tools/gpgconf-comp.c b/tools/gpgconf-comp.c index f9999bac6..77139bbae 100644 --- a/tools/gpgconf-comp.c +++ b/tools/gpgconf-comp.c @@ -107,6 +107,7 @@ gc_error (int status, int errnum, const char *fmt, ...) /* Forward declaration. */ static void gpg_agent_runtime_change (int killflag); static void scdaemon_runtime_change (int killflag); +static void dirmngr_runtime_change (int killflag); /* Backend configuration. Backends are used to decide how the default and current value of an option can be determined, and how the @@ -189,7 +190,7 @@ static struct { SCDAEMON_DISP_NAME, SCDAEMON_NAME, GNUPG_MODULE_NAME_SCDAEMON, scdaemon_runtime_change, GPGCONF_NAME"-" SCDAEMON_NAME ".conf" }, { DIRMNGR_DISP_NAME, DIRMNGR_NAME, GNUPG_MODULE_NAME_DIRMNGR, - NULL, GPGCONF_NAME "-" DIRMNGR_NAME ".conf" }, + dirmngr_runtime_change, GPGCONF_NAME "-" DIRMNGR_NAME ".conf" }, { DIRMNGR_DISP_NAME " LDAP Server List", NULL, 0, NULL, "ldapserverlist-file", "LDAP Server" }, { "Pinentry", "pinentry", GNUPG_MODULE_NAME_PINENTRY, @@ -1064,19 +1065,20 @@ gpg_agent_runtime_change (int killflag) { gpg_error_t err; const char *pgmname; - const char *argv[2]; + const char *argv[3]; pid_t pid; pgmname = gnupg_module_name (GNUPG_MODULE_NAME_CONNECT_AGENT); - argv[0] = killflag? "KILLAGENT" : "RELOADAGENT"; - argv[1] = NULL; + argv[0] = "--no-autostart"; + argv[1] = killflag? "KILLAGENT" : "RELOADAGENT"; + argv[2] = NULL; err = gnupg_spawn_process_fd (pgmname, argv, -1, -1, -1, &pid); if (!err) err = gnupg_wait_process (pgmname, pid, 1, NULL); if (err) - gc_error (0, 0, "error running '%s%s': %s", - pgmname, " reloadagent", gpg_strerror (err)); + gc_error (0, 0, "error running '%s %s': %s", + pgmname, argv[1], gpg_strerror (err)); gnupg_release_process (pid); } @@ -1086,7 +1088,7 @@ scdaemon_runtime_change (int killflag) { gpg_error_t err; const char *pgmname; - const char *argv[6]; + const char *argv[7]; pid_t pid; (void)killflag; /* For scdaemon kill and reload are synonyms. */ @@ -1098,18 +1100,43 @@ scdaemon_runtime_change (int killflag) pgmname = gnupg_module_name (GNUPG_MODULE_NAME_CONNECT_AGENT); argv[0] = "-s"; - argv[1] = "GETINFO scd_running"; - argv[2] = "/if ${! $?}"; - argv[3] = "scd killscd"; - argv[4] = "/end"; - argv[5] = NULL; + argv[1] = "--no-autostart"; + argv[2] = "GETINFO scd_running"; + argv[3] = "/if ${! $?}"; + argv[4] = "scd killscd"; + argv[5] = "/end"; + argv[6] = NULL; + + err = gnupg_spawn_process_fd (pgmname, argv, -1, -1, -1, &pid); + if (!err) + err = gnupg_wait_process (pgmname, pid, 1, NULL); + if (err) + gc_error (0, 0, "error running '%s %s': %s", + pgmname, argv[4], gpg_strerror (err)); + gnupg_release_process (pid); +} + + +static void +dirmngr_runtime_change (int killflag) +{ + gpg_error_t err; + const char *pgmname; + const char *argv[4]; + pid_t pid; + + pgmname = gnupg_module_name (GNUPG_MODULE_NAME_CONNECT_AGENT); + argv[0] = "--no-autostart"; + argv[1] = "--dirmngr"; + argv[2] = killflag? "KILLDIRMNGR" : "RELOADDIRMNGR"; + argv[3] = NULL; err = gnupg_spawn_process_fd (pgmname, argv, -1, -1, -1, &pid); if (!err) err = gnupg_wait_process (pgmname, pid, 1, NULL); if (err) - gc_error (0, 0, "error running '%s%s': %s", - pgmname, " scd killscd", gpg_strerror (err)); + gc_error (0, 0, "error running '%s %s': %s", + pgmname, argv[2], gpg_strerror (err)); gnupg_release_process (pid); } |