On Thu, Mar 01, 2007 at 12:29:48AM +0100, bert hubert wrote:
> I fail to reproduce the bug. PowerDNS does misparse the ( record, which is
> sad, and fixed in SVN (the fix is intrusive and should not be backported
> probably).
I guess you've found that pdns expects opening ( for multiline records
to not have anything after it.
ie.
foo TXT ( "lala"
"baba"
)
will throw away "lala" and only return "baba".
I don't think this is a big enough deal to warrant a change now that debian
is frozen since a long time.
>
> But although we misparse the record, I don't see the other behaviour your
> mention.
The original mail in the bug report talked about a different kind of
record, not present in the example zone JvW sent.
ie.
foo TXT "lala(foobar)baba"
pdns/backends/bind/zoneparser2.cc - eatLine() seems to not respect that
the " is first, and wrongly assumes that any line which contains a ( is
a multiline record, which screws up the parsing of the rest of the
zone....
>
> Can you give me a step-by-step so I can see your problem? I already loaded
> your zone, and added several braces to them, and reloaded etc.
>
I've attached an updated version of the example zone which contains a
"foo.a-eskwadraat.nl" record...
$ host -t txt foo.a-eskwadraat.nl localhost
Using domain server:
Name: localhost
Address: 127.0.0.1#53
Aliases:
foo.a-eskwadraat.nl descriptive text "lala\010@ txt ( \"study
association a-eskwadraat\" \"princetonplein 5\" \"nl-3584 cc utrecht\"
\"+31-30-253-4499"
> My debian contains 'pdns-2.9.20-7+b1'.
>
> Thanks. If you get the description in to me today (UTC+2), I'll promise to
> look into it Friday.
Something like this might be whats needed.... Would be awesome if you
could verify if it's correct.
diff -uriNp pdns-2.9.20/pdns/backends/bind/zoneparser2.cc
pdns-2.9.20-noparensintxt/pdns/backends/bind/zoneparser2.cc
--- pdns-2.9.20/pdns/backends/bind/zoneparser2.cc 2006-03-15
19:29:38.000000000 +0100
+++ pdns-2.9.20-noparensintxt/pdns/backends/bind/zoneparser2.cc 2007-03-01
10:46:29.000000000 +0100
@@ -201,10 +201,12 @@ bool ZoneParser::eatLine(const string& l
static string tline;
static string lastfirstword;
string::size_type pos=string::npos;
+ string::size_type contentpos=string::npos;
if(tline.empty()) {
+ contentpos=line.find_first_of("\"");
pos=line.find_first_of("(");
- if(pos!=string::npos) { // this is a line that continues
+ if((pos!=string::npos) && ((contentpos==string::npos) ||
(contentpos>pos))) { // this is a line that continues
tline=line.substr(0,pos);
return false;
}
--
Regards,
Andreas Henriksson
; $Id: db.nl.a-eskwadraat 2753 2007-01-18 14:32:37Z root $
; Zone file for A-Eskwadraat.nl
;
; rewrite door jeroen, 2 april 2002
$TTL 1D
@ IN SOA ns.A-Eskwadraat.nl. sysop.A-Eskwadraat.nl. (
2007011301 ; serial
6H ; refresh, seconds
1H ; retry, seconds
4W ; expire, seconds
1D ) ; minimum, seconds
;
; rewrite door jeroen, 2 april 2002
foo TXT "lala(bar)baba"
@ TXT (
"Study Association A-Eskwadraat"
"Princetonplein 5"
"NL-3584 CC Utrecht"
"+31-30-253-4499"
)
LOC 52 5 14 N 5 9 56 E 50m 10m 30m 50m
; de primary nameserver
NS ns
; de primary mail exchanger
MX 10 mail
; en de vaste backup
MX 20 mail.wolffelaar.nl.
; NS en MX records MOETEN naar een A wijzen (dus geen CNAME)
ns A 131.211.39.72
mail A 131.211.39.72
; VPN stuff
vpn-tunnel A 131.211.39.77
vpns CNAME @
vpn CNAME @
; Aliassen voor sevices die over VPN moeten
ftp CNAME vpn-tunnel
imap CNAME vpn-tunnel
pop3 CNAME vpn-tunnel
home CNAME vpn-tunnel
homes CNAME vpn-tunnel
homedirs CNAME vpn-tunnel
; @ heeft al records, kan dus geen CNAME zijn.
@ A 1.2.3.4
; *.a-eskwadraat.nl verwijst nu naar square
* CNAME @
; Voor DOMjudge/escapade:
;judge 15 CNAME madeleine.students.cs.uu.nl.
; Erik en Judith
erik A 83.83.35.241
; Kerberos
_kerberos TXT "A-ESKWADRAAT.NL"
_kerberos._udp SRV 0 0 88 euclides.localdomain.
_kerberos._tcp SRV 0 0 88 euclides.localdomain.
; backup NS:
@ NS ns1.xel.nl.
NS ns3.xel.nl.
diff -uriNp pdns-2.9.20/pdns/backends/bind/zoneparser2.cc
pdns-2.9.20-noparensintxt/pdns/backends/bind/zoneparser2.cc
--- pdns-2.9.20/pdns/backends/bind/zoneparser2.cc 2006-03-15
19:29:38.000000000 +0100
+++ pdns-2.9.20-noparensintxt/pdns/backends/bind/zoneparser2.cc 2007-03-01
10:46:29.000000000 +0100
@@ -201,10 +201,12 @@ bool ZoneParser::eatLine(const string& l
static string tline;
static string lastfirstword;
string::size_type pos=string::npos;
+ string::size_type contentpos=string::npos;
if(tline.empty()) {
+ contentpos=line.find_first_of("\"");
pos=line.find_first_of("(");
- if(pos!=string::npos) { // this is a line that continues
+ if((pos!=string::npos) && ((contentpos==string::npos) ||
(contentpos>pos))) { // this is a line that continues
tline=line.substr(0,pos);
return false;
}