bind9 + DLZ core dumps on AFXR request
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 libmysqlclient1
apt-get build-dep bind9
mkdir /usr/src/
cd /usr/src/
apt-get source bind9
cd bind9-9.
vim debian/rules
change --with-dlz-mysql=no to --with-
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.
| 3600 | 5 | NULL | NULL | NULL | NULL | NULL
| NULL | NULL | 0 |
| 14 | domainzone.com | @ | MX | ALT2.ASPMX.
| 3600 | 5 | NULL | NULL | NULL | NULL | NULL
| NULL | NULL | 0 |
| 15 | domainzone.com | @ | MX | ASPMX2.
| 3600 | 10 | NULL | NULL | NULL | NULL | NULL
| NULL | NULL | 0 |
| 16 | domainzone.com | @ | MX | ASPMX3.
| 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.domainzon
| 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:/
http://
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
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.`