X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fluci.git;a=blobdiff_plain;f=modules%2Fluci-base%2Fluasrc%2Fcbi%2Fdatatypes.lua;h=df23aaf13591b730bca7c309aaee0cdc49f2e4fd;hp=72b41ddad89386e4a13c6e715cf747643f67cb60;hb=3809bd6ffb5b2da8c1988bc7e9d6bec7dbf3efe8;hpb=5180a5bb8bcab18e06d25dbe94ba3f5e37e66248 diff --git a/modules/luci-base/luasrc/cbi/datatypes.lua b/modules/luci-base/luasrc/cbi/datatypes.lua index 72b41ddad..df23aaf13 100644 --- a/modules/luci-base/luasrc/cbi/datatypes.lua +++ b/modules/luci-base/luasrc/cbi/datatypes.lua @@ -1,4 +1,5 @@ -- Copyright 2010 Jo-Philipp Wich +-- Copyright 2017 Dan Luedtke -- Licensed to the public under the Apache License 2.0. local fs = require "nixio.fs" @@ -131,38 +132,48 @@ function ip6prefix(val) return ( val and val >= 0 and val <= 128 ) end -function ipmask(val) - return ipmask4(val) or ipmask6(val) +function cidr4(val) + local ip, mask = val:match("^([^/]+)/([^/]+)$") + + return ip4addr(ip) and ip4prefix(mask) end -function ipmask4(val) +function cidr6(val) local ip, mask = val:match("^([^/]+)/([^/]+)$") - local bits = tonumber(mask) - if bits and (bits < 0 or bits > 32) then - return false - end + return ip6addr(ip) and ip6prefix(mask) +end - if not bits and mask and not ip4addr(mask) then - return false - end +function ipnet4(val) + local ip, mask = val:match("^([^/]+)/([^/]+)$") - return ip4addr(ip or val) + return ip4addr(ip) and ip4addr(mask) end -function ipmask6(val) +function ipnet6(val) local ip, mask = val:match("^([^/]+)/([^/]+)$") - local bits = tonumber(mask) - if bits and (bits < 0 or bits > 128) then - return false - end + return ip6addr(ip) and ip6addr(mask) +end - if not bits and mask and not ip6addr(mask) then - return false +function ipmask(val) + return ipmask4(val) or ipmask6(val) +end + +function ipmask4(val) + return cidr4(val) or ipnet4(val) or ip4addr(val) +end + +function ipmask6(val) + return cidr6(val) or ipnet6(val) or ip6addr(val) +end + +function ip6hostid(val) + if val and val:match("^[a-fA-F0-9:]+$") and (#val > 2) then + return (ip6addr("2001:db8:0:0" .. val) or ip6addr("2001:db8:0:0:" .. val)) end - return ip6addr(ip or val) + return false end function port(val) @@ -267,11 +278,33 @@ function wepkey(val) end end +function hexstring(val) + if val then + return (val:match("^[a-fA-F0-9]+$") ~= nil) + end + return false +end + +function hex(val, maxbytes) + maxbytes = tonumber(maxbytes) + if val and maxbytes ~= nil then + return ((val:match("^0x[a-fA-F0-9]+$") ~= nil) and (#val <= 2 + maxbytes * 2)) + end + return false +end + +function base64(val) + if val then + return (val:match("^[a-zA-Z0-9/+]+=?=?$") ~= nil) and (math.fmod(#val, 4) == 0) + end + return false +end + function string(val) return true -- Everything qualifies as valid string end -function directory( val, seen ) +function directory(val, seen) local s = fs.stat(val) seen = seen or { } @@ -287,7 +320,7 @@ function directory( val, seen ) return false end -function file( val, seen ) +function file(val, seen) local s = fs.stat(val) seen = seen or { } @@ -303,7 +336,7 @@ function file( val, seen ) return false end -function device( val, seen ) +function device(val, seen) local s = fs.stat(val) seen = seen or { } @@ -438,4 +471,3 @@ function dateyyyymmdd(val) end return false end -