diff options
Diffstat (limited to 'g10/misc.c')
-rw-r--r-- | g10/misc.c | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/g10/misc.c b/g10/misc.c index 464697ddf..67ec5cc2b 100644 --- a/g10/misc.c +++ b/g10/misc.c @@ -391,16 +391,23 @@ pct_expando(const char *string,struct expando_args *args) size_t len; int i; - if((*(ch+1))=='p' && args->sk - && (args->sk->main_keyid[0] || args->sk->main_keyid[1])) + if((*(ch+1))=='p' && args->sk) { - PKT_public_key *pk=m_alloc_clear(sizeof(PKT_public_key)); - - if(get_pubkey_fast(pk,args->sk->main_keyid)==0) - fingerprint_from_pk(pk,array,&len); + if(args->sk->is_primary) + fingerprint_from_sk(args->sk,array,&len); + else if(args->sk->main_keyid[0] || args->sk->main_keyid[1]) + { + PKT_public_key *pk= + m_alloc_clear(sizeof(PKT_public_key)); + + if(get_pubkey_fast(pk,args->sk->main_keyid)==0) + fingerprint_from_pk(pk,array,&len); + else + memset(array,0,(len=MAX_FINGERPRINT_LEN)); + free_public_key(pk); + } else memset(array,0,(len=MAX_FINGERPRINT_LEN)); - free_public_key(pk); } else if((*(ch+1))=='f' && args->pk) fingerprint_from_pk(args->pk,array,&len); |