aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2012-07-20 12:37:15 +0000
committerKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2012-07-20 12:37:15 +0000
commit1ecedaa711dad375e088fef8cbb09f805e60a894 (patch)
tree31c3dbe3e85ac09617b3d9f72290f3b370098619
parent6504e9c5dc3ff5162f58600eb7a90809b650cafe (diff)
downloadawall-1ecedaa711dad375e088fef8cbb09f805e60a894.tar.bz2
awall-1ecedaa711dad375e088fef8cbb09f805e60a894.tar.xz
generalize creation of related rules based on cloning
-rw-r--r--awall/modules/filter.lua17
1 files changed, 11 insertions, 6 deletions
diff --git a/awall/modules/filter.lua b/awall/modules/filter.lua
index f8d4f60..cde2112 100644
--- a/awall/modules/filter.lua
+++ b/awall/modules/filter.lua
@@ -35,6 +35,16 @@ end
function Filter:trules()
local res = {}
+ local function extrarules(cls, extra)
+ local params = {}
+ for i, attr in ipairs({'in', 'out', 'src', 'dest',
+ 'ipset', 'ipsec', 'service'}) do
+ params[attr] = self[attr]
+ end
+ if extra then for k, v in pairs(extra) do params[k] = v end end
+ return awall.util.extend(res, self:create(cls, params):trules())
+ end
+
if self.dnat then
if self.action ~= 'accept' then
self:error('dnat option not allowed with '..self.action..' action')
@@ -64,12 +74,7 @@ function Filter:trules()
self:error(self.dnat..' does not resolve to any IPv4 address')
end
- local dnat = {['ip-range']=dnataddr}
- for i, attr in ipairs({'in', 'src', 'dest', 'service'}) do
- dnat[attr] = self[attr]
- end
-
- awall.util.extend(res, self:create('dnat', dnat):trules())
+ extrarules('dnat', {['ip-range']=dnataddr, out=nil})
end
awall.util.extend(res, model.Rule.trules(self))