bind9 + DLZ core dumps on AFXR request

Bug #430358 reported by Jon Austin
10
This bug affects 2 people
Affects Status Importance Assigned to Milestone
bind9 (Ubuntu)
Confirmed
Low
Unassigned

Bug Description

Binary package hint: bind9

Hi there

I'm having a few problems with DLZ and BIND crashing when a slave
server requests a zone transfer (my secondary DNS host does not
support DLZ).

I've built the BIND package on Ubuntu 8.10 x86. The steps I took to build it was

apt-get install build-essential
apt-get install libmysqlclient15-dev
apt-get build-dep bind9
mkdir /usr/src/local/bind9
cd /usr/src/local/bind9
apt-get source bind9
cd bind9-9.5.0.dfsg.P2/
vim debian/rules
change --with-dlz-mysql=no to --with-dlz-mysql=yes
dpkg-buildpackage -b
dpkg - install debs

I believe it built ok with some warnings. The .debs installed ok, just
a minor issue with rndc and keys.

After a bit of mucking around with configs, any normal lookup works
fine, no errors produced when running named with -d1 console output.
However, when I trigger a AFXR request (using testing host configured
as static slave zone):

14-Sep-2009 21:39:16.173
Query String: select zone from dns_records where zone = 'domainzone.com'

14-Sep-2009 21:39:16.173
Query String: select ttl, type, mx_priority, case when
lower(type)='txt' then concat('"', data, '"') when lower(type) = 'soa'
then concat_ws(' ', data, resp_person, serial, refresh, retry, expire,
minimum) else data end from dns_records where zone = 'domainzone.com'
and host = '@'

14-Sep-2009 21:39:16.173
Query String: select ttl, type, mx_priority, case when
lower(type)='txt' then concat('"', data, '"') when lower(type) = 'soa'
then concat_ws(' ', data, resp_person, serial, refresh, retry, expire,
minimum) else data end from dns_records where zone = 'domainzone.com'
and host = '@'

14-Sep-2009 21:39:17.047
Query String: select zone from dns_records where zone = 'domainzone.com'

14-Sep-2009 21:39:17.047
Query String: select zone from xfr_table where zone = 'domainzone.com'
and client = '203.x.x.x'

14-Sep-2009 21:39:17.047
Query String: select ttl, type, mx_priority, case when
lower(type)='txt' then concat('"', data, '"') when lower(type) = 'soa'
then concat_ws(' ', data, resp_person, serial, refresh, retry, expire,
minimum) else data end from dns_records where zone = 'domainzone.com'
and host = '@'

14-Sep-2009 21:39:17.047
Query String: select ttl, type, host, mx_priority, case when
lower(type)='txt' then concat('"', data, '"') else data end,
resp_person, serial, refresh, retry, expire, minimum from dns_records
where zone = 'domainzone.com'

14-Sep-2009 21:39:17.048
Query String: select ttl, type, mx_priority, case when
lower(type)='txt' then concat('"', data, '"') when lower(type) = 'soa'
then concat_ws(' ', data, resp_person, serial, refresh, retry, expire,
minimum) else data end from dns_records where zone = 'domainzone.com'
and host = '@'

14-Sep-2009 21:39:17.048 zone.c:2514: REQUIRE((((source) != ((void
*)0)) && (((const isc__magic_t *)(source))->magic == ((('Z') << 24 |
('O') << 16 | ('N') << 8 | ('E')))))) failed
14-Sep-2009 21:39:17.048 exiting (due to assertion failure)
Aborted (core dumped)

My table structure is as follows (apologies for formatting)
mysql> select * from dns_records;
+----+-------------------------+---------+-------+------------------------------+------+-------------+---------+-------+--------+---------+------------+-----------------+---------------+------------+
| id | zone | host | type | data
         | ttl | mx_priority | refresh | retry | expire | minimum |
serial | resp_person | primary_ns | data_count |
+----+-------------------------+---------+-------+------------------------------+------+-------------+---------+-------+--------+---------+------------+-----------------+---------------+------------+
| 9 | domainzone.com | staging | CNAME | www.domainzone.com. | 3600 |
       NULL | NULL | NULL | NULL | NULL | NULL | NULL
         | NULL | 0 |
| 11 | domainzone.com | www | A | 1.2.3.4 |
3600 | NULL | NULL | NULL | NULL | NULL | NULL |
NULL | NULL | 0 |
| 12 | domainzone.com | @ | MX | ASPMX.L.GOOGLE.COM.
| 3600 | 1 | NULL | NULL | NULL | NULL | NULL
| NULL | NULL | 0 |
| 13 | domainzone.com | @ | MX | ALT1.ASPMX.L.GOOGLE.COM.
| 3600 | 5 | NULL | NULL | NULL | NULL | NULL
| NULL | NULL | 0 |
| 14 | domainzone.com | @ | MX | ALT2.ASPMX.L.GOOGLE.COM.
| 3600 | 5 | NULL | NULL | NULL | NULL | NULL
| NULL | NULL | 0 |
| 15 | domainzone.com | @ | MX | ASPMX2.GOOGLEMAIL.COM.
| 3600 | 10 | NULL | NULL | NULL | NULL | NULL
| NULL | NULL | 0 |
| 16 | domainzone.com | @ | MX | ASPMX3.GOOGLEMAIL.COM.
| 3600 | 10 | NULL | NULL | NULL | NULL | NULL
| NULL | NULL | 0 |
| 17 | domainzone.com | @ | SOA | ns1.domainzone.com.
     | 3601 | NULL | 3602 | 3603 | 86400 | 3604 |
2008082700 | admin.domainzone.com | ns1.domainzone.com | 0 |
| 18 | domainzone.com | @ | NS | ns1.domainzone.com.
     | 3600 | NULL | NULL | NULL | NULL | NULL |
NULL | NULL | NULL | 0 |
| 20 | domainzone.com | @ | NS | ns4.us.editdns.net.
| 3600 | NULL | NULL | NULL | NULL | NULL | NULL
| NULL | NULL | 0 |
| 21 | domainzone.com | @ | NS | ns5.us.editdns.net.
| 3600 | NULL | NULL | NULL | NULL | NULL | NULL
| NULL | NULL | 0 |
+----+-------------------------+---------+-------+------------------------------+------+-------------+---------+-------+--------+---------+------------+-----------------+---------------+------------+

mysql> select * from xfr_table;
+-------------------------+-----------------+
| zone | client |
+-------------------------+-----------------+
| domainzone.com | 96.31.74.171 |
| domainzone.com | 203.x.x.x |
+-------------------------+-----------------+

And my BIND config is as follows:

dlz "Mysql zone" {
        database "mysql
{host=127.0.0.1 dbname=bind port=3306 user=xxx pass=xxx}
{select zone from dns_records where zone = '%zone%'}
{select ttl, type, mx_priority, case when lower(type)='txt' then
concat('\"', data, '\"') when lower(type) = 'soa' then concat_ws(' ',
data, resp_person, serial, refresh, retry, expire, minimum) else data
end from dns_records where zone = '%zone%' and host = '%record%'}
{}
{select ttl, type, host, mx_priority, case when lower(type)='txt' then
concat('\"', data, '\"') else data end, resp_person, serial, refresh,
retry, expire, minimum from dns_records where zone = '%zone%'}
{select zone from xfr_table where zone = '%zone%' and client = '%client%'}";
        };

In terms of troubleshooting:

1. The source package I used was bind9-9.5.0.dfsg.P2 (from Ubuntu
repository). Is there any way to tell what revision of DLZ is applied
to this source?

2. Does my table data look correct? I had a bit of a problem early on
that I fixed by setting unused fields (such as serial in an A record)
to NULL, although this could have been fixed by me experimenting with
the queries in named config.

3. I found the following references which might be relevant

https://bugzilla.redhat.com/show_bug.cgi?id=454783

http://www.mail-archive.com/comp-protocols-dns-bind <at> isc.org/msg00134.html

I would prefer to only use debian sources for build as it will make
deployment and maintainence much easier. Any suggestions are greatly
appreciated.

Regards

Jon

Tags: bind dns
Revision history for this message
Jon Austin (jonoaustin) wrote :

Also should mention have tried using -n 1 when running named with no change in behaviour.

The core dump ONLY occurs immediately when an AFXR request is recvd. All other lookups (SOA, NS, A, etc) work perfectly fine.`

Revision history for this message
Chuck Short (zulcss) wrote :

This might still be a problem in karmic as well I have just checked the source and it has not been applied. Of course there is no response on the mailing list as well in the link provided. If possible can you test the karmic version?

Regards
chuck

Changed in bind9 (Ubuntu):
importance: Undecided → Low
status: New → Incomplete
Revision history for this message
Jon Austin (jonoaustin) wrote : Re: [Bug 430358] Re: bind9 + DLZ core dumps on AFXR request
Download full text (9.1 KiB)

I'll give karmic a crack at first opportunity, fairly busy at the moment
with work commitment.

I've applied the xfrout.c patch suggested in this post
http://<email address hidden>/msg00134.html and
it seems to have resolved it. Although the patch did not cleanly apply
against the source - I manually made the edits. This patch resolved the
issue.

On Thu, Oct 8, 2009 at 12:13 AM, Chuck Short <email address hidden>wrote:

> This might still be a problem in karmic as well I have just checked the
> source and it has not been applied. Of course there is no response on
> the mailing list as well in the link provided. If possible can you test
> the karmic version?
>
> Regards
> chuck
>
> ** Changed in: bind9 (Ubuntu)
> Importance: Undecided => Low
>
> ** Changed in: bind9 (Ubuntu)
> Status: New => Incomplete
>
> --
> bind9 + DLZ core dumps on AFXR request
> https://bugs.launchpad.net/bugs/430358
> You received this bug notification because you are a direct subscriber
> of the bug.
>
> Status in “bind9” package in Ubuntu: Incomplete
>
> Bug description:
> Binary package hint: bind9
>
> Hi there
>
> I'm having a few problems with DLZ and BIND crashing when a slave
> server requests a zone transfer (my secondary DNS host does not
> support DLZ).
>
> I've built the BIND package on Ubuntu 8.10 x86. The steps I took to build
> it was
>
> apt-get install build-essential
> apt-get install libmysqlclient15-dev
> apt-get build-dep bind9
> mkdir /usr/src/local/bind9
> cd /usr/src/local/bind9
> apt-get source bind9
> cd bind9-9.5.0.dfsg.P2/
> vim debian/rules
> change --with-dlz-mysql=no to --with-dlz-mysql=yes
> dpkg-buildpackage -b
> dpkg - install debs
>
> I believe it built ok with some warnings. The .debs installed ok, just
> a minor issue with rndc and keys.
>
> After a bit of mucking around with configs, any normal lookup works
> fine, no errors produced when running named with -d1 console output.
> However, when I trigger a AFXR request (using testing host configured
> as static slave zone):
>
> 14-Sep-2009 21:39:16.173
> Query String: select zone from dns_records where zone = 'domainzone.com'
>
> 14-Sep-2009 21:39:16.173
> Query String: select ttl, type, mx_priority, case when
> lower(type)='txt' then concat('"', data, '"') when lower(type) = 'soa'
> then concat_ws(' ', data, resp_person, serial, refresh, retry, expire,
> minimum) else data end from dns_records where zone = 'domainzone.com'
> and host = '@'
>
> 14-Sep-2009 21:39:16.173
> Query String: select ttl, type, mx_priority, case when
> lower(type)='txt' then concat('"', data, '"') when lower(type) = 'soa'
> then concat_ws(' ', data, resp_person, serial, refresh, retry, expire,
> minimum) else data end from dns_records where zone = 'domainzone.com'
> and host = '@'
>
> 14-Sep-2009 21:39:17.047
> Query String: select zone from dns_records where zone = 'domainzone.com'
>
> 14-Sep-2009 21:39:17.047
> Query String: select zone from xfr_table where zone = 'domainzone.com'
> and client = '203.x.x.x'
>
> 14-Sep-2009 21:39:17.047
> Query String: select ttl, type, mx_priority, case when
> lower(type)='txt' then concat('"', data, '"') when lower(type) = 'so...

Read more...

Revision history for this message
Chuck Short (zulcss) wrote :

Thanks for the quick response. I think this might be revisited again for karmic+1.

Regards
chuck

Changed in bind9 (Ubuntu):
status: Incomplete → Confirmed
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.