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)
{
auto invalid_char = [](char ch) {
bool valid = std::isalnum(ch) || ch == '_' || ch == '.';
bool valid = std::isalnum(ch) || ch == '_' || ch == '.' || ch == '-';
return !valid;
};
bool ret = std::none_of(begin(hn), end(hn), invalid_char)
&& hn.front() != '_'
&& (hn.length() <= 253 && hn.length() > 0);
&& hn.front() != '-'
&& (hn.length() <= 253 && hn.length() > 0)
&& hn.find("--") == std::string::npos;
return ret;
}