]> granicus.if.org Git - pdns/commitdiff
Implement TKEY record type
authorAki Tuomi <cmouse@cmouse.fi>
Wed, 18 Feb 2015 19:27:56 +0000 (21:27 +0200)
committerAki Tuomi <cmouse@cmouse.fi>
Mon, 9 Mar 2015 19:43:46 +0000 (21:43 +0200)
pdns/dnsrecords.cc
pdns/dnsrecords.hh
pdns/qtype.hh

index a94d02c826bfffc803faaf4f32c2bca26eec10e3..ae9833ca6caa614ed88fdd466edcccc42fc0617a 100644 (file)
@@ -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();
index 05e64e13fa2f2c180e6abad5756672cf646f58ef..1a343629d7b2bea0cc48ac176bd92ed29eb880b2 100644 (file)
@@ -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) \
 {                                                                                                  \
index f846861cfee415b022b1cdf8b9c5381c0bd791d6..116dde607b4f272b2590b6dba26a13ec6c1c9971 100644 (file)
@@ -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<string,uint16_t> namenum;
   static vector<namenum> 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);