From 3a9305439b75ccd4446378d4fd87da087fd9c892 Mon Sep 17 00:00:00 2001 From: "Neal H. Walfield" Date: Tue, 19 May 2015 15:00:16 +0200 Subject: agent: When the password cache is cleared, also clear the ext. cache. * agent/agent.h (agent_clear_passphrase): New declaration. * agent/call-pinentry.c (agent_clear_passphrase): New function. * agent/command.c (cmd_clear_passphrase): Call agent_clear_passphrase. -- Signed-off-by: Neal H. Walfield --- agent/call-pinentry.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'agent/call-pinentry.c') diff --git a/agent/call-pinentry.c b/agent/call-pinentry.c index abfea93e0..018a609a3 100644 --- a/agent/call-pinentry.c +++ b/agent/call-pinentry.c @@ -1416,3 +1416,29 @@ agent_popup_message_stop (ctrl_t ctrl) /* Now we can close the connection. */ unlock_pinentry (0); } + +int +agent_clear_passphrase (ctrl_t ctrl, + const char *keyinfo, cache_mode_t cache_mode) +{ + int rc; + char line[ASSUAN_LINELENGTH]; + + if (! (keyinfo && (cache_mode == CACHE_MODE_NORMAL + || cache_mode == CACHE_MODE_USER + || cache_mode == CACHE_MODE_SSH))) + return gpg_error (GPG_ERR_NOT_SUPPORTED); + + rc = start_pinentry (ctrl); + if (rc) + return rc; + + snprintf (line, DIM(line)-1, "CLEARPASSPHRASE %c/%s", + cache_mode == CACHE_MODE_USER? 'u' : + cache_mode == CACHE_MODE_SSH? 's' : 'n', + keyinfo); + rc = assuan_transact (entry_ctx, line, + NULL, NULL, NULL, NULL, NULL, NULL); + + return unlock_pinentry (rc); +} -- cgit v1.2.3