aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tests/openpgp/defs.scm10
-rw-r--r--tools/gpgconf.c38
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);
}