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 <wk@gnupg.org>
This commit is contained in:
Werner Koch 2017-03-23 11:45:17 +01:00
parent 178b6314ab
commit 2c9d9ac55e
No known key found for this signature in database
GPG Key ID: E3FDFF218E45B72B
2 changed files with 43 additions and 5 deletions

View File

@ -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

View File

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