]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[#3208] added not implemented types
authorRazvan Becheriu <razvan@isc.org>
Fri, 8 Mar 2024 17:23:56 +0000 (19:23 +0200)
committerRazvan Becheriu <razvan@isc.org>
Fri, 8 Mar 2024 17:23:56 +0000 (19:23 +0200)
src/lib/dns/master_loader.cc
src/lib/dns/master_loader.h
src/lib/dns/messagerenderer.h
src/lib/dns/rdata.cc
src/lib/dns/rdata.h
src/lib/dns/rdataclass.cc
src/lib/dns/rdataclass.h
src/lib/dns/rrparamregistry.cc

index f10cac0eda508ca488962615d4fe4c9f67676b1d..1c48388a6eef83c6f29987f0cf593f3a6af10b22 100644 (file)
@@ -1036,11 +1036,9 @@ MasterLoader::MasterLoader(std::istream& stream,
     if (!add_callback) {
         isc_throw(isc::InvalidParameter, "Empty add RR callback");
     }
-    boost::shared_ptr<MasterLoaderImpl>
-        impl(new MasterLoaderImpl("", zone_origin, zone_class,
-                                  callbacks, add_callback, options));
-    impl->pushStreamSource(stream);
-    impl_ = impl;
+    impl_.reset(new MasterLoaderImpl("", zone_origin, zone_class,
+                                     callbacks, add_callback, options));
+    impl_->pushStreamSource(stream);
 }
 
 MasterLoader::~MasterLoader() {
index 48d26664d5459cd0bbedba68e702c7ca8373f685..955620a2e18556e870941c370183741aa5b97db5 100644 (file)
@@ -11,7 +11,8 @@
 #include <dns/master_loader_callbacks.h>
 
 #include <boost/noncopyable.hpp>
-#include <boost/shared_ptr.hpp>
+
+#include <memory>
 
 namespace isc {
 namespace dns {
@@ -176,7 +177,7 @@ public:
 
 private:
     class MasterLoaderImpl;
-    boost::shared_ptr<MasterLoaderImpl> impl_;
+    std::unique_ptr<MasterLoaderImpl> impl_;
 };
 
 } // end namespace dns
index ec47132a4b9ba3f334fd0b2f3094ee38afb0fa17..794579698758baee73636e38fe54613a16e27f5f 100644 (file)
@@ -9,9 +9,10 @@
 
 #include <util/buffer.h>
 
-#include <boost/shared_ptr.hpp>
 #include <boost/noncopyable.hpp>
 
+#include <memory>
+
 namespace isc {
 namespace dns {
 // forward declarations
@@ -384,7 +385,7 @@ public:
 
 private:
     struct MessageRendererImpl;
-    boost::shared_ptr<MessageRendererImpl> impl_;
+    std::unique_ptr<MessageRendererImpl> impl_;
 };
 }
 }
index dd778a9c1737e6dc38aec39a92384b41d3e4d451..df48785364938316f9687c348346c7e1b19bdab6 100644 (file)
@@ -207,7 +207,7 @@ Generic::Generic(InputBuffer& buffer, size_t rdata_len) {
     impl_.reset(new GenericImpl(data));
 }
 
-boost::shared_ptr<GenericImpl>
+std::unique_ptr<GenericImpl>
 Generic::constructFromLexer(MasterLexer& lexer) {
     const MasterToken& token = lexer.getNextToken(MasterToken::STRING);
     if (token.getString() != "\\#") {
@@ -266,22 +266,16 @@ Generic::constructFromLexer(MasterLexer& lexer) {
                   << data.size() << " vs. " << rdlen);
     }
 
-    return (boost::shared_ptr<GenericImpl>(new GenericImpl(data)));
+    return (std::unique_ptr<GenericImpl>(new GenericImpl(data)));
 }
 
-Generic::Generic(const std::string& rdata_string) :
-    impl_(NULL) {
-    // We use unique_ptr here because if there is an exception in this
-    // constructor, the destructor is not called and there could be a
-    // leak of the GenericImpl that constructFromLexer() returns.
-    boost::shared_ptr<GenericImpl> impl_ptr;
-
+Generic::Generic(const std::string& rdata_string) {
     try {
         std::istringstream ss(rdata_string);
         MasterLexer lexer;
         lexer.pushSource(ss);
 
-        impl_ptr = constructFromLexer(lexer);
+        impl_ = constructFromLexer(lexer);
 
         if (lexer.getNextToken().getType() != MasterToken::END_OF_FILE) {
             isc_throw(InvalidRdataText, "extra input text for unknown RDATA: "
@@ -291,8 +285,6 @@ Generic::Generic(const std::string& rdata_string) :
         isc_throw(InvalidRdataText, "Failed to construct unknown RDATA "
                   "from '" << rdata_string << "': " << ex.what());
     }
-
-    impl_ = impl_ptr;
 }
 
 Generic::Generic(MasterLexer& lexer, const Name*,
index b04429ab129a4c75abf3a3900d088cddc3136005..01201a8e742fd2f2f47f95ff0a26751550ad54e8 100644 (file)
@@ -15,6 +15,7 @@
 
 #include <boost/shared_ptr.hpp>
 
+#include <memory>
 #include <stdint.h>
 
 namespace isc {
@@ -381,9 +382,9 @@ public:
     //@}
 
 private:
-    boost::shared_ptr<GenericImpl> constructFromLexer(MasterLexer& lexer);
+    std::unique_ptr<GenericImpl> constructFromLexer(MasterLexer& lexer);
 
-    boost::shared_ptr<GenericImpl> impl_;
+    std::unique_ptr<GenericImpl> impl_;
 };
 
 ///
index 43c26c593661316eebbdef942e2eea4138d836d0..adc4e98881e95266ba8d6b9e5bc3e9db8ac8fdfe 100644 (file)
@@ -87,7 +87,7 @@ struct TSIGImpl {
 };
 
 // helper function for string and lexer constructors
-boost::shared_ptr<TSIGImpl>
+std::unique_ptr<TSIGImpl>
 TSIG::constructFromLexer(MasterLexer& lexer, const Name* origin) {
     const Name& algorithm =
         createNameFromLexer(lexer, origin ? origin : &Name::ROOT_NAME());
@@ -181,8 +181,8 @@ TSIG::constructFromLexer(MasterLexer& lexer, const Name* origin) {
     // RFC2845 says Other Data is "empty unless Error == BADTIME".
     // However, we don't enforce that.
 
-    return (boost::shared_ptr<TSIGImpl>(new TSIGImpl(canonical_algorithm_name, time_signed, fudge, mac,
-                                                     orig_id, error, other_data)));
+    return (std::unique_ptr<TSIGImpl>(new TSIGImpl(canonical_algorithm_name, time_signed, fudge, mac,
+                                                   orig_id, error, other_data)));
 }
 
 /// \brief Constructor from string.
@@ -230,18 +230,13 @@ TSIG::constructFromLexer(MasterLexer& lexer, const Name* origin) {
 /// \throw BadValue if MAC or Other Data is not validly encoded in base-64.
 ///
 /// \param tsig_str A string containing the RDATA to be created
-TSIG::TSIG(const std::string& tsig_str) : impl_(NULL) {
-    // We use unique_ptr here because if there is an exception in this
-    // constructor, the destructor is not called and there could be a
-    // leak of the TSIGImpl that constructFromLexer() returns.
-    boost::shared_ptr<TSIGImpl> impl_ptr;
-
+TSIG::TSIG(const std::string& tsig_str) {
     try {
         std::istringstream ss(tsig_str);
         MasterLexer lexer;
         lexer.pushSource(ss);
 
-        impl_ptr = constructFromLexer(lexer, NULL);
+        impl_ = constructFromLexer(lexer, NULL);
 
         if (lexer.getNextToken().getType() != MasterToken::END_OF_FILE) {
             isc_throw(InvalidRdataText,
@@ -252,8 +247,6 @@ TSIG::TSIG(const std::string& tsig_str) : impl_(NULL) {
                   "Failed to construct TSIG from '" << tsig_str << "': "
                   << ex.what());
     }
-
-    impl_ = impl_ptr;
 }
 
 /// \brief Constructor with a context of MasterLexer.
@@ -296,8 +289,7 @@ TSIG::TSIG(MasterLexer& lexer, const Name* origin,
 /// But this constructor does not use this parameter; if necessary, the caller
 /// must check consistency between the length parameter and the actual
 /// RDATA length.
-TSIG::TSIG(InputBuffer& buffer, size_t) :
-    impl_(NULL) {
+TSIG::TSIG(InputBuffer& buffer, size_t) {
     Name algorithm(buffer);
 
     uint8_t time_signed_buf[6];
@@ -336,8 +328,7 @@ TSIG::TSIG(InputBuffer& buffer, size_t) :
 
 TSIG::TSIG(const Name& algorithm, uint64_t time_signed, uint16_t fudge,
            uint16_t mac_size, const void* mac, uint16_t original_id,
-           uint16_t error, uint16_t other_len, const void* other_data) :
-    impl_(NULL) {
+           uint16_t error, uint16_t other_len, const void* other_data) {
     // Time Signed is a 48-bit value.
     if ((time_signed >> 48) != 0) {
         isc_throw(OutOfRange, "TSIG Time Signed is too large: " <<
@@ -715,8 +706,7 @@ OPT::OPT() :
 /// This constructor cannot be used, and always throws an exception.
 ///
 /// \throw InvalidRdataText OPT RR cannot be constructed from text.
-OPT::OPT(const std::string&) :
-    impl_(NULL) {
+OPT::OPT(const std::string&) {
     isc_throw(InvalidRdataText, "OPT RR cannot be constructed from text");
 }
 
@@ -726,14 +716,12 @@ OPT::OPT(const std::string&) :
 ///
 /// \throw InvalidRdataText OPT RR cannot be constructed from text.
 OPT::OPT(MasterLexer&, const Name*,
-         MasterLoader::Options, MasterLoaderCallbacks&) :
-    impl_(NULL) {
+         MasterLoader::Options, MasterLoaderCallbacks&) {
     isc_throw(InvalidRdataText, "OPT RR cannot be constructed from text");
 }
 
-OPT::OPT(InputBuffer& buffer, size_t rdata_len) :
-    impl_(NULL) {
-    boost::shared_ptr<OPTImpl> impl_ptr(new OPTImpl());
+OPT::OPT(InputBuffer& buffer, size_t rdata_len) {
+    impl_.reset(new OPTImpl());
 
     while (true) {
         if (rdata_len == 0) {
@@ -750,12 +738,12 @@ OPT::OPT(InputBuffer& buffer, size_t rdata_len) :
         const uint16_t option_length = buffer.readUint16();
         rdata_len -= 4;
 
-        if (static_cast<uint16_t>(impl_ptr->rdlength_ + option_length) <
-            impl_ptr->rdlength_) {
+        if (static_cast<uint16_t>(impl_->rdlength_ + option_length) <
+            impl_->rdlength_) {
             isc_throw(InvalidRdataText,
                       "Option length " << option_length
                       << " would overflow OPT RR RDLEN (currently "
-                      << impl_ptr->rdlength_ << ").");
+                      << impl_->rdlength_ << ").");
         }
 
         if (rdata_len < option_length) {
@@ -765,12 +753,10 @@ OPT::OPT(InputBuffer& buffer, size_t rdata_len) :
         boost::shared_ptr<std::vector<uint8_t> >
             option_data(new std::vector<uint8_t>(option_length));
         buffer.readData(&(*option_data)[0], option_length);
-        impl_ptr->pseudo_rrs_.push_back(PseudoRR(option_code, option_data));
-        impl_ptr->rdlength_ += option_length;
+        impl_->pseudo_rrs_.push_back(PseudoRR(option_code, option_data));
+        impl_->rdlength_ += option_length;
         rdata_len -= option_length;
     }
-
-    impl_ = impl_ptr;
 }
 
 OPT::OPT(const OPT& other) :
@@ -983,7 +969,7 @@ struct RRSIGImpl {
 };
 
 // helper function for string and lexer constructors
-boost::shared_ptr<RRSIGImpl>
+std::unique_ptr<RRSIGImpl>
 RRSIG::constructFromLexer(MasterLexer& lexer, const Name* origin) {
     const RRType covered(lexer.getNextToken(MasterToken::STRING).getString());
     const uint32_t algorithm =
@@ -1030,9 +1016,9 @@ RRSIG::constructFromLexer(MasterLexer& lexer, const Name* origin) {
         decodeBase64(signature_txt, signature);
     }
 
-    return (boost::shared_ptr<RRSIGImpl>(new RRSIGImpl(covered, algorithm, labels,
-                                                       originalttl, timeexpire, timeinception,
-                                                       static_cast<uint16_t>(tag), signer, signature)));
+    return (std::unique_ptr<RRSIGImpl>(new RRSIGImpl(covered, algorithm, labels,
+                                                     originalttl, timeexpire, timeinception,
+                                                     static_cast<uint16_t>(tag), signer, signature)));
 }
 
 /// \brief Constructor from string.
@@ -1051,8 +1037,7 @@ RRSIG::constructFromLexer(MasterLexer& lexer, const Name* origin) {
 ///
 /// \throw Others Exception from the Name constructor.
 /// \throw InvalidRdataText Other general syntax errors.
-RRSIG::RRSIG(const std::string& rrsig_str) :
-    impl_(NULL) {
+RRSIG::RRSIG(const std::string& rrsig_str) {
     // We use unique_ptr here because if there is an exception in this
     // constructor, the destructor is not called and there could be a
     // leak of the RRSIGImpl that constructFromLexer() returns.
@@ -1063,7 +1048,7 @@ RRSIG::RRSIG(const std::string& rrsig_str) :
         MasterLexer lexer;
         lexer.pushSource(iss);
 
-        impl_ptr = constructFromLexer(lexer, NULL);
+        impl_ = constructFromLexer(lexer, NULL);
 
         if (lexer.getNextToken().getType() != MasterToken::END_OF_FILE) {
             isc_throw(InvalidRdataText, "extra input text for RRSIG: "
@@ -1073,8 +1058,6 @@ RRSIG::RRSIG(const std::string& rrsig_str) :
         isc_throw(InvalidRdataText, "Failed to construct RRSIG from '" <<
                   rrsig_str << "': " << ex.what());
     }
-
-    impl_ = impl_ptr;
 }
 
 /// \brief Constructor with a context of MasterLexer.
@@ -1483,7 +1466,7 @@ struct TKEYImpl {
 };
 
 // helper function for string and lexer constructors
-boost::shared_ptr<TKEYImpl>
+std::unique_ptr<TKEYImpl>
 TKEY::constructFromLexer(MasterLexer& lexer, const Name* origin) {
     const Name& algorithm =
         createNameFromLexer(lexer, origin ? origin : &Name::ROOT_NAME());
@@ -1578,9 +1561,9 @@ TKEY::constructFromLexer(MasterLexer& lexer, const Name* origin) {
     // RFC2845 says Other Data is "empty unless Error == BADTIME".
     // However, we don't enforce that.
 
-    return (boost::shared_ptr<TKEYImpl>(new TKEYImpl(algorithm, inception,
-                                                     expire, mode, error,
-                                                     key_data, other_data)));
+    return (std::unique_ptr<TKEYImpl>(new TKEYImpl(algorithm, inception,
+                                                   expire, mode, error,
+                                                   key_data, other_data)));
 }
 
 /// \brief Constructor from string.
@@ -1635,18 +1618,14 @@ TKEY::constructFromLexer(MasterLexer& lexer, const Name* origin) {
 /// in base-64.
 ///
 /// \param tkey_str A string containing the RDATA to be created
-TKEY::TKEY(const std::string& tkey_str) : impl_(0) {
-    // We use unique_ptr here because if there is an exception in this
-    // constructor, the destructor is not called and there could be a
-    // leak of the TKEYImpl that constructFromLexer() returns.
-    boost::shared_ptr<TKEYImpl> impl_ptr;
+TKEY::TKEY(const std::string& tkey_str) {
 
     try {
         std::istringstream ss(tkey_str);
         MasterLexer lexer;
         lexer.pushSource(ss);
 
-        impl_ptr = constructFromLexer(lexer, 0);
+        impl_ = constructFromLexer(lexer, 0);
 
         if (lexer.getNextToken().getType() != MasterToken::END_OF_FILE) {
             isc_throw(InvalidRdataText,
@@ -1657,8 +1636,6 @@ TKEY::TKEY(const std::string& tkey_str) : impl_(0) {
                   "Failed to construct TKEY from '" << tkey_str << "': "
                   << ex.what());
     }
-
-    impl_ = impl_ptr;
 }
 
 /// \brief Constructor with a context of MasterLexer.
@@ -1701,8 +1678,7 @@ TKEY::TKEY(MasterLexer& lexer, const Name* origin,
 /// But this constructor does not use this parameter; if necessary, the caller
 /// must check consistency between the length parameter and the actual
 /// RDATA length.
-TKEY::TKEY(InputBuffer& buffer, size_t) :
-    impl_(0) {
+TKEY::TKEY(InputBuffer& buffer, size_t) {
     Name algorithm(buffer);
 
     const uint32_t inception = buffer.readUint32();
@@ -1731,8 +1707,7 @@ TKEY::TKEY(InputBuffer& buffer, size_t) :
 
 TKEY::TKEY(const Name& algorithm, uint32_t inception, uint32_t expire,
            uint16_t mode, uint16_t error, uint16_t key_len,
-           const void* key, uint16_t other_len, const void* other_data) :
-    impl_(0) {
+           const void* key, uint16_t other_len, const void* other_data) {
     if ((key_len == 0 && key != 0) || (key_len > 0 && key == 0)) {
         isc_throw(InvalidParameter, "TKEY Key length and data inconsistent");
     }
index 25eaab8bc0a6624fa77b28f90d93a9c3544a0275..9e219eed8140e95ab2222cd9be950820a39bb4cf 100644 (file)
 #include <dns/serial.h>
 #include <util/buffer.h>
 
+#include <boost/shared_ptr.hpp>
+
+#include <memory>
 #include <stdint.h>
 #include <string>
 #include <vector>
-#include <boost/shared_ptr.hpp>
 
 namespace isc {
 namespace dns {
@@ -153,9 +155,9 @@ public:
     /// This method never throws an exception.
     const void* getOtherData() const;
 private:
-    boost::shared_ptr<TSIGImpl> constructFromLexer(MasterLexer& lexer, const Name* origin);
+    std::unique_ptr<TSIGImpl> constructFromLexer(MasterLexer& lexer, const Name* origin);
 
-    boost::shared_ptr<TSIGImpl> impl_;
+    std::unique_ptr<TSIGImpl> impl_;
 };
 
 } // end of namespace "any"
@@ -263,7 +265,7 @@ public:
 
     private:
         uint16_t code_;
-        boost::shared_ptr<std::vector<uint8_t> > data_;
+        boost::shared_ptr<std::vector<uint8_t>> data_;
     };
 
     /// \brief Append a pseudo RR (option) in this OPT RR.
@@ -285,7 +287,7 @@ public:
     const std::vector<PseudoRR>& getPseudoRRs() const;
 
 private:
-    boost::shared_ptr<OPTImpl> impl_;
+    std::unique_ptr<OPTImpl> impl_;
 };
 
 class PTR : public Rdata {
@@ -342,9 +344,9 @@ public:
     const RRType& typeCovered() const;
 private:
     // helper function for string and lexer constructors
-    boost::shared_ptr<RRSIGImpl> constructFromLexer(MasterLexer& lexer, const Name* origin);
+    std::unique_ptr<RRSIGImpl> constructFromLexer(MasterLexer& lexer, const Name* origin);
 
-    boost::shared_ptr<RRSIGImpl> impl_;
+    std::unique_ptr<RRSIGImpl> impl_;
 };
 
 class SOA : public Rdata {
@@ -494,9 +496,9 @@ public:
     static const uint16_t GSS_API_MODE;
 
 private:
-    boost::shared_ptr<TKEYImpl> constructFromLexer(MasterLexer& lexer, const Name* origin);
+    std::unique_ptr<TKEYImpl> constructFromLexer(MasterLexer& lexer, const Name* origin);
 
-    boost::shared_ptr<TKEYImpl> impl_;
+    std::unique_ptr<TKEYImpl> impl_;
 };
 
 class TXT : public Rdata {
@@ -517,7 +519,7 @@ public:
 
 private:
     typedef isc::dns::rdata::generic::detail::TXTLikeImpl<TXT, 16> TXTImpl;
-    boost::shared_ptr<TXTImpl> impl_;
+    std::unique_ptr<TXTImpl> impl_;
 };
 } // namespace generic
 
index 612878b52255b3ce9b3395d33b1db5decbf2b5ef..f047188e9f0f7e93311b6096880e4c60f72c167c 100644 (file)
@@ -213,7 +213,90 @@ RRParamRegistry::RRParamRegistry() : impl_(new RRParamRegistryImpl()) {
         add("OPT", 41, RdataFactoryPtr(new RdataFactory<generic::OPT>()));
         add("RRSIG", 46, RdataFactoryPtr(new RdataFactory<generic::RRSIG>()));
         add("TKEY", 249, RdataFactoryPtr(new RdataFactory<generic::TKEY>()));
-        addType("ANY", 255);
+        // Meta and non-implemented RR types
+        addType("MD", 3);
+        addType("MF", 4);
+        addType("CNAME", 5);
+        addType("MB", 7);
+        addType("MG", 8);
+        addType("MR", 9);
+        addType("NULL", 10);
+        addType("WKS", 11);
+        addType("HINFO", 13);
+        addType("MINFO", 14);
+        addType("MX", 15);
+        addType("RP", 17);
+        addType("AFSDB", 18);
+        addType("X25", 19);
+        addType("ISDN", 20);
+        addType("RT", 21);
+        addType("NSAP", 22);
+        addType("NSAP-PTR", 23);
+        addType("SIG", 24);
+        addType("KEY", 25);
+        addType("PX", 26);
+        addType("GPOS", 27);
+        addType("LOC", 29);
+        addType("NXT", 30);
+        addType("EID", 31);
+        addType("NIMLOC", 32);
+        addType("SRV", 33);
+        addType("ATMA", 34);
+        addType("NAPTR", 35);
+        addType("KX", 36);
+        addType("CERT", 37);
+        addType("A6", 38);
+        addType("DNAME", 39);
+        addType("SINK", 40);
+        addType("APL", 42);
+        addType("DS", 43);
+        addType("SSHFP", 44);
+        addType("IPSECKEY", 45);
+        addType("NSEC", 47);
+        addType("DNSKEY", 48);
+        addType("NSEC3", 50);
+        addType("NSEC3PARAM", 51);
+        addType("TLSA", 52);
+        addType("SMIMEA", 53);
+        // Unassigned  54
+        addType("HIP", 55);
+        addType("NINFO", 56);
+        addType("RKEY", 57);
+        addType("TALINK", 58);
+        addType("CDS", 59);
+        addType("CDNSKEY", 60);
+        addType("OPENPGPKEY", 61);
+        addType("CSYNC", 62 );
+        addType("ZONEMD", 63);
+        addType("SVCB", 64);
+        addType("HTTPS", 65);
+        // Unassigned  66-98
+        addType("SPF", 99);
+        addType("UINFO", 100);
+        addType("UID", 101);
+        addType("GID", 102);
+        addType("UNSPEC", 103);
+        addType("NID", 104);
+        addType("L32", 105);
+        addType("L64", 106);
+        addType("LP", 107);
+        addType("EUI48", 108);
+        addType("EUI64", 109);
+        // Unassigned  110-248
+        addType("IXFR", 251);
+        addType("AXFR",  252);
+        addType("MAILB", 253);
+        addType("MAILA", 254);
+        addType("ANY", 255); // also known as "*"
+        addType("URI", 256);
+        addType("CAA", 257);
+        addType("AVC", 258);
+        addType("DOA", 259);
+        addType("AMTRELAY", 260);
+        addType("RESINFO", 261);
+        // Unassigned  262-32767
+        addType("TA", 32768);
+        addType("DLV", 32769);
         // Meta classes
         addClass("CH", 3);
         addClass("NONE", 254);