summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorManuel Munz <freifunk@somakoma.de>2013-12-29 11:55:18 +0000
committerManuel Munz <freifunk@somakoma.de>2013-12-29 11:55:18 +0000
commitc38187d0d80f85e85e40b6ffc4f0b0cbc72e9dac (patch)
tree1a6bcadee8c4a39cf2080eca50401e7940c87d26
parent594c4a68e3271f258b5a208e04bda5f9d6623834 (diff)
applications/olsr: Validate input for lqmult, #654
-rw-r--r--applications/luci-olsr/luasrc/model/cbi/olsr/olsrd.lua26
-rw-r--r--applications/luci-olsr/luasrc/model/cbi/olsr/olsrdiface.lua27
2 files changed, 51 insertions, 2 deletions
diff --git a/applications/luci-olsr/luasrc/model/cbi/olsr/olsrd.lua b/applications/luci-olsr/luasrc/model/cbi/olsr/olsrd.lua
index 9bdf3a34ce..8492bf61ef 100644
--- a/applications/luci-olsr/luasrc/model/cbi/olsr/olsrd.lua
+++ b/applications/luci-olsr/luasrc/model/cbi/olsr/olsrd.lua
@@ -15,6 +15,8 @@ $Id$
require("luci.tools.webadmin")
local fs = require "nixio.fs"
+local util = require "luci.util"
+local ip = require "luci.ip"
local has_ipip = fs.glob("/etc/modules.d/[0-9]*-ipip")()
@@ -253,7 +255,7 @@ weight.datatype = "uinteger"
weight.placeholder = "0"
lqmult = i:taboption("general", DynamicList, "LinkQualityMult", translate("LinkQuality Multiplicator"),
- translate("Multiply routes with the factor given here. Allowed values are between 0.01 and 1. "..
+ translate("Multiply routes with the factor given here. Allowed values are between 0.01 and 1.0. "..
"It is only used when LQ-Level is greater than 0. Examples:<br />"..
"reduce LQ to 192.168.0.1 by half: 192.168.0.1 0.5<br />"..
"reduce LQ to all nodes on this interface by 20%: default 0.8"))
@@ -262,6 +264,28 @@ lqmult.rmempty = true
lqmult.cast = "table"
lqmult.placeholder = "default 1.0"
+function lqmult.validate(self, value)
+ for _, v in pairs(value) do
+ if v ~= "" then
+ local val = util.split(v, " ")
+ local host = val[1]
+ local mult = val[2]
+ if not host or not mult then
+ return nil, translate("LQMult requires two values (IP address or 'default' and multiplicator) seperated by space.")
+ end
+ if not (host == "default" or ip.IPv4(host) or ip.IPv6(host)) then
+ return nil, translate("Can only be a valid IPv4 or IPv6 address or 'default'")
+ end
+ if not tonumber(mult) or tonumber(mult) > 1 or tonumber(mult) < 0.01 then
+ return nil, translate("Invalid Value for LQMult-Value. Must be between 0.01 and 1.0.")
+ end
+ if not mult:match("[0-1]%.[0-9]+") then
+ return nil, translate("Invalid Value for LQMult-Value. You must use a decimal number between 0.01 and 1.0 here.")
+ end
+ end
+ end
+ return value
+end
ip4b = i:taboption("addrs", Value, "Ip4Broadcast", translate("IPv4 broadcast"),
translate("IPv4 broadcast address for outgoing OLSR packets. One useful example would be 255.255.255.255. "..
diff --git a/applications/luci-olsr/luasrc/model/cbi/olsr/olsrdiface.lua b/applications/luci-olsr/luasrc/model/cbi/olsr/olsrdiface.lua
index 25692fd146..9673d9afcd 100644
--- a/applications/luci-olsr/luasrc/model/cbi/olsr/olsrdiface.lua
+++ b/applications/luci-olsr/luasrc/model/cbi/olsr/olsrdiface.lua
@@ -13,6 +13,9 @@ $Id$
]]--
+local util = require "luci.util"
+local ip = require "luci.ip"
+
function write_float(self, section, value)
local n = tonumber(value)
if n ~= nil then
@@ -77,7 +80,7 @@ weight.datatype = "uinteger"
weight.placeholder = "0"
lqmult = i:taboption("general", DynamicList, "LinkQualityMult", translate("LinkQuality Multiplicator"),
- translate("Multiply routes with the factor given here. Allowed values are between 0.01 and 1. "..
+ translate("Multiply routes with the factor given here. Allowed values are between 0.01 and 1.0. "..
"It is only used when LQ-Level is greater than 0. Examples:<br />"..
"reduce LQ to 192.168.0.1 by half: 192.168.0.1 0.5<br />"..
"reduce LQ to all nodes on this interface by 20%: default 0.8"))
@@ -86,6 +89,28 @@ lqmult.rmempty = true
lqmult.cast = "table"
lqmult.placeholder = "default 1.0"
+function lqmult.validate(self, value)
+ for _, v in pairs(value) do
+ if v ~= "" then
+ local val = util.split(v, " ")
+ local host = val[1]
+ local mult = val[2]
+ if not host or not mult then
+ return nil, translate("LQMult requires two values (IP address or 'default' and multiplicator) seperated by space.")
+ end
+ if not (host == "default" or ip.IPv4(host) or ip.IPv6(host)) then
+ return nil, translate("Can only be a valid IPv4 or IPv6 address or 'default'")
+ end
+ if not tonumber(mult) or tonumber(mult) > 1 or tonumber(mult) < 0.01 then
+ return nil, translate("Invalid Value for LQMult-Value. Must be between 0.01 and 1.0.")
+ end
+ if not mult:match("[0-1]%.[0-9]+") then
+ return nil, translate("Invalid Value for LQMult-Value. You must use a decimal number between 0.01 and 1.0 here.")
+ end
+ end
+ end
+ return value
+end
ip4b = i:taboption("addrs", Value, "Ip4Broadcast", translate("IPv4 broadcast"),
translate("IPv4 broadcast address for outgoing OLSR packets. One useful example would be 255.255.255.255. "..