MXS-3326 Fix hostname validation

A hyphen '-' is a valid character in a domain name, as long as it
is not the first character and does not appear two in a row.
This commit is contained in:
Johan Wikman
2020-12-08 15:30:47 +02:00
parent d20ea5265f
commit 072661e26b

View File

@ -52,13 +52,15 @@ bool is_valid_ipv6(const std::string& ip)
bool is_valid_hostname(const std::string& hn) bool is_valid_hostname(const std::string& hn)
{ {
auto invalid_char = [](char ch) { auto invalid_char = [](char ch) {
bool valid = std::isalnum(ch) || ch == '_' || ch == '.'; bool valid = std::isalnum(ch) || ch == '_' || ch == '.' || ch == '-';
return !valid; return !valid;
}; };
bool ret = std::none_of(begin(hn), end(hn), invalid_char) bool ret = std::none_of(begin(hn), end(hn), invalid_char)
&& hn.front() != '_' && hn.front() != '_'
&& (hn.length() <= 253 && hn.length() > 0); && hn.front() != '-'
&& (hn.length() <= 253 && hn.length() > 0)
&& hn.find("--") == std::string::npos;
return ret; return ret;
} }