summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJo-Philipp Wich <jow@openwrt.org>2009-10-08 01:22:21 +0000
committerJo-Philipp Wich <jow@openwrt.org>2009-10-08 01:22:21 +0000
commit9fcd1f2f59ba07882e2925f53703e8cfad943800 (patch)
tree56968fc21d10e2a8ef340128e492f0707dfaf2e2
parent0ee2d670c771925304d1ded7293f52c734ff82fa (diff)
libs/core: luci.model.firewall: make top level functions instance methods to keep interface consistent, implement rename_zone()
-rw-r--r--libs/core/luasrc/model/firewall.lua53
1 files changed, 45 insertions, 8 deletions
diff --git a/libs/core/luasrc/model/firewall.lua b/libs/core/luasrc/model/firewall.lua
index c1a8a45c7..6fc207cac 100644
--- a/libs/core/luasrc/model/firewall.lua
+++ b/libs/core/luasrc/model/firewall.lua
@@ -37,8 +37,8 @@ function init(cursor)
end
end
-function add_zone(n)
- if n then
+function add_zone(self, n)
+ if n and #n > 0 and n:match("^[a-zA-Z0-9_]+$") and not self:get_zone(n) then
local z = ub.uci:section("firewall", "zone", nil, {
name = n,
network = " ",
@@ -51,7 +51,7 @@ function add_zone(n)
end
end
-function get_zone(n)
+function get_zone(self, n)
local z
ub.uci:foreach("firewall", "zone",
function(s)
@@ -63,7 +63,7 @@ function get_zone(n)
return z and zone(z)
end
-function get_zones()
+function get_zones(self)
local zones = { }
ub.uci:foreach("firewall", "zone",
function(s)
@@ -74,7 +74,7 @@ function get_zones()
return zones
end
-function get_zones_by_network(net)
+function get_zones_by_network(self, net)
local zones = { }
ub.uci:foreach("firewall", "zone",
function(s)
@@ -91,7 +91,7 @@ function get_zones_by_network(net)
return zones
end
-function del_zone(n)
+function del_zone(self, n)
local r = false
ub.uci:foreach("firewall", "zone",
function(s)
@@ -123,10 +123,47 @@ function del_zone(n)
return r
end
-function del_network(net)
+function rename_zone(self, old, new)
+ local r = false
+ if new and #new > 0 and new:match("^[a-zA-Z0-9_]+$") and not self:get_zone(new) then
+ ub.uci:foreach("firewall", "zone",
+ function(s)
+ if n and s.name == old then
+ ub.uci:set("firewall", s['.name'], "name", new)
+ r = true
+ return false
+ end
+ end)
+ if r then
+ ub.uci:foreach("firewall", "rule",
+ function(s)
+ if s.src == old then
+ ub.uci:set("firewall", s['.name'], "src", new)
+ elseif s.dest == old then
+ ub.uci:set("firewall", s['.name'], "dest", new)
+ end
+ end)
+ ub.uci:foreach("firewall", "redirect",
+ function(s)
+ if s.src == old then
+ ub.uci:set("firewall", s['.name'], "src", new)
+ end
+ end)
+ ub.uci:foreach("firewall", "forwarding",
+ function(s)
+ if s.src == old then
+ ub.uci:set("firewall", s['.name'], "src", new)
+ end
+ end)
+ end
+ end
+ return r
+end
+
+function del_network(self, net)
local z
if net then
- for _, z in ipairs(get_zones()) do
+ for _, z in ipairs(self:get_zones()) do
z:del_network(net)
end
end