Hi,
On Tue, Jan 24, 2017 at 11:42:37AM +0100, Janne Johansson wrote:
> It was pointed out to me that if you run
>
> dig @h.gtld-servers.net ubuntu.com. se-east-1.clouds.archive.ubuntu.com
> +trace
>
> a few times, it sooner or later gets a reply too large for udp, switches to
> tcp and then
> dies with this output:
>
> /usr/src/usr.sbin/bind/lib/dns/name.c:571: REQUIRE((((name2) !=
> ((void *)0)) && (((const isc__magic_t *)(name2))->magic == ((('D')
> << 24 | ('N') << 16 | ('S') << 8 | ('n')))))) failed.
I ran into this problem as well. Upstream fixed the bug a while ago
with commit 084ba95b083dc55fd10631ad43fa8fff48707648, which can be
viewed here:
https://source.isc.org/cgi-bin/gitweb.cgi?p=bind9.git;a=patch;h=084ba95b083dc55fd10631ad43fa8fff48707648
Below is a diff that backports this diff to OpenBSD dig.
Thanks,
Caspar Schutijser
Index: dighost.c
===================================================================
RCS file: /cvs/src/usr.sbin/bind/bin/dig/dighost.c,v
retrieving revision 1.17
diff -u -p -r1.17 dighost.c
--- dighost.c 1 Jun 2017 20:18:44 -0000 1.17
+++ dighost.c 2 Apr 2018 10:26:35 -0000
@@ -758,6 +758,7 @@ make_empty_lookup(void) {
looknew->new_search = ISC_FALSE;
looknew->done_as_is = ISC_FALSE;
looknew->need_search = ISC_FALSE;
+ dns_fixedname_init(&looknew->fdomain);
ISC_LINK_INIT(looknew, link);
ISC_LIST_INIT(looknew->q);
ISC_LIST_INIT(looknew->my_server_list);
@@ -832,6 +833,9 @@ clone_lookup(dig_lookup_t *lookold, isc_
looknew->need_search = lookold->need_search;
looknew->done_as_is = lookold->done_as_is;
+ dns_name_copy(dns_fixedname_name(&lookold->fdomain),
+ dns_fixedname_name(&looknew->fdomain), NULL);
+
if (servers)
clone_server_list(lookold->my_server_list,
&looknew->my_server_list);
@@ -1568,7 +1572,6 @@ followup_lookup(dns_message_t *msg, dig_
lookup->trace_root = ISC_FALSE;
if (lookup->ns_search_only)
lookup->recurse = ISC_FALSE;
- dns_fixedname_init(&lookup->fdomain);
domain = dns_fixedname_name(&lookup->fdomain);
dns_name_copy(name, domain, NULL);
}