diff options
author | Werner Koch <[email protected]> | 2017-07-24 18:47:41 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2017-07-24 18:47:41 +0000 |
commit | 2ca0381d077d766593db26f4215b8eddee8d7963 (patch) | |
tree | 59c1a634fd6812742b14e9e3c1d5c4dae30b58c0 /g10/keyserver.c | |
parent | gpg: Store key origin info for new DANE and WKD retrieved keys. (diff) | |
download | gnupg-2ca0381d077d766593db26f4215b8eddee8d7963.tar.gz gnupg-2ca0381d077d766593db26f4215b8eddee8d7963.zip |
gpg: Store key origin info for new keys from a keyserver
* g10/keyserver.c (keyserver_get_chunk): Use KEYORG_KS if request was
done by fingerprint.
* g10/import.c (apply_meta_data): Implement that.
Signed-off-by: Werner Koch <[email protected]>
Diffstat (limited to 'g10/keyserver.c')
-rw-r--r-- | g10/keyserver.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/g10/keyserver.c b/g10/keyserver.c index 9586448fa..4d2a2c873 100644 --- a/g10/keyserver.c +++ b/g10/keyserver.c @@ -1590,11 +1590,12 @@ keyserver_get_chunk (ctrl_t ctrl, KEYDB_SEARCH_DESC *desc, int ndesc, { gpg_error_t err = 0; char **pattern; - int idx, npat; + int idx, npat, npat_fpr; estream_t datastream; char *source = NULL; size_t linelen; /* Estimated linelen for KS_GET. */ size_t n; + int only_fprs; #define MAX_KS_GET_LINELEN 950 /* Somewhat lower than the real limit. */ @@ -1613,7 +1614,7 @@ keyserver_get_chunk (ctrl_t ctrl, KEYDB_SEARCH_DESC *desc, int ndesc, but we are sure that R_NDESC_USED has been updated. This avoids a possible indefinite loop. */ linelen = 17; /* "KS_GET --quick --" */ - for (npat=idx=0; idx < ndesc; idx++) + for (npat=npat_fpr=0, idx=0; idx < ndesc; idx++) { int quiet = 0; @@ -1635,6 +1636,8 @@ keyserver_get_chunk (ctrl_t ctrl, KEYDB_SEARCH_DESC *desc, int ndesc, desc[idx].mode == KEYDB_SEARCH_MODE_FPR20? 20 : 16, pattern[npat]+2); npat++; + if (desc[idx].mode == KEYDB_SEARCH_MODE_FPR20) + npat_fpr++; } } else if(desc[idx].mode == KEYDB_SEARCH_MODE_LONG_KID) @@ -1716,6 +1719,8 @@ keyserver_get_chunk (ctrl_t ctrl, KEYDB_SEARCH_DESC *desc, int ndesc, this is different from NPAT. */ *r_ndesc_used = idx; + only_fprs = (npat && npat == npat_fpr); + err = gpg_dirmngr_ks_get (ctrl, pattern, override_keyserver, quick, &datastream, &source); for (idx=0; idx < npat; idx++) @@ -1747,7 +1752,8 @@ keyserver_get_chunk (ctrl_t ctrl, KEYDB_SEARCH_DESC *desc, int ndesc, (opt.keyserver_options.import_options | IMPORT_NO_SECKEY), keyserver_retrieval_screener, &screenerarg, - 0 /* FIXME? */, NULL); + only_fprs? KEYORG_KS : 0, + source); } es_fclose (datastream); xfree (source); |