mirror of
git://git.gnupg.org/gnupg.git
synced 2025-07-03 22:56:33 +02:00
agent: Backport changes from 2.1 to support an external password manager.
* agent/agent.h (agent_askpin): Add arguments keyinfo and cache_mode. Update callers. (agent_get_passphrase): Likewise. (agent_clear_passphrase): New function. (opt): Add field allow_external_cache. * agent/call-pinentry.c (start_pinentry): Send "OPTION allow-external-password-cache" to the pinentry. (PINENTRY_STATUS_PASSWORD_FROM_CACHE): New constant. (pinentry_status_cb): New function. (agent_askpin): Add arguments keyinfo and cache_mode. If KEYINFO and CACHE_MODE describe a cachable key, then send SETKEYINFO to the pinentry. Pass PINENTRY_STATUS_CB to the "GETPIN" invocation. If the passphrase was incorrect and PINENTRY_STATUS_PASSWORD_FROM_CACHE is set, decrement PININFO->FAILED_TRIES. (agent_get_passphrase): Add arguments keyinfo and cache_mode. If KEYINFO and CACHE_MODE describe a cachable key, then send SETKEYINFO to the pinentry. (agent_clear_passphrase): New function. * agent/call-pinentry.c (start_pinentry): Act upon new var, allow_external_cache. * agent/command.c (cmd_clear_passphrase): Call agent_clear_passphrase. * agent/gpg-agent.c (oNoAllowExternalCache): New. (opts): Add option --no-allow-external-cache. (parse_rereadable_options): Set this option. -- Signed-off-by: Neal H. Walfield <neal@g10code.com> Based on commits:3a9305439b
e201c20f25
d7293cb317
56b5c9f94f
d3b5cad234
2180845959
This commit is contained in:
parent
80b6d614b7
commit
dde8ddffd3
10 changed files with 186 additions and 21 deletions
|
@ -1269,8 +1269,8 @@ cmd_get_passphrase (assuan_context_t ctx, char *line)
|
|||
|
||||
next_try:
|
||||
rc = agent_get_passphrase (ctrl, &response, desc, prompt,
|
||||
repeat_errtext? repeat_errtext:errtext,
|
||||
opt_qualbar);
|
||||
repeat_errtext? repeat_errtext:errtext,
|
||||
opt_qualbar, cacheid, CACHE_MODE_USER);
|
||||
xfree (repeat_errtext);
|
||||
repeat_errtext = NULL;
|
||||
if (!rc)
|
||||
|
@ -1287,7 +1287,8 @@ cmd_get_passphrase (assuan_context_t ctx, char *line)
|
|||
char *response2;
|
||||
|
||||
rc = agent_get_passphrase (ctrl, &response2, desc2, prompt,
|
||||
errtext, 0);
|
||||
errtext, 0,
|
||||
cacheid, CACHE_MODE_USER);
|
||||
if (rc)
|
||||
break;
|
||||
if (strcmp (response2, response))
|
||||
|
@ -1329,6 +1330,7 @@ static const char hlp_clear_passphrase[] =
|
|||
static gpg_error_t
|
||||
cmd_clear_passphrase (assuan_context_t ctx, char *line)
|
||||
{
|
||||
ctrl_t ctrl = assuan_get_pointer (ctx);
|
||||
char *cacheid = NULL;
|
||||
char *p;
|
||||
|
||||
|
@ -1343,6 +1345,9 @@ cmd_clear_passphrase (assuan_context_t ctx, char *line)
|
|||
return set_error (GPG_ERR_ASS_PARAMETER, "invalid length of cacheID");
|
||||
|
||||
agent_put_cache (cacheid, CACHE_MODE_USER, NULL, 0);
|
||||
|
||||
agent_clear_passphrase (ctrl, cacheid, CACHE_MODE_USER);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue