]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[2095] rejected RRSIG in start()
authorJINMEI Tatuya <jinmei@isc.org>
Wed, 25 Jul 2012 22:25:39 +0000 (15:25 -0700)
committerJINMEI Tatuya <jinmei@isc.org>
Wed, 25 Jul 2012 22:25:39 +0000 (15:25 -0700)
src/lib/datasrc/memory/rdata_encoder.cc
src/lib/datasrc/memory/rdata_encoder.h
src/lib/datasrc/memory/tests/rdata_encoder_unittest.cc

index 1b31c4aee645ba3b4a402d1b2c98968ce8162005..5115c4f1979b265f3da31209540248b051bf20ef 100644 (file)
@@ -407,6 +407,10 @@ RdataEncoder::~RdataEncoder() {
 
 void
 RdataEncoder::start(RRClass rrclass, RRType rrtype) {
+    if (rrtype == RRType::RRSIG()) {
+        isc_throw(BadValue, "RRSIG cannot be encoded as main RDATA type");
+    }
+
     impl_->encode_spec_ = &getRdataEncodeSpec(rrclass, rrtype);
     impl_->field_composer_.clearLocal(impl_->encode_spec_);
     impl_->rdata_count_ = 0;
index 74f1c4b9c8d3d104a9122e1d89832b9bb5893f11..2ff3fd526c6de96ac29075c2e19b80dc0a62ff3e 100644 (file)
@@ -80,6 +80,9 @@ public:
     /// \brief The destrcutor.
     ~RdataEncoder();
 
+    /// \brief TBD
+    ///
+    /// \throw BadValue RRSIG is specified as rrtype.
     void start(dns::RRClass rrclass, dns::RRType rrtype);
 
     /// \brief TBD
index 49a5b9f7c6700fd0544710f0d90dfcc26fd6b98e..2d386eba02f754f9ac2d7184459c98bbc834a0c4 100644 (file)
@@ -128,8 +128,10 @@ protected:
                      const vector<ConstRdataPtr>& rdata_list,
                      size_t expected_varlen_fields);
 
-    const ConstRdataPtr a_rdata_;     // commonly used RDATA
-    const ConstRdataPtr aaaa_rdata_;  // commonly used RDATA
+    // Some commonly used RDATA
+    const ConstRdataPtr a_rdata_;
+    const ConstRdataPtr aaaa_rdata_;
+
     RdataEncoder encoder_;
     vector<uint8_t> encoded_data_;
     MessageRenderer expected_renderer_;
@@ -333,6 +335,11 @@ TEST_F(RdataEncoderTest, badAddRdata) {
     encoder_.start(RRClass::IN(), RRType::DHCID());
     EXPECT_THROW(encoder_.addRdata(in::DHCID(buffer, encoded_data_.size())),
                                    RdataEncodingError);
+
+    // RRSIG cannot be used as the main RDATA type (can only be added as
+    // a signature for some other type of RDATAs).
+    EXPECT_THROW(encoder_.start(RRClass::IN(), RRType::RRSIG()),
+                 isc::BadValue);
 }
 
 // Note: in our implementation RRSIG is treated as opaque data (including