From: Aki Tuomi Date: Wed, 18 Feb 2015 19:27:56 +0000 (+0200) Subject: Implement TKEY record type X-Git-Tag: dnsdist-1.0.0-alpha1~248^2~98^2~44^2~4 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b3ac63245dd911b7d73e50ba2eb4adb760a8def3;p=thirdparty%2Fpdns.git Implement TKEY record type --- diff --git a/pdns/dnsrecords.cc b/pdns/dnsrecords.cc index a94d02c826..ae9833ca6c 100644 --- a/pdns/dnsrecords.cc +++ b/pdns/dnsrecords.cc @@ -413,6 +413,18 @@ string EUI64RecordContent::getZoneRepresentation() const /* EUI64 end */ +boilerplate_conv(TKEY, QType::TKEY, + conv.xfrLabel(d_algo); + conv.xfr32BitInt(d_inception); + conv.xfr32BitInt(d_expiration); + conv.xfr16BitInt(d_mode); + conv.xfr16BitInt(d_error); + conv.xfr16BitInt(d_keysize); + if (d_keysize>0) conv.xfrBlobNoSpaces(d_key, d_keysize); + conv.xfr16BitInt(d_othersize); + if (d_othersize>0) conv.xfrBlobNoSpaces(d_other, d_othersize); + ) +TKEYRecordContent::TKEYRecordContent() : DNSRecordContent(QType::TKEY) {} uint16_t DNSKEYRecordContent::getTag() { @@ -494,6 +506,7 @@ void reportOtherTypes() TLSARecordContent::report(); DLVRecordContent::report(); DNSRecordContent::regist(QClass::ANY, QType::TSIG, &TSIGRecordContent::make, &TSIGRecordContent::make, "TSIG"); + DNSRecordContent::regist(QClass::ANY, QType::TKEY, &TKEYRecordContent::make, &TKEYRecordContent::make, "TKEY"); //TSIGRecordContent::report(); OPTRecordContent::report(); EUI48RecordContent::report(); diff --git a/pdns/dnsrecords.hh b/pdns/dnsrecords.hh index 05e64e13fa..1a343629d7 100644 --- a/pdns/dnsrecords.hh +++ b/pdns/dnsrecords.hh @@ -533,6 +533,25 @@ private: uint8_t d_eui64[8]; }; +class TKEYRecordContent : public DNSRecordContent +{ +public: + TKEYRecordContent(); + includeboilerplate(TKEY) + + // storage for the bytes + string d_algo; + uint32_t d_inception; + uint32_t d_expiration; + uint16_t d_mode; + uint16_t d_error; + uint16_t d_keysize; + string d_key; + uint16_t d_othersize; + string d_other; +private: +}; + #define boilerplate(RNAME, RTYPE) \ RNAME##RecordContent::DNSRecordContent* RNAME##RecordContent::make(const DNSRecord& dr, PacketReader& pr) \ { \ diff --git a/pdns/qtype.hh b/pdns/qtype.hh index f846861cfe..116dde607b 100644 --- a/pdns/qtype.hh +++ b/pdns/qtype.hh @@ -82,7 +82,7 @@ public: #undef DS enum typeenum {A=1, NS=2, CNAME=5, SOA=6, MR=9, WKS=11, PTR=12, HINFO=13, MINFO=14, MX=15, TXT=16, RP=17, AFSDB=18, SIG=24, KEY=25, AAAA=28, LOC=29, SRV=33, NAPTR=35, KX=36, CERT=37, A6=38, DNAME=39, OPT=41, DS=43, SSHFP=44, IPSECKEY=45, RRSIG=46, NSEC=47, DNSKEY=48, DHCID=49, NSEC3=50, NSEC3PARAM=51, - TLSA=52, SPF=99, EUI48=108, EUI64=109, TSIG=250, IXFR=251, AXFR=252, MAILB=253, MAILA=254, ANY=255, ADDR=259, ALIAS=260, DLV=32769} types; + TLSA=52, SPF=99, EUI48=108, EUI64=109, TKEY=249, TSIG=250, IXFR=251, AXFR=252, MAILB=253, MAILA=254, ANY=255, ADDR=259, ALIAS=260, DLV=32769} types; typedef pair namenum; static vector names; @@ -156,6 +156,7 @@ private: qtype_insert("SPF", 99); qtype_insert("EUI48", 108); qtype_insert("EUI64", 109); + qtype_insert("TKEY", 249); // qtype_insert("TSIG", 250); qtype_insert("IXFR", 251); qtype_insert("AXFR", 252);