diff options
author | Francis Dupont <fdupont@isc.org> | 2019-07-02 12:40:50 +0200 |
---|---|---|
committer | Francis Dupont <fdupont@isc.org> | 2019-07-02 17:33:39 +0200 |
commit | f45511f0445cd4204671771175f7f0d34df54b0e (patch) | |
tree | 516fd7da32bc79550b0f276f34c1616be7a3187a | |
parent | [550-authentication-key-to-text-method-miss-spelled] AuthKey is binary (diff) | |
download | kea-f45511f0445cd4204671771175f7f0d34df54b0e.tar.xz kea-f45511f0445cd4204671771175f7f0d34df54b0e.zip |
[550-authentication-key-to-text-method-miss-spelled] Addressed comments
-rw-r--r-- | src/lib/dhcpsrv/cql_host_data_source.cc | 32 | ||||
-rw-r--r-- | src/lib/dhcpsrv/host.cc | 7 | ||||
-rw-r--r-- | src/lib/dhcpsrv/host.h | 55 | ||||
-rw-r--r-- | src/lib/dhcpsrv/mysql_host_data_source.cc | 41 |
4 files changed, 61 insertions, 74 deletions
diff --git a/src/lib/dhcpsrv/cql_host_data_source.cc b/src/lib/dhcpsrv/cql_host_data_source.cc index 79d123e09e..34f6d3e272 100644 --- a/src/lib/dhcpsrv/cql_host_data_source.cc +++ b/src/lib/dhcpsrv/cql_host_data_source.cc @@ -85,24 +85,6 @@ struct OptionWrapper { std::string option_space_; }; -/// @brief Maximum length of classes stored in a host_ipv4/6_client_classes -/// column. -static constexpr size_t CLIENT_CLASSES_MAX_LENGTH = 255u; - -/// @brief Maximum length of the hostname stored in DNS. This length is -/// restricted by the length of the domain-name carried in the Client FQDN -/// Option (see RFC4702 and RFC4704). -static constexpr size_t HOSTNAME_MAX_LENGTH = 255u; - -/// @brief Maximum length of option value -static constexpr size_t OPTION_VALUE_MAX_LENGTH = 4096u; - -/// @brief Maximum length of option value specified in textual format -static constexpr size_t OPTION_FORMATTED_VALUE_MAX_LENGTH = 8192u; - -/// @brief Maximum length of option space name -static constexpr size_t OPTION_SPACE_MAX_LENGTH = 128u; - /// @brief Numeric value representing the last supported identifier. This value /// is used to validate whether the identifier type stored in a database is /// within bounds of supported identifiers. @@ -1377,10 +1359,10 @@ CqlHostExchange::prepareExchange(const HostPtr& host, // hostname: text hostname_ = host->getHostname(); - if (hostname_.size() > HOSTNAME_MAX_LENGTH) { + if (hostname_.size() > HOSTNAME_MAX_LEN) { isc_throw(BadValue, "CqlHostExchange::prepareExchange(): hostname " << hostname_ << " of length " << hostname_.size() - << " is greater than allowed of " << HOSTNAME_MAX_LENGTH); + << " is greater than allowed of " << HOSTNAME_MAX_LEN); } // user_context: text @@ -1393,20 +1375,20 @@ CqlHostExchange::prepareExchange(const HostPtr& host, // host_ipv4_client_classes: text host_ipv4_client_classes_ = host->getClientClasses4().toText(","); - if (host_ipv4_client_classes_.size() > CLIENT_CLASSES_MAX_LENGTH) { + if (host_ipv4_client_classes_.size() > CLIENT_CLASSES_MAX_LEN) { isc_throw(BadValue, "CqlHostExchange::prepareExchange(): " "IPv4 client classes " << host_ipv4_client_classes_ << " of length " << host_ipv4_client_classes_.size() << " is greater than allowed of " - << CLIENT_CLASSES_MAX_LENGTH); + << CLIENT_CLASSES_MAX_LEN); } // host_ipv6_client_classes: text host_ipv6_client_classes_ = host->getClientClasses6().toText(","); - if (host_ipv6_client_classes_.size() > CLIENT_CLASSES_MAX_LENGTH) { + if (host_ipv6_client_classes_.size() > CLIENT_CLASSES_MAX_LEN) { isc_throw(BadValue, "CqlHostExchange::prepareExchange(): " "IPv6 client classes " << host_ipv6_client_classes_ << " of length " << host_ipv6_client_classes_.size() << " is greater than allowed of " - << CLIENT_CLASSES_MAX_LENGTH); + << CLIENT_CLASSES_MAX_LEN); } if (reservation == NULL) { @@ -1613,7 +1595,7 @@ CqlHostExchange::hashIntoId() const { key_stream << std::setw(4) << std::setfill('-') << reserved_ipv6_prefix_length_; key_stream << std::setw(4) << std::setfill('-') << option_code_; - key_stream << std::setw(OPTION_SPACE_MAX_LENGTH) << std::setfill('-') + key_stream << std::setw(OPTION_SPACE_MAX_LEN) << std::setfill('-') << option_space_; const std::string key = key_stream.str(); diff --git a/src/lib/dhcpsrv/host.cc b/src/lib/dhcpsrv/host.cc index 5ffb873cce..cb5659b94f 100644 --- a/src/lib/dhcpsrv/host.cc +++ b/src/lib/dhcpsrv/host.cc @@ -36,7 +36,7 @@ AuthKey::AuthKey() { std::vector<uint8_t> AuthKey::getRandomKeyString() { - return (isc::cryptolink::random(AuthKey::KEY_LEN)); + return (isc::cryptolink::random(AUTH_KEY_LEN)); } std::string @@ -50,8 +50,8 @@ AuthKey::toText() const { void AuthKey::setAuthKey(const std::vector<uint8_t>& key) { authKey_ = key; - if (authKey_.size() > AuthKey::KEY_LEN) { - authKey_.resize(AuthKey::KEY_LEN); + if (authKey_.size() > AUTH_KEY_LEN) { + authKey_.resize(AUTH_KEY_LEN); } } @@ -59,6 +59,7 @@ void AuthKey::setAuthKey(const std::string& key) { if (key.empty()) { authKey_.clear(); + return; } try { std::vector<uint8_t> bin; diff --git a/src/lib/dhcpsrv/host.h b/src/lib/dhcpsrv/host.h index 7b6bf976b6..8c81ca8a5c 100644 --- a/src/lib/dhcpsrv/host.h +++ b/src/lib/dhcpsrv/host.h @@ -24,18 +24,55 @@ namespace isc { namespace dhcp { +/// @brief Maximum size of an IPv6 address represented as a text string. +/// +/// This is 32 hexadecimal characters written in 8 groups of four, plus seven +/// colon separators. +const size_t ADDRESS6_TEXT_MAX_LEN = 39; + +/// @brief Maximum length of classes stored in a dhcp4/6_client_classes +/// columns. +const size_t CLIENT_CLASSES_MAX_LEN = 255; + +/// @brief Maximum length of the hostname stored in DNS. +/// +/// This length is restricted by the length of the domain-name carried +/// in the Client FQDN %Option (see RFC4702 and RFC4704). +const size_t HOSTNAME_MAX_LEN = 255; + +/// @brief Maximum length of option value. +const size_t OPTION_VALUE_MAX_LEN = 4096; + +/// @brief Maximum length of option value specified in textual format. +const size_t OPTION_FORMATTED_VALUE_MAX_LEN = 8192; + +/// @brief Maximum length of option space name. +const size_t OPTION_SPACE_MAX_LEN = 128; + +/// @brief Maximum length of user context. +const size_t USER_CONTEXT_MAX_LEN = 8192; + +/// @brief Maximum length of the server hostname. +const size_t SERVER_HOSTNAME_MAX_LEN = 64; + +/// @brief Maximum length of the boot file name. +const size_t BOOT_FILE_NAME_MAX_LEN = 128; + +/// @brief Maximum length of authentication keys - 128 bits. +const uint8_t AUTH_KEY_LEN = 16; + +/// @brief Maximum length of authentication keys (coded in hexadecimal). +const size_t TEXT_AUTH_KEY_LEN = AUTH_KEY_LEN * 2; + /// @brief HostID (used only when storing in MySQL, PostgreSQL or Cassandra) typedef uint64_t HostID; /// @brief Authentication keys. /// /// This class represents authentication keys to be used for -/// calculating HMAC in the authentication field of the recofigure message. +/// calculating HMAC in the authentication field of the reconfigure message. class AuthKey { public: - /// @brief Length of the key - 128 bits. - const static uint8_t KEY_LEN = 16; - /// @brief Constructor. /// /// Constructor for assigning auth keys in host reservation. @@ -46,7 +83,10 @@ public: /// @brief Constructor. /// /// Constructor for assigning auth keys in host reservation. - /// Ensures the key length is not greater than 16 bytes. + /// Ensures the key length is not greater than AUTH_KEY_LEN (16) bytes + /// so TEXT_AUTH_KEY_LEN (32) hexadecimal digits. + /// See @c setKey for constraints on its input format. + /// /// @param key auth key in hexadecimal to be stored. AuthKey(const std::string& key); @@ -76,7 +116,8 @@ public: /// Set the key value. /// If the size is greater than 16 bytes, we resize to 16 bytes. /// @param key auth key in hexadecimal to be stored. - /// @throw BadValue if the string is not a valid hexadecimal encoding. + /// @throw BadValue if the string is not a valid hexadecimal encoding, + /// for instance has a not hexadecimal or odd number of digits. void setAuthKey(const std::string& key); /// @brief Return auth key. @@ -88,7 +129,7 @@ public: /// @brief Return text format for keys. /// - /// @return auth key in hexadecimal. + /// @return auth key as a string of hexadecimal digits. std::string toText() const; /// diff --git a/src/lib/dhcpsrv/mysql_host_data_source.cc b/src/lib/dhcpsrv/mysql_host_data_source.cc index b11baaef23..6e4b79f994 100644 --- a/src/lib/dhcpsrv/mysql_host_data_source.cc +++ b/src/lib/dhcpsrv/mysql_host_data_source.cc @@ -39,43 +39,6 @@ using namespace std; namespace { -/// @brief Maximum size of an IPv6 address represented as a text string. -/// -/// This is 32 hexadecimal characters written in 8 groups of four, plus seven -/// colon separators. -const size_t ADDRESS6_TEXT_MAX_LEN = 39; - -/// @brief Maximum length of classes stored in a dhcp4/6_client_classes -/// columns. -const size_t CLIENT_CLASSES_MAX_LEN = 255; - -/// @brief Maximum length of the hostname stored in DNS. -/// -/// This length is restricted by the length of the domain-name carried -/// in the Client FQDN %Option (see RFC4702 and RFC4704). -const size_t HOSTNAME_MAX_LEN = 255; - -/// @brief Maximum length of option value. -const size_t OPTION_VALUE_MAX_LEN = 4096; - -/// @brief Maximum length of option value specified in textual format. -const size_t OPTION_FORMATTED_VALUE_MAX_LEN = 8192; - -/// @brief Maximum length of option space name. -const size_t OPTION_SPACE_MAX_LEN = 128; - -/// @brief Maximum length of user context. -const size_t USER_CONTEXT_MAX_LEN = 8192; - -/// @brief Maximum length of the server hostname. -const size_t SERVER_HOSTNAME_MAX_LEN = 64; - -/// @brief Maximum length of the boot file name. -const size_t BOOT_FILE_NAME_MAX_LEN = 128; - -/// @brief Maximum length of keys (coded in hexadecimal). -const size_t KEY_LEN = 16 * 2; - /// @brief Numeric value representing last supported identifier. /// /// This value is used to validate whether the identifier type stored in @@ -407,7 +370,7 @@ public: // auth key bind_[13].buffer_type = MYSQL_TYPE_STRING; std::string auth_key = host->getKey().toText(); - std::strncpy(auth_key_, auth_key.c_str(), KEY_LEN); + std::strncpy(auth_key_, auth_key.c_str(), TEXT_AUTH_KEY_LEN); auth_key_null_ = auth_key.empty() ? MLM_TRUE : MLM_FALSE; bind_[13].buffer = auth_key_; bind_[13].buffer_length = auth_key.length(); @@ -800,7 +763,7 @@ private: unsigned long dhcp4_boot_file_name_length_; /// Authentication keys - char auth_key_[KEY_LEN]; + char auth_key_[TEXT_AUTH_KEY_LEN]; /// The length of the string for holding keys unsigned long auth_key_length_; |