projects
/
project
/
luci.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
luci-firewall: Add support for negations for ip addresses/nets (#218)
[project/luci.git]
/
libs
/
web
/
luasrc
/
cbi
/
datatypes.lua
diff --git
a/libs/web/luasrc/cbi/datatypes.lua
b/libs/web/luasrc/cbi/datatypes.lua
index
67cb63d
..
d4603cf
100644
(file)
--- a/
libs/web/luasrc/cbi/datatypes.lua
+++ b/
libs/web/luasrc/cbi/datatypes.lua
@@
-17,8
+17,8
@@
local fs = require "nixio.fs"
local ip = require "luci.ip"
local math = require "math"
local util = require "luci.util"
local ip = require "luci.ip"
local math = require "math"
local util = require "luci.util"
+local tonumber, type = tonumber, type
-local tonumber = tonumber
module "luci.cbi.datatypes"
module "luci.cbi.datatypes"
@@
-66,6
+66,13
@@
function ipaddr(val)
return ip4addr(val) or ip6addr(val)
end
return ip4addr(val) or ip6addr(val)
end
+function neg_ipaddr(v)
+ if type(v) == "string" then
+ v = v:gsub("^%s*!", "")
+ end
+ return v and ipaddr(v)
+end
+
function ip4addr(val)
if val then
return ip.IPv4(val) and true or false
function ip4addr(val)
if val then
return ip.IPv4(val) and true or false
@@
-74,6
+81,13
@@
function ip4addr(val)
return false
end
return false
end
+function neg_ip4addr(v)
+ if type(v) == "string" then
+ v = v:gsub("^%s*!", "")
+ end
+ return v and ip4addr(v)
+end
+
function ip4prefix(val)
val = tonumber(val)
return ( val and val >= 0 and val <= 32 )
function ip4prefix(val)
val = tonumber(val)
return ( val and val >= 0 and val <= 32 )
@@
-94,7
+108,7
@@
end
function port(val)
val = tonumber(val)
function port(val)
val = tonumber(val)
- return ( val and val >=
1
and val <= 65535 )
+ return ( val and val >=
0
and val <= 65535 )
end
function portrange(val)
end
function portrange(val)
@@
-127,10
+141,9
@@
function macaddr(val)
end
function hostname(val)
end
function hostname(val)
- if val and
val:match("[a-zA-Z0-9_][a-zA-Z0-9_%-%.]*
") then
- return true
-- XXX: ToDo: need better solution
+ if val and
(#val < 254) and val.match(val, "^[a-zA-Z0-9][a-zA-Z0-9%-%.]*[a-zA-Z0-9]$
") then
+ return true
end
end
-
return false
end
return false
end