aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--agent/ChangeLog4
-rw-r--r--agent/command.c33
2 files changed, 23 insertions, 14 deletions
diff --git a/agent/ChangeLog b/agent/ChangeLog
index f8156bc37..783089e6b 100644
--- a/agent/ChangeLog
+++ b/agent/ChangeLog
@@ -1,6 +1,8 @@
2011-03-02 Ben Kibbey <[email protected]> (wk)
* command.c (cmd_clear_passphrase): Add option --mode=normal.
+ (cmd_keyinfo): Add option --data.
+ (do_one_keyinfo): Return CACHED status. Add arg DATA.
2011-02-07 Werner Koch <[email protected]>
@@ -2928,7 +2930,7 @@ Fri Aug 18 14:27:14 CEST 2000 Werner Koch <[email protected]>
Copyright 2001, 2002, 2003, 2004, 2005,
- 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+ 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
This file is free software; as a special exception the author gives
unlimited permission to copy and/or distribute it, with or without
diff --git a/agent/command.c b/agent/command.c
index b6f5cfb0f..79b9b9731 100644
--- a/agent/command.c
+++ b/agent/command.c
@@ -954,13 +954,13 @@ static const char hlp_keyinfo[] =
"IDSTR is the IDSTR used to distinguish keys on a smartcard. If it\n"
" is not known a dash is used instead.\n"
"\n"
- "CACHED is 1 if the key was found in the key cache. If not, a '-'\n"
- "is used instead.\n"
+ "CACHED is 1 if the passphrase for the key was found in the key cache.\n"
+ " If not, a '-' is used instead.\n"
"\n"
"More information may be added in the future.";
static gpg_error_t
do_one_keyinfo (ctrl_t ctrl, const unsigned char *grip, assuan_context_t ctx,
- int data)
+ int data)
{
gpg_error_t err;
char hexgrip[40+1];
@@ -969,7 +969,7 @@ do_one_keyinfo (ctrl_t ctrl, const unsigned char *grip, assuan_context_t ctx,
char *serialno = NULL;
char *idstr = NULL;
const char *keytypestr;
- char *cached;
+ const char *cached;
char *pw;
err = agent_key_info_from_file (ctrl, grip, &keytype, &shadow_info);
@@ -987,6 +987,9 @@ do_one_keyinfo (ctrl_t ctrl, const unsigned char *grip, assuan_context_t ctx,
else
keytypestr = "-";
+ /* Here we have a little race by doing the cache check separately
+ from the retrieval function. Given that the cache flag is only a
+ hint, it should not really matter. */
pw = agent_get_cache (hexgrip, CACHE_MODE_NORMAL);
cached = pw ? "1" : "-";
xfree (pw);
@@ -1006,16 +1009,20 @@ do_one_keyinfo (ctrl_t ctrl, const unsigned char *grip, assuan_context_t ctx,
idstr? idstr : "-",
cached,
NULL);
- else {
- char *string = xtryasprintf ("%s %s %s %s %s\n", hexgrip, keytypestr,
- serialno? serialno : "-", idstr? idstr : "-", cached);
-
- if (!string)
- err = gpg_error_from_syserror ();
+ else
+ {
+ char *string;
- err = assuan_send_data(ctx, string, strlen(string));
- xfree(string);
- }
+ string = xtryasprintf ("%s %s %s %s %s\n",
+ hexgrip, keytypestr,
+ serialno? serialno : "-",
+ idstr? idstr : "-", cached);
+ if (!string)
+ err = gpg_error_from_syserror ();
+ else
+ err = assuan_send_data (ctx, string, strlen(string));
+ xfree (string);
+ }
leave:
xfree (shadow_info);