diff options
author | Werner Koch <[email protected]> | 2015-10-06 18:31:43 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2015-10-06 18:31:43 +0000 |
commit | 9ac31f91b10059474da1c9580fb99e94278d4c11 (patch) | |
tree | 04f6667ad289aa69cb2b0b1e0ef01f3eed398863 /g10/keyserver.c | |
parent | dirmngr: Addlow fetching keys using OpenPGP DANE (diff) | |
download | gnupg-9ac31f91b10059474da1c9580fb99e94278d4c11.tar.gz gnupg-9ac31f91b10059474da1c9580fb99e94278d4c11.zip |
gpg: Add new --auto-key-locate mechanism "dane".
* g10/call-dirmngr.c (gpg_dirmngr_dns_cert): Allow fetching via DANE.
* g10/keyserver.c (keyserver_import_cert): Add arg "dane_mode".
* g10/options.h (AKL_DANE): New.
* g10/getkey.c (get_pubkey_byname): Implement AKL_DANE.
(parse_auto_key_locate): Ditto.
--
To test this use
gpg --auto-key-locate clear,dane,local --locate-key -v [email protected]
Signed-off-by: Werner Koch <[email protected]>
Diffstat (limited to 'g10/keyserver.c')
-rw-r--r-- | g10/keyserver.c | 26 |
1 files changed, 15 insertions, 11 deletions
diff --git a/g10/keyserver.c b/g10/keyserver.c index e20c16b08..a6257e539 100644 --- a/g10/keyserver.c +++ b/g10/keyserver.c @@ -1881,30 +1881,34 @@ keyserver_fetch (ctrl_t ctrl, strlist_t urilist) } -/* Import key in a CERT or pointed to by a CERT */ +/* Import key in a CERT or pointed to by a CERT. In DANE_MODE fetch + the certificate using the DANE method. */ int -keyserver_import_cert (ctrl_t ctrl, - const char *name,unsigned char **fpr,size_t *fpr_len) +keyserver_import_cert (ctrl_t ctrl, const char *name, int dane_mode, + unsigned char **fpr,size_t *fpr_len) { gpg_error_t err; - char *domain,*look,*url; + char *look,*url; estream_t key; + look = xstrdup(name); - look=xstrdup(name); - - domain=strrchr(look,'@'); - if(domain) - *domain='.'; + if (!dane_mode) + { + char *domain = strrchr (look,'@'); + if (domain) + *domain='.'; + } - err = gpg_dirmngr_dns_cert (ctrl, look, "*", &key, fpr, fpr_len, &url); + err = gpg_dirmngr_dns_cert (ctrl, look, dane_mode? NULL : "*", + &key, fpr, fpr_len, &url); if (err) ; else if (key) { int armor_status=opt.no_armor; - /* CERTs are always in binary format */ + /* CERTs and DANE records are always in binary format */ opt.no_armor=1; err = import_keys_es_stream (ctrl, key, NULL, fpr, fpr_len, |