1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
|
From: Werner Koch <wk@gnupg.org>
Date: Mon, 3 Apr 2017 19:10:50 +0200
Subject: dirmngr: Do not assume that /etc/hosts exists.
* dirmngr/dns-stuff.c (libdns_init): Do not bail out.
--
A standard Windows installation does not have a hosts file and thus we
can't bail out here. We should also not bail out on a Unix system
because /etc/hosts is just one method in nsswitch.conf.
Fixes-commit: 88f1505f0613894d5544290a170119eb538921e5
Signed-off-by: Werner Koch <wk@gnupg.org>
(cherry picked from commit 5d873f288e86edfb684f4dd57ac36466b06494a4)
---
dirmngr/dns-stuff.c | 16 ++++++++++++----
1 file changed, 12 insertions(+), 4 deletions(-)
diff --git a/dirmngr/dns-stuff.c b/dirmngr/dns-stuff.c
index c79a9c7f4..c2d5488c1 100644
--- a/dirmngr/dns-stuff.c
+++ b/dirmngr/dns-stuff.c
@@ -538,10 +538,9 @@ libdns_init (void)
goto leave;
}
-
{
#if HAVE_W32_SYSTEM
- char *hosts_path = xtryasprintf ("%s\System32\drivers\etc\hosts",
+ char *hosts_path = xtryasprintf ("%s\\System32\\drivers\\etc\\hosts",
getenv ("SystemRoot"));
if (! hosts_path)
{
@@ -551,15 +550,24 @@ libdns_init (void)
derr = dns_hosts_loadpath (ld.hosts, hosts_path);
xfree (hosts_path);
+ if (derr)
+ {
+ err = libdns_error_to_gpg_error (derr);
+ /* Most Windows systems don't have a hosts files. So do not
+ * report in this case. */
+ if (gpg_err_code (err) != GPG_ERR_ENOENT)
+ log_error ("failed to load hosts file: %s\n", gpg_strerror (err));
+ err = 0; /* Do not bail out. */
+ }
#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;
+ err = 0; /* Do not bail out - having no /etc/hosts is legal. */
}
+#endif
}
/* dns_hints_local for stub mode, dns_hints_root for recursive. */
|