From 08c82b1b55d28ffd09b859205b7686bcefae5011 Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Mon, 13 Jun 2016 10:40:34 +0200 Subject: gpg: Try Signer's User ID sub-packet with --auto-key-retrieve. * g10/packet.h (PKT_signature): Add field 'signers_uid'. * g10/parse-packet.c (parse_signature): Set this field. * g10/free-packet.c (free_seckey_enc): Free field. (copy_signature): Copy field. * g10/mainproc.c (akl_has_wkd_method): New. (check_sig_and_print): Extend NEWSIG status. If WKD is enabled try to locate a missing key via the signature's Signer's User ID sub-packet. Do this right before trying a keyserver lookup. -- Signed-off-by: Werner Koch --- g10/parse-packet.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'g10/parse-packet.c') diff --git a/g10/parse-packet.c b/g10/parse-packet.c index c77e409e5..c30abcbe3 100644 --- a/g10/parse-packet.c +++ b/g10/parse-packet.c @@ -1915,6 +1915,20 @@ parse_signature (IOBUF inp, int pkttype, unsigned long pktlen, if (p) sig->flags.pref_ks = 1; + p = parse_sig_subpkt (sig->hashed, SIGSUBPKT_SIGNERS_UID, &len); + if (p && len) + { + sig->signers_uid = xtrymalloc (len+1); + if (!sig->signers_uid) + { + rc = gpg_error_from_syserror (); + goto leave; + } + /* Note that we don't care about binary zeroes in the value. */ + memcpy (sig->signers_uid, p, len); + sig->signers_uid[len] = 0; + } + p = parse_sig_subpkt (sig->hashed, SIGSUBPKT_NOTATION, NULL); if (p) sig->flags.notation = 1; -- cgit v1.2.3