From 88ade475c56ac3712d6bd6d41ae38e1421dcb320 Mon Sep 17 00:00:00 2001 From: Phil Pennock Date: Thu, 19 Jan 2017 01:21:42 -0500 Subject: [PATCH] dirmngr: Handle missing nsswitch.conf. * dirmngr/dns-stuff.c (libdns_init): Fallback to files,dns. -- Signed-off-by: Phil Pennock ChangeLog entry by wk. This fixed the problem: Short version: macOS doesn't include /etc/nsswitch.conf and GnuPG's dirmngr is hard-erroring when that file is missing, such that no DNS operations succeed and --recv-key returns ENOENT type errors to the caller. Signed-off-by: Werner Koch --- dirmngr/dns-stuff.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/dirmngr/dns-stuff.c b/dirmngr/dns-stuff.c index 28ecb1857..eae888bf9 100644 --- a/dirmngr/dns-stuff.c +++ b/dirmngr/dns-stuff.c @@ -478,7 +478,16 @@ libdns_init (void) if (err) { log_error ("failed to load '%s': %s\n", fname, gpg_strerror (err)); - goto leave; + /* not fatal, nsswitch.conf is not used on all systems; assume + * classic behavior instead. Our dns library states "bf" which tries + * DNS then Files, which is not classic; FreeBSD + * /usr/src/lib/libc/net/gethostnamadr.c defines default_src[] which + * is Files then DNS, which is. */ + log_debug ("dns: fallback resolution order, files then DNS"); + ld.resolv_conf->lookup[0] = 'f'; + ld.resolv_conf->lookup[1] = 'b'; + ld.resolv_conf->lookup[2] = '\0'; + err = GPG_ERR_NO_ERROR; } #endif /* Unix */