diff options
author | Werner Koch <[email protected]> | 2017-03-23 10:45:17 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2017-03-23 16:55:21 +0000 |
commit | 2c9d9ac55ea455a5ec26428989dced0311ed46cc (patch) | |
tree | 0b45d913814b7fdbfc8fa2e54c0ca1028f95eee3 | |
parent | gpgscm: Make test cleanup more robust. (diff) | |
download | gnupg-2c9d9ac55ea455a5ec26428989dced0311ed46cc.tar.gz gnupg-2c9d9ac55ea455a5ec26428989dced0311ed46cc.zip |
tests: Use gpgconf to stop the agent.
* tests/openpgp/defs.scm (stop-agent): Swap order of actions. Kill
all daemons using gpgconf.
* tools/gpgconf.c (main) <aRemoveSocketDir>: Try to remove known
socketfails on rmdir failure. Do no fail for ENONET.
--
Killing all daemons is not really required but it does not harm to be
prepared for the future.
Signed-off-by: Werner Koch <[email protected]>
-rw-r--r-- | tests/openpgp/defs.scm | 10 | ||||
-rw-r--r-- | tools/gpgconf.c | 38 |
2 files changed, 43 insertions, 5 deletions
diff --git a/tests/openpgp/defs.scm b/tests/openpgp/defs.scm index 7c8e10a7e..e8d06c048 100644 --- a/tests/openpgp/defs.scm +++ b/tests/openpgp/defs.scm @@ -453,10 +453,12 @@ "|--debug-quick-random") /bye))) -;; Stop the agent and remove the socket dir. +;; Stop the agent and other daemons and remove the socket dir. (define (stop-agent) (log "Stopping gpg-agent...") + (call-check `(,(tool 'gpgconf) --kill all)) (catch (log "Warning: Removing socket directory failed.") - (call-popen `(,(tool 'gpgconf) --remove-socketdir) "")) - (call-check `(,(tool 'gpg-connect-agent) --verbose --no-autostart - killagent /bye))) + (call-popen `(,(tool 'gpgconf) --remove-socketdir) ""))) + + +;; end diff --git a/tools/gpgconf.c b/tools/gpgconf.c index c6fb24e61..d6bf9a26a 100644 --- a/tools/gpgconf.c +++ b/tools/gpgconf.c @@ -456,6 +456,7 @@ query_swdb (estream_t out, const char *name, const char *current_version) int main (int argc, char **argv) { + gpg_error_t err; ARGPARSE_ARGS pargs; const char *fname; int no_more_options = 0; @@ -755,7 +756,42 @@ main (int argc, char **argv) else if (opt.dry_run) ; else if (rmdir (socketdir)) - gc_error (1, errno, "error removing '%s'", socketdir); + { + /* If the director is not empty we first try to delet + * socket files. */ + err = gpg_error_from_syserror (); + if (gpg_err_code (err) == GPG_ERR_ENOTEMPTY + || gpg_err_code (err) == GPG_ERR_EEXIST) + { + static const char * const names[] = { + GPG_AGENT_SOCK_NAME, + GPG_AGENT_EXTRA_SOCK_NAME, + GPG_AGENT_BROWSER_SOCK_NAME, + GPG_AGENT_SSH_SOCK_NAME, + SCDAEMON_SOCK_NAME, + DIRMNGR_SOCK_NAME + }; + int i; + char *p; + + for (i=0; i < DIM(names); i++) + { + p = strconcat (socketdir , "/", names[i], NULL); + if (p) + gnupg_remove (p); + xfree (p); + } + if (rmdir (socketdir)) + gc_error (1, 0, "error removing '%s': %s", + socketdir, gpg_strerror (err)); + } + else if (gpg_err_code (err) == GPG_ERR_ENOENT) + gc_error (0, 0, "warning: removing '%s' failed: %s", + socketdir, gpg_strerror (err)); + else + gc_error (1, 0, "error removing '%s': %s", + socketdir, gpg_strerror (err)); + } xfree (socketdir); } |