aboutsummaryrefslogtreecommitdiffstats
path: root/g10/getkey.c
diff options
context:
space:
mode:
Diffstat (limited to 'g10/getkey.c')
-rw-r--r--g10/getkey.c61
1 files changed, 40 insertions, 21 deletions
diff --git a/g10/getkey.c b/g10/getkey.c
index ebd1345fd..d247b3bcb 100644
--- a/g10/getkey.c
+++ b/g10/getkey.c
@@ -905,7 +905,7 @@ get_pubkey_byname (PKT_public_key *pk,
KEYDB_HANDLE *ret_kdbhd, int include_unusable )
{
int rc;
- int tried_ks=0, tried_pka=0;
+ int tried_cert=0, tried_pka=0, tried_ks=0;
STRLIST namelist = NULL;
add_to_strlist( &namelist, name );
@@ -915,6 +915,25 @@ get_pubkey_byname (PKT_public_key *pk,
if (rc == G10ERR_NO_PUBKEY && is_valid_mailbox(name))
{
+ int res;
+
+ if(!tried_cert
+ && (opt.keyserver_options.options&KEYSERVER_AUTO_CERT_RETRIEVE))
+ {
+ tried_cert=1;
+
+ glo_ctrl.in_auto_key_retrieve++;
+ res=keyserver_import_cert(name);
+ glo_ctrl.in_auto_key_retrieve--;
+
+ if(res==0)
+ {
+ log_info(_("Automatically retrieved `%s' via %s\n"),
+ name,"DNS CERT");
+ goto retry;
+ }
+ }
+
if(!tried_pka
&& opt.allow_pka_lookup
&& (opt.keyserver_options.options&KEYSERVER_AUTO_PKA_RETRIEVE))
@@ -922,28 +941,19 @@ get_pubkey_byname (PKT_public_key *pk,
/* If the requested name resembles a valid mailbox and
automatic retrieval via PKA records has been enabled, we
try to import the key via the URI and try again. */
- unsigned char fpr[MAX_FINGERPRINT_LEN];
- char *uri;
- struct keyserver_spec *spec;
- int try=1;
tried_pka=1;
-
- uri = get_pka_info (name, fpr);
- if (uri)
+
+ glo_ctrl.in_auto_key_retrieve++;
+ res=keyserver_import_pka(name);
+ glo_ctrl.in_auto_key_retrieve--;
+
+ if(res==0)
{
- spec = parse_keyserver_uri (uri, 0, NULL, 0);
- if (spec)
- {
- glo_ctrl.in_auto_key_retrieve++;
- try=keyserver_import_fprint (fpr, 20, spec);
- glo_ctrl.in_auto_key_retrieve--;
- free_keyserver_spec (spec);
- }
- xfree (uri);
+ log_info(_("Automatically retrieved `%s' via %s\n"),
+ name,"PKA");
+ goto retry;
}
- if (try==0)
- goto retry;
}
/* Try keyserver last as it is likely to be the slowest.
@@ -952,12 +962,21 @@ get_pubkey_byname (PKT_public_key *pk,
with searching for something like "john" and getting a lot of
keys back. */
if(!tried_ks
+ && opt.keyserver
&& (opt.keyserver_options.options&KEYSERVER_AUTO_KEY_RETRIEVE))
{
tried_ks=1;
- if(keyserver_getname(name)==0)
- goto retry;
+ glo_ctrl.in_auto_key_retrieve++;
+ res=keyserver_import_name(name);
+ glo_ctrl.in_auto_key_retrieve--;
+
+ if(res==0)
+ {
+ log_info(_("Automatically retrieved `%s' via %s\n"),
+ name,opt.keyserver->uri);
+ goto retry;
+ }
}
}