Commit 9a045959 authored by Mukund Sivaraman's avatar Mukund Sivaraman
Browse files

[2387] Move text about missing key data to the constructor API doc

parent 82fc64bf
...@@ -63,7 +63,10 @@ struct DNSKEYImpl { ...@@ -63,7 +63,10 @@ struct DNSKEYImpl {
/// The Protocol and Algorithm fields must be within their valid /// The Protocol and Algorithm fields must be within their valid
/// ranges. The Public Key field must be present and must contain a /// ranges. The Public Key field must be present and must contain a
/// Base64 encoding of the public key. Whitespace is allowed within the /// Base64 encoding of the public key. Whitespace is allowed within the
/// Base64 text. /// Base64 text. It is okay for the key data to be missing. BIND 9 seems
/// to accept such cases. What we should do could be debatable, but
/// since this field is algorithm dependent and our implementation
/// doesn't reject unknown algorithms, we are lenient here.
/// ///
/// \throw InvalidRdataText if any fields are out of their valid range, /// \throw InvalidRdataText if any fields are out of their valid range,
/// or are incorrect. /// or are incorrect.
...@@ -97,6 +100,15 @@ DNSKEY::DNSKEY(const std::string& dnskey_str) : ...@@ -97,6 +100,15 @@ DNSKEY::DNSKEY(const std::string& dnskey_str) :
impl_ = impl_ptr.release(); impl_ = impl_ptr.release();
} }
/// \brief Constructor from InputBuffer.
///
/// The passed buffer must contain a valid DNSKEY RDATA.
///
/// The Protocol and Algorithm fields are not checked for unknown
/// values. It is okay for the key data to be missing. BIND 9 seems to
/// accept such cases. What we should do could be debatable, but since
/// this field is algorithm dependent and our implementation doesn't
/// reject unknown algorithms, we are lenient here.
DNSKEY::DNSKEY(InputBuffer& buffer, size_t rdata_len) : DNSKEY::DNSKEY(InputBuffer& buffer, size_t rdata_len) :
impl_(NULL) impl_(NULL)
{ {
...@@ -111,10 +123,8 @@ DNSKEY::DNSKEY(InputBuffer& buffer, size_t rdata_len) : ...@@ -111,10 +123,8 @@ DNSKEY::DNSKEY(InputBuffer& buffer, size_t rdata_len) :
rdata_len -= 4; rdata_len -= 4;
vector<uint8_t> keydata; vector<uint8_t> keydata;
// If key data is missing, it's OK. BIND 9 seems to accept such // If key data is missing, it's OK. See the API documentation of the
// cases. What we should do could be debatable, but since this field // constructor.
// is algorithm dependent and our implementation doesn't reject
// unknown algorithms, we are lenient here.
if (rdata_len > 0) { if (rdata_len > 0) {
keydata.resize(rdata_len); keydata.resize(rdata_len);
buffer.readData(&keydata[0], rdata_len); buffer.readData(&keydata[0], rdata_len);
...@@ -187,10 +197,8 @@ DNSKEY::constructFromLexer(MasterLexer& lexer) { ...@@ -187,10 +197,8 @@ DNSKEY::constructFromLexer(MasterLexer& lexer) {
lexer.ungetToken(); lexer.ungetToken();
vector<uint8_t> keydata; vector<uint8_t> keydata;
// If key data is missing, it's OK. BIND 9 seems to accept such // If key data is missing, it's OK. See the API documentation of the
// cases. What we should do could be debatable, but since this field // constructor.
// is algorithm dependent and our implementation doesn't reject
// unknown algorithms, we are lenient here.
if (keydata_str.size() > 0) { if (keydata_str.size() > 0) {
decodeBase64(keydata_str, keydata); decodeBase64(keydata_str, keydata);
} }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment