From b7f74f5b46a28d200627ab9b67763891190a8e15 Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Wed, 2 Mar 2011 09:50:12 +0100 Subject: [PATCH] Add comment to last patch. --- agent/ChangeLog | 4 +++- agent/command.c | 33 ++++++++++++++++++++------------- 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 (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 @@ -2928,7 +2930,7 @@ Fri Aug 18 14:27:14 CEST 2000 Werner Koch 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); + else + { + char *string; - if (!string) - err = gpg_error_from_syserror (); - - 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);