summaryrefslogtreecommitdiffstats
path: root/g10/keylist.c
diff options
context:
space:
mode:
authorWerner Koch <wk@gnupg.org>2016-08-04 15:34:14 +0200
committerWerner Koch <wk@gnupg.org>2016-08-04 15:34:14 +0200
commitc8cc804f56bfefba46641f2c7078fcd67b494bae (patch)
tree60c104df589e595c5f878085e666c18fa5ce87d1 /g10/keylist.c
parentgpg: Always print the fingerprint in colons mode. (diff)
downloadgnupg2-c8cc804f56bfefba46641f2c7078fcd67b494bae.tar.xz
gnupg2-c8cc804f56bfefba46641f2c7078fcd67b494bae.zip
gpg: Make sure that keygrips are printed for each subkey.
* g10/keylist.c (list_keyblock_colon): Print an emprty grip in case of an error. Signed-off-by: Werner Koch <wk@gnupg.org>
Diffstat (limited to 'g10/keylist.c')
-rw-r--r--g10/keylist.c20
1 files changed, 14 insertions, 6 deletions
diff --git a/g10/keylist.c b/g10/keylist.c
index 1ba92124f..60b8f23fa 100644
--- a/g10/keylist.c
+++ b/g10/keylist.c
@@ -1186,7 +1186,8 @@ list_keyblock_colon (ctrl_t ctrl, kbnode_t keyblock,
int ulti_hack = 0;
int i;
char *p;
- char *hexgrip = NULL;
+ char *hexgrip_buffer = NULL;
+ const char *hexgrip = NULL;
char *serialno = NULL;
int stubkey;
@@ -1202,9 +1203,13 @@ list_keyblock_colon (ctrl_t ctrl, kbnode_t keyblock,
pk = node->pkt->pkt.public_key;
if (secret || has_secret || opt.with_keygrip || opt.with_key_data)
{
- rc = hexkeygrip_from_pk (pk, &hexgrip);
+ rc = hexkeygrip_from_pk (pk, &hexgrip_buffer);
if (rc)
log_error ("error computing a keygrip: %s\n", gpg_strerror (rc));
+ /* In the error case we print an empty string so that we have a
+ * "grp" record for each and subkey - even if it is empty. This
+ * may help to prevent sync problems. */
+ hexgrip = hexgrip_buffer? hexgrip_buffer : "";
}
stubkey = 0;
if ((secret || has_secret)
@@ -1338,16 +1343,19 @@ list_keyblock_colon (ctrl_t ctrl, kbnode_t keyblock,
{
u32 keyid2[2];
PKT_public_key *pk2;
+ int need_hexgrip = !!hexgrip;
pk2 = node->pkt->pkt.public_key;
- xfree (hexgrip); hexgrip = NULL;
+ xfree (hexgrip_buffer); hexgrip_buffer = NULL; hexgrip = NULL;
xfree (serialno); serialno = NULL;
- if (secret || has_secret || opt.with_keygrip || opt.with_key_data)
+ if (need_hexgrip
+ || secret || has_secret || opt.with_keygrip || opt.with_key_data)
{
- rc = hexkeygrip_from_pk (pk2, &hexgrip);
+ rc = hexkeygrip_from_pk (pk2, &hexgrip_buffer);
if (rc)
log_error ("error computing a keygrip: %s\n",
gpg_strerror (rc));
+ hexgrip = hexgrip_buffer? hexgrip_buffer : "";
}
stubkey = 0;
if ((secret||has_secret)
@@ -1523,7 +1531,7 @@ list_keyblock_colon (ctrl_t ctrl, kbnode_t keyblock,
}
}
- xfree (hexgrip);
+ xfree (hexgrip_buffer);
xfree (serialno);
}