luci-base: add a strict flag to the hostname validator

Some applications, e.g. dnsmasq, do not allow hostnames starting with an
underscore, therefor extend the existing hostname datatype validator with
a `strict` which disallows a leading underscore.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
This commit is contained in:
Jo-Philipp Wich 2018-03-22 09:49:52 +01:00
parent 4024d4f224
commit 70ffbe65a0
2 changed files with 6 additions and 5 deletions

View file

@ -218,12 +218,13 @@ var cbi_validators = {
((ipv4only == 1) && cbi_validators.ip4addr.apply(this)); ((ipv4only == 1) && cbi_validators.ip4addr.apply(this));
}, },
'hostname': function() 'hostname': function(strict)
{ {
if (this.length <= 253) if (this.length <= 253)
return (this.match(/^[a-zA-Z0-9]+$/) != null || return (this.match(/^[a-zA-Z0-9_]+$/) != null ||
(this.match(/^[a-zA-Z0-9_][a-zA-Z0-9_\-.]*[a-zA-Z0-9]$/) && (this.match(/^[a-zA-Z0-9_][a-zA-Z0-9_\-.]*[a-zA-Z0-9]$/) &&
this.match(/[^0-9.]/))); this.match(/[^0-9.]/))) &&
(!strict || !this.match(/^_/));
return false; return false;
}, },

View file

@ -199,13 +199,13 @@ function macaddr(val)
return ip.checkmac(val) and true or false return ip.checkmac(val) and true or false
end end
function hostname(val) function hostname(val, strict)
if val and (#val < 254) and ( if val and (#val < 254) and (
val:match("^[a-zA-Z_]+$") or val:match("^[a-zA-Z_]+$") or
(val:match("^[a-zA-Z0-9_][a-zA-Z0-9_%-%.]*[a-zA-Z0-9]$") and (val:match("^[a-zA-Z0-9_][a-zA-Z0-9_%-%.]*[a-zA-Z0-9]$") and
val:match("[^0-9%.]")) val:match("[^0-9%.]"))
) then ) then
return true return (not strict or not val:match("^_"))
end end
return false return false
end end