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;
|
return false;
|
||||||
},
|
},
|
||||||
|
|
||||||
'ipaddrport': function()
|
'ip4addrport': function()
|
||||||
{
|
{
|
||||||
var hp = this.split(/:/);
|
var hp = this.split(/:/);
|
||||||
|
|
||||||
if (hp.length == 2)
|
if (hp.length == 2)
|
||||||
return (cbi_validators.ipaddr.apply(hp[0]) &&
|
return (cbi_validators.ipaddr.apply(hp[0]) &&
|
||||||
cbi_validators.port.apply(hp[1]));
|
cbi_validators.port.apply(hp[1]));
|
||||||
|
|
||||||
return false;
|
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()
|
'wpakey': function()
|
||||||
{
|
{
|
||||||
var v = this;
|
var v = this;
|
||||||
|
|
|
@ -189,9 +189,23 @@ function hostport(val)
|
||||||
return not not (h and p and host(h) and port(p))
|
return not not (h and p and host(h) and port(p))
|
||||||
end
|
end
|
||||||
|
|
||||||
function ipaddrport(val)
|
function ip4addrport(val)
|
||||||
local h, p = val:match("^([^:]+):([^:]+)$")
|
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
|
end
|
||||||
|
|
||||||
function wpakey(val)
|
function wpakey(val)
|
||||||
|
|
Loading…
Reference in a new issue