[Pdns-dev] RP records ''someperson.example.com. .''
Klaus P. Ohrhallinger
k at 7he.at
Tue Dec 3 17:19:44 CET 2013
Hello!
Recently I performed a BIND to PowerDNS migration of a quite large setup.
The only issue I couldn't solve without touching the code was
RP records of this form:
''someperson.example.com. .''
which is perfectly fine with RFC 1183:
----8<----
The root domain name (just ".") may be
specified for <txt-dname> to indicate that the TXT_DNAME is absent,
and no associated TXT RR exists.
----8<----
In the pdns databases (postgres) it ends up as:
''someperson.example.com ''
which leads to an exception in RecordTextReader::skipSpaces().
dnsrecords.cc:
boilerplate_conv(RP, ns_t_rp,
conv.xfrLabel(d_mbox);
conv.xfrLabel(d_info)
);
--> xfrLabel() --> skipSpaces() --> exception.
This is how I worked around the problem:
--- pdns-3.3-orig/pdns/rcpgenerator.cc 2013-05-15 14:23:28.000000000 +0200
+++ pdns-3.3/pdns/rcpgenerator.cc 2013-10-07 05:43:56.493536239 +0200
@@ -179,6 +179,11 @@ void RecordTextReader::xfrLabel(string&
{
skipSpaces();
val.clear();
+ if (d_pos == d_end) {
+ /* '.' is a valid label which is '' in pdns database */
+ val = "";
+ return;
+ }
val.reserve(d_end - d_pos);
const char* strptr=d_string.c_str();
@@ -362,8 +367,10 @@ void RecordTextReader::skipSpaces()
const char* strptr = d_string.c_str();
while(d_pos < d_end && dns_isspace(strptr[d_pos]))
d_pos++;
+ /*
if(d_pos == d_end)
throw RecordTextException("missing field at the end of record content '"+d_string+"'");
+ */
}
I don't think this is a proper way of dealing with the issue.
Has someone got a better idea ?
Thanks,
Klaus
--
* * * * * * http://www.ipv6actnow.org/ * * * * * *
More information about the Pdns-dev
mailing list