diff options
Diffstat (limited to 'src/lib/dns/rdata/generic/sshfp_44.cc')
-rw-r--r-- | src/lib/dns/rdata/generic/sshfp_44.cc | 30 |
1 files changed, 17 insertions, 13 deletions
diff --git a/src/lib/dns/rdata/generic/sshfp_44.cc b/src/lib/dns/rdata/generic/sshfp_44.cc index 2865ed18c8..4c1e83274a 100644 --- a/src/lib/dns/rdata/generic/sshfp_44.cc +++ b/src/lib/dns/rdata/generic/sshfp_44.cc @@ -14,8 +14,6 @@ #include <config.h> -#include <string> - #include <boost/lexical_cast.hpp> #include <exceptions/exceptions.h> @@ -38,7 +36,7 @@ using namespace isc::util::encode; struct SSHFPImpl { // straightforward representation of SSHFP RDATA fields SSHFPImpl(uint8_t algorithm, uint8_t fingerprint_type, - vector<uint8_t>& fingerprint) : + const vector<uint8_t>& fingerprint) : algorithm_(algorithm), fingerprint_type_(fingerprint_type), fingerprint_(fingerprint) @@ -82,7 +80,11 @@ SSHFP::constructFromLexer(MasterLexer& lexer) { // If fingerprint is missing, it's OK. See the API documentation of the // constructor. if (fingerprint_str.size() > 0) { - decodeHex(fingerprint_str, fingerprint); + try { + decodeHex(fingerprint_str, fingerprint); + } catch (const isc::BadValue& e) { + isc_throw(InvalidRdataText, "Bad SSHFP fingerprint: " << e.what()); + } } return (new SSHFPImpl(algorithm, fingerprint_type, fingerprint)); @@ -102,8 +104,9 @@ SSHFP::constructFromLexer(MasterLexer& lexer) { /// valid hex encoding of the fingerprint. For compatibility with BIND 9, /// whitespace is allowed in the hex text (RFC4255 is silent on the matter). /// -/// \throw InvalidRdataText if any fields are missing, out of their valid -/// ranges, or incorrect. +/// \throw InvalidRdataText if any fields are missing, are out of their +/// valid ranges or are incorrect, or if the fingerprint is not a valid +/// hex string. /// /// \param sshfp_str A string containing the RDATA to be created SSHFP::SSHFP(const string& sshfp_str) : @@ -128,9 +131,6 @@ SSHFP::SSHFP(const string& sshfp_str) : } catch (const MasterLexer::LexerError& ex) { isc_throw(InvalidRdataText, "Failed to construct SSHFP from '" << sshfp_str << "': " << ex.what()); - } catch (const isc::BadValue& e) { - isc_throw(InvalidRdataText, - "Bad SSHFP fingerprint: " << e.what()); } impl_ = impl_ptr.release(); @@ -142,9 +142,8 @@ SSHFP::SSHFP(const string& sshfp_str) : /// of an SSHFP RDATA. /// /// \throw MasterLexer::LexerError General parsing error such as missing field. -/// \throw InvalidRdataText Fields are out of their valid range, or are -/// incorrect. -/// \throw BadValue Fingerprint is not a valid hex string. +/// \throw InvalidRdataText Fields are out of their valid range or are +/// incorrect, or if the fingerprint is not a valid hex string. /// /// \param lexer A \c MasterLexer object parsing a master file for the /// RDATA to be created @@ -293,8 +292,13 @@ SSHFP::getFingerprintType() const { return (impl_->fingerprint_type_); } +const std::vector<uint8_t>& +SSHFP::getFingerprint() const { + return (impl_->fingerprint_); +} + size_t -SSHFP::getFingerprintLen() const { +SSHFP::getFingerprintLength() const { return (impl_->fingerprint_.size()); } |