summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2013-02-08 08:13:40 +0000
committerKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2013-02-08 10:51:26 +0200
commitd22129e9feab6a7aa57d9512d73d2cf6a5088afb (patch)
tree5dc4f39c94ea616ee1e5b6b6a416a39b8805b422
parentc609c91fe3b2640f4714360f1d93170b775e2171 (diff)
downloadawall-d22129e9feab6a7aa57d9512d73d2cf6a5088afb.tar.bz2
awall-d22129e9feab6a7aa57d9512d73d2cf6a5088afb.tar.xz
rewrote code combining zone and address option fragmentsHEADmaster
now works also for reversed rules
-rw-r--r--awall/model.lua34
1 files changed, 19 insertions, 15 deletions
diff --git a/awall/model.lua b/awall/model.lua
index 95c18f1..c234bb8 100644
--- a/awall/model.lua
+++ b/awall/model.lua
@@ -377,37 +377,41 @@ function Rule:trules()
local addrofrags = combinations(self:create(Zone,
{addr=self.src}):optfrags(self:direction('in')),
self:destoptfrags())
+ local combined = res
if addrofrags then
addrofrags = ffilter(addrofrags)
setfamilies(addrofrags)
res = ffilter(res)
- end
- local addrchain = false
- for i, ofrag in ipairs(res) do
- if not ofrag.chain then ofrag.chain = ofrag.fchain end
- addrchain = addrchain or (self.src and ofrag.src) or (self.dest and ofrag.dest)
+ combined = {}
+ for i, ofrag in ipairs(res) do
+ local cc = combinations({ofrag}, addrofrags)
+ if #cc < #addrofrags then
+ combined = nil
+ break
+ end
+ util.extend(combined, cc)
+ end
end
local target
- if addrchain then
- target = self:newchain('address')
- else
+ if combined then
target = self:target()
- res = combinations(res, addrofrags)
+ res = combined
+ else
+ target = self:newchain('address')
end
tag(res, 'position', self:position())
res = combinations(res, {{target=target}})
- if addrchain then
- for i, ofrag in ipairs(addrofrags) do
- ofrag.chain = target
- ofrag.target = self:target()
- table.insert(res, ofrag)
- end
+ if not combined then
+ util.extend(
+ res,
+ combinations(addrofrags, {{chain=target, target=self:target()}})
+ )
end
local ofrags = {}