[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