diff options
author | Werner Koch <[email protected]> | 2017-02-15 16:03:57 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2017-02-15 18:20:33 +0000 |
commit | da2ba20868093e3054d18adc2b1bc56cb23e4ba7 (patch) | |
tree | d10a55625a5f34af360069663a1e30ee6f185bb8 /dirmngr/ks-engine-hkp.c | |
parent | tests,build: Fix distcheck. (diff) | |
download | gnupg-da2ba20868093e3054d18adc2b1bc56cb23e4ba7.tar.gz gnupg-da2ba20868093e3054d18adc2b1bc56cb23e4ba7.zip |
dirmngr: Avoid PTR lookup for hosts in a pool
* dirmngr/ks-engine-hkp.c (add_host): Don't to a PTR lookup for hosts
in a pool.
--
GnuPG-bug-id: 2928
Signed-off-by: Werner Koch <[email protected]>
Diffstat (limited to 'dirmngr/ks-engine-hkp.c')
-rw-r--r-- | dirmngr/ks-engine-hkp.c | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/dirmngr/ks-engine-hkp.c b/dirmngr/ks-engine-hkp.c index 40f352178..6505ca980 100644 --- a/dirmngr/ks-engine-hkp.c +++ b/dirmngr/ks-engine-hkp.c @@ -300,10 +300,17 @@ add_host (const char *name, int is_pool, idx = find_hostinfo (name); - if (!is_pool && !is_ip_address (name)) + if (is_pool) { - /* This is a hostname but not a pool. Use the name - as given without going through resolve_dns_addr. */ + /* For a pool immediately convert the address to a string. */ + tmperr = resolve_dns_addr (ai->addr, ai->addrlen, + (DNS_NUMERICHOST | DNS_WITHBRACKET), &tmphost); + is_numeric = 1; + } + else if (!is_ip_address (name)) + { + /* This is a hostname. Use the name as given without going + * through resolve_dns_addr. */ tmphost = xtrystrdup (name); if (!tmphost) tmperr = gpg_error_from_syserror (); @@ -312,6 +319,10 @@ add_host (const char *name, int is_pool, } else { + /* Do a PTR lookup on AI. If a name was not found the function + * returns the numeric address (with brackets) and we set a flag + * so that we know that the conversion to a numerical string has + * already be done. */ tmperr = resolve_dns_addr (ai->addr, ai->addrlen, DNS_WITHBRACKET, &tmphost); if (tmphost && is_ip_address (tmphost)) @@ -344,8 +355,7 @@ add_host (const char *name, int is_pool, if (tmpidx == -1) { - log_error ("map_host for '%s' problem: %s - '%s'" - " [ignored]\n", + log_error ("map_host for '%s' problem: %s - '%s' [ignored]\n", name, strerror (errno), tmphost); } else /* Set or update the entry. */ @@ -355,6 +365,9 @@ add_host (const char *name, int is_pool, if (port) hosttable[tmpidx]->port = port; + /* If TMPHOST is not yet a numerical value do this now. + * Note: This is a simple string operations and not a PTR + * lookup (due to DNS_NUMERICHOST). */ if (!is_numeric) { xfree (tmphost); |