From 88f1505f0613894d5544290a170119eb538921e5 Mon Sep 17 00:00:00 2001 From: Justus Winter Date: Tue, 21 Mar 2017 14:18:25 +0100 Subject: [PATCH] dirmngr: Load the hosts file into libdns. * dirmngr/dns-stuff.c (libdns_init): Actually load the hosts file into libdns. -- Previously, connecting to key servers specified in /etc/hosts was not possible because libdns' hosts structure was initialized, but not filled with the content of the hosts file. GnuPG-bug-id: 2977 Signed-off-by: Justus Winter --- dirmngr/dns-stuff.c | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/dirmngr/dns-stuff.c b/dirmngr/dns-stuff.c index ec9a09523..78c70e139 100644 --- a/dirmngr/dns-stuff.c +++ b/dirmngr/dns-stuff.c @@ -533,11 +533,35 @@ libdns_init (void) ld.hosts = dns_hosts_open (&derr); if (!ld.hosts) { - log_error ("failed to load hosts file: %s\n", gpg_strerror (err)); err = libdns_error_to_gpg_error (derr); + log_error ("failed to initialize hosts file: %s\n", gpg_strerror (err)); goto leave; } + + { +#if HAVE_W32_SYSTEM + char *hosts_path = xtryasprintf ("%s\System32\drivers\etc\hosts", + getenv ("SystemRoot")); + if (! hosts_path) + { + err = gpg_error_from_syserror (); + goto leave; + } + + derr = dns_hosts_loadpath (ld.hosts, hosts_path); + xfree (hosts_path); +#else + derr = dns_hosts_loadpath (ld.hosts, "/etc/hosts"); +#endif + if (derr) + { + err = libdns_error_to_gpg_error (derr); + log_error ("failed to load hosts file: %s\n", gpg_strerror (err)); + goto leave; + } + } + /* dns_hints_local for stub mode, dns_hints_root for recursive. */ ld.hints = (recursive_resolver ? dns_hints_root (ld.resolv_conf, &derr)