Add comment to last patch.
authorWerner Koch <wk@gnupg.org>
Wed, 2 Mar 2011 08:50:12 +0000 (09:50 +0100)
committerWerner Koch <wk@gnupg.org>
Wed, 2 Mar 2011 08:54:18 +0000 (09:54 +0100)
agent/ChangeLog
agent/command.c

index f8156bc..783089e 100644 (file)
@@ -1,6 +1,8 @@
 2011-03-02  Ben Kibbey  <bjk@luxsci.net>  (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  <wk@g10code.com>
 
@@ -2928,7 +2930,7 @@ Fri Aug 18 14:27:14 CEST 2000  Werner Koch  <wk@openit.de>
 
 
  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
index b6f5cfb..79b9b97 100644 (file)
@@ -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);