mirror of
git://git.gnupg.org/gnupg.git
synced 2024-12-22 10:19:57 +01:00
dirmngr: Do a DNS lookup even if it is missing from nsswitch.conf.
* dirmngr/dns-stuff.c (libdns_init): Do not print error message for a missing nsswitch.conf. Make sure that tehre is a DNS entry. -- GnuPG-bug-id: 2948 Signed-off-by: Werner Koch <wk@gnupg.org>
This commit is contained in:
parent
30dac0486b
commit
dee026d761
@ -498,12 +498,10 @@ libdns_init (void)
|
|||||||
(dns_nssconf_loadpath (ld.resolv_conf, fname));
|
(dns_nssconf_loadpath (ld.resolv_conf, fname));
|
||||||
if (err)
|
if (err)
|
||||||
{
|
{
|
||||||
|
/* This is not a fatal error: nsswitch.conf is not used on
|
||||||
|
* all systems; assume classic behavior instead. */
|
||||||
|
if (gpg_err_code (err) != GPG_ERR_ENOENT)
|
||||||
log_error ("failed to load '%s': %s\n", fname, gpg_strerror (err));
|
log_error ("failed to load '%s': %s\n", fname, gpg_strerror (err));
|
||||||
/* 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. */
|
|
||||||
if (opt_debug)
|
if (opt_debug)
|
||||||
log_debug ("dns: fallback resolution order, files then DNS\n");
|
log_debug ("dns: fallback resolution order, files then DNS\n");
|
||||||
ld.resolv_conf->lookup[0] = 'f';
|
ld.resolv_conf->lookup[0] = 'f';
|
||||||
@ -511,6 +509,23 @@ libdns_init (void)
|
|||||||
ld.resolv_conf->lookup[2] = '\0';
|
ld.resolv_conf->lookup[2] = '\0';
|
||||||
err = GPG_ERR_NO_ERROR;
|
err = GPG_ERR_NO_ERROR;
|
||||||
}
|
}
|
||||||
|
else if (!strchr (ld.resolv_conf->lookup, 'b'))
|
||||||
|
{
|
||||||
|
/* No DNS resulution type found in the list. This might be
|
||||||
|
* due to systemd based systems which allow for custom
|
||||||
|
* keywords which are not known to us and thus we do not
|
||||||
|
* know whether DNS is wanted or not. Becuase DNS is
|
||||||
|
* important for our infrastructure, we forcefully append
|
||||||
|
* DNS to the end of the list. */
|
||||||
|
if (strlen (ld.resolv_conf->lookup)+2 < sizeof ld.resolv_conf->lookup)
|
||||||
|
{
|
||||||
|
if (opt_debug)
|
||||||
|
log_debug ("dns: appending DNS to resolution order\n");
|
||||||
|
strcat (ld.resolv_conf->lookup, "b");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
log_error ("failed to append DNS to resolution order\n");
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* Unix */
|
#endif /* Unix */
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user