diff options
author | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2017-10-11 18:10:14 +0300 |
---|---|---|
committer | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2017-10-18 13:33:45 +0300 |
commit | b28ebbd3c2af13deb92c14e82864f00a0dc16d37 (patch) | |
tree | 114e45996839c03dd0ac989adfcbbe589f54f254 | |
parent | 73aff0f63b4aa93fc954ad4302e833df317bc8aa (diff) | |
download | awall-b28ebbd3c2af13deb92c14e82864f00a0dc16d37.tar.bz2 awall-b28ebbd3c2af13deb92c14e82864f00a0dc16d37.tar.xz |
Rule.convertchains: eliminate side effects
-rw-r--r-- | awall/model.lua | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/awall/model.lua b/awall/model.lua index 5fd214e..107a6ac 100644 --- a/awall/model.lua +++ b/awall/model.lua @@ -20,6 +20,7 @@ local raise = require('awall.uerror').raise local util = require('awall.util') local contains = util.contains +local copy = util.copy local extend = util.extend local filter = util.filter local join = util.join @@ -440,8 +441,9 @@ function M.Rule:combine(ofs1, ofs2, key, unique) local chain = self:uniqueid(key) local function setvar(name) return function(of) - setdefault(of, name, chain) - return of + local res = copy(of) + setdefault(res, name, chain) + return res end end @@ -651,8 +653,9 @@ function M.Rule:convertchains(ofrags) end if ofs then - ofrag.chain = nil - ofs = combinations(ofs, {ofrag}) + local of = copy(ofrag) + of.chain = nil + ofs = combinations(ofs, {of}) if recursive then ofs = self:convertchains(ofs) end extend(res, ofs) @@ -696,7 +699,7 @@ function M.Maskable:init(...) self['dest-mask'] = {} if type(self.mask) == 'number' then self.mask = {src=self.mask} end for _, family in ipairs{'inet', 'inet6'} do - setdefault(self.mask, family, util.copy(self.mask)) + setdefault(self.mask, family, copy(self.mask)) for _, attr in ipairs{'src', 'dest'} do self[attr..'-mask'][family] = self.mask[family][attr] or ({src=({inet=32, inet6=128})[family], dest=0})[attr] |