Adding new DNS record types to PowerDNS software

Nov 30, 2012

Our friends from NLNetLabs recently described how to add new record types to NSD, which I think is a great idea. Especially if this enables the community to add their favorite record types for us!

Here are the full descriptions on how we added the TLSA record type to all PowerDNS products, with links to the actual source code.

First, define the TLSARecordContent class in dnsrecords.hh:

class TLSARecordContent : public DNSRecordContent
{
public:
includeboilerplate(TLSA)

  uint8_t d_certusage, d_selector, d_matchtype;
string d_cert;
};

The ‘includeboilerplate(TLSA)’ generates the four methods that do everything PowerDNS would ever want to do with a record:
  • read TLSA records from zonefile format
  • write out a TLSA record in zonefile format
  • read a TLSA record from a packet
  • write a TLSA record to a packet

boilerplate_conv(TLSA, 52,
conv.xfr8BitInt(d_certusage);
conv.xfr8BitInt(d_selector);
conv.xfr8BitInt(d_matchtype);
conv.xfrHexBlob(d_cert, true);
)

This code defines the TLSA rrtype number as 52. Secondly, it says there are 3 eight bit fields for Certificate Usage, Selector and Match type. Next, it defines that the rest of the record is the actual certificate (hash). ‘conv’ methods are supplied for all DNS data types in use.

Now add TLSARecordContent::report() to reportOtherTypes().

And that’s it. For completeness, add TLSA and 52 to the QType enum in qtype.hh, which makes it easier to refer to the TLSA record in code if so required.

Please contact us to get your patch merged, or submit it via our GitHub page!

About the author

Bert Hubert

Bert Hubert

Principal, PowerDNS

Related Articles

PowerDNS Authoritative: Lua Records

Hi everyone, We are happy to share a new development with you, one that we hinted at over a year ago: Lua resource records....

Bert Hubert 12/6/17

FALCON-512 in PowerDNS

We are proud to introduce the first guest post on our blog! A team of researchers (listed below) has chosen PowerDNS as the...

Peter van Dijk 04/5/22

PowerDNSSEC Available For Testing!

Dear PowerDNS people, On http://wiki.powerdns.com/trac/wiki/PDNSSEC you will find the newest version of PowerDNS with DNSSEC...

Bert Hubert 04/5/10

PowerDNS Authoritative Server 4.2.0

Hello everybody! We are very happy to announce the release of Authoritative Server 4.2.0. Besides a ton of bug fixes (please...

Peter van Dijk 08/6/19