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