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:
parent
f25c4e07bc
commit
bbcfad7953
2 changed files with 39 additions and 4 deletions
|
@ -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;
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in a new issue