aboutsummaryrefslogtreecommitdiffstats
path: root/dirmngr/dns-stuff.c
diff options
context:
space:
mode:
authorPhil Pennock <[email protected]>2017-01-19 06:21:42 +0000
committerWerner Koch <[email protected]>2017-01-23 10:02:41 +0000
commit88ade475c56ac3712d6bd6d41ae38e1421dcb320 (patch)
treeb0f367477c0c6686d393f07e8ebb478ecc7c4189 /dirmngr/dns-stuff.c
parentdco: Register Phil Pennock. (diff)
downloadgnupg-88ade475c56ac3712d6bd6d41ae38e1421dcb320.tar.gz
gnupg-88ade475c56ac3712d6bd6d41ae38e1421dcb320.zip
dirmngr: Handle missing nsswitch.conf.
* dirmngr/dns-stuff.c (libdns_init): Fallback to files,dns. -- Signed-off-by: Phil Pennock <[email protected]> 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 <[email protected]>
Diffstat (limited to 'dirmngr/dns-stuff.c')
-rw-r--r--dirmngr/dns-stuff.c11
1 files changed, 10 insertions, 1 deletions
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 */