]> git.ipfire.org Git - thirdparty/bind9.git/commit
Restore localhost fallback in bin/dig/dighost.c
authorMichał Kępień <michal@isc.org>
Tue, 13 Nov 2018 13:31:18 +0000 (14:31 +0100)
committerMichał Kępień <michal@isc.org>
Tue, 13 Nov 2018 13:31:18 +0000 (14:31 +0100)
commit18758392daab79ecd7d9310a42c9758f60841fa2
tree1afcf631bb5cf7e2f2a193c699531b4c79c8c7a6
parent0507658884e123a1efbf77a2c9438e2eaf702b06
Restore localhost fallback in bin/dig/dighost.c

In BIND 9.11 and earlier, dig and similar tools used liblwres for
parsing /etc/resolv.conf.  After getting a list of servers from
liblwres, a tool would check the address family of each server found and
reject those unusable.  When the resulting list of usable servers was
empty, localhost addresses were queried as a fallback.

When liblwres was removed in BIND 9.12, dig and similar tools were
updated to parse /etc/resolv.conf using libirs instead.  As part of that
process, the localhost fallback was removed from bin/dig/dighost.c since
the localhost fallback built into libirs was deemed to be sufficient.
However, libirs only falls back to localhost if it does not find any
name servers at all; if it does find any valid nameserver entry in
/etc/resolv.conf, it just returns it to the caller because it is
oblivious to whether the caller supports IPv4 and/or IPv6 or not.  The
code in bin/dig/dighost.c subsequently filters the returned list of
servers in get_server_list() according to the requested address family
restrictions.  This may result in none of the addresses returned by
libirs being usable, in which case a tool will attempt to work with an
empty server list, causing a hang and subsequently a crash upon user
interruption.

Restore the localhost fallback in bin/dig/dighost.c to prevent the
aforementioned hangs and crashes and ensure recent BIND versions behave
identically to the older ones in the circumstances described above.
bin/dig/dighost.c