modules/luci-base: Fix ipaddrport validator to support ipv6

The previous versiono of ipaddrport validator only worked for ipv4
due to disallowing colons (:) in ip address which obvious fails for
ipv6.  We now instead allow either ipv4 address or an ipv6 address of
the form [<ipv6address>]:port
This commit is contained in:
Daniel Dickinson 2015-12-14 07:38:31 -05:00
parent f25c4e07bc
commit bbcfad7953
2 changed files with 39 additions and 4 deletions

View file

@ -172,17 +172,38 @@ var cbi_validators = {
return false;
},
'ipaddrport': function()
'ip4addrport': function()
{
var hp = this.split(/:/);
if (hp.length == 2)
return (cbi_validators.ipaddr.apply(hp[0]) &&
cbi_validators.port.apply(hp[1]));
return false;
},
'ipaddrport': function(bracket)
{
if (this.match(/^([^\[\]:]+):([^:]+)$/)) {
var addr = RegExp.$1
var port = RegExp.$2
return (cbi_validators.ip4addr.apply(addr) &&
cbi_validators.port.apply(port));
} else if ((bracket == 1) && (this.match(/^\[(.+)\]:([^:]+)$/))) {
var addr = RegExp.$1
var port = RegExp.$2
return (cbi_validators.ip6addr.apply(addr) &&
cbi_validators.port.apply(port));
} else if ((bracket != 1) && (this.match(/^([^\[\]]+):([^:]+)$/))) {
var addr = RegExp.$1
var port = RegExp.$2
return (cbi_validators.ip6addr.apply(addr) &&
cbi_validators.port.apply(port));
} else {
return false;
}
},
'wpakey': function()
{
var v = this;

View file

@ -189,9 +189,23 @@ function hostport(val)
return not not (h and p and host(h) and port(p))
end
function ipaddrport(val)
function ip4addrport(val)
local h, p = val:match("^([^:]+):([^:]+)$")
return not not (h and p and ipaddr(h) and port(p))
return (h and p and ip4addr(h) and port(p))
end
function ipaddrport(val, bracket)
local h, p = val:match("^([^%[%]:]+):([^:]+)$")
if (h and p and ip4addr(h) and port(p)) then
return true
elseif (bracket == 1) then
h, p = val:match("^(%[.+%]):([^:]+)$")
if (h and p and ip6addr(h) and port(p)) then
return true
end
end
h, p = val:match("^([^%[%]]+):([^:]+)$")
return (h and p and ip6addr(h) and port(p))
end
function wpakey(val)