diff --git a/agent/agent.h b/agent/agent.h index 58dd7df85..e934ec8db 100644 --- a/agent/agent.h +++ b/agent/agent.h @@ -597,6 +597,7 @@ int agent_card_scd (ctrl_t ctrl, const char *cmdline, int (*getpin_cb)(void *, const char *, const char *, char*, size_t), void *getpin_cb_arg, void *assuan_context); +void agent_card_killscd (void); /*-- learncard.c --*/ diff --git a/agent/call-scd.c b/agent/call-scd.c index 51d9abd70..6438693af 100644 --- a/agent/call-scd.c +++ b/agent/call-scd.c @@ -1324,3 +1324,12 @@ agent_card_scd (ctrl_t ctrl, const char *cmdline, return unlock_scd (ctrl, 0); } + +void +agent_card_killscd (void) +{ + if (primary_scd_ctx == NULL) + return; + assuan_transact (primary_scd_ctx, "KILLSCD", + NULL, NULL, NULL, NULL, NULL, NULL); +} diff --git a/agent/gpg-agent.c b/agent/gpg-agent.c index ffd85d196..87656a1f3 100644 --- a/agent/gpg-agent.c +++ b/agent/gpg-agent.c @@ -2434,6 +2434,9 @@ agent_sighup_action (void) "pinentry" binary that one can be used in case the "pinentry-basic" fallback was in use. */ gnupg_module_name_flush_some (); + + if (opt.disable_scdaemon) + agent_card_killscd (); }