diff options
author | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2014-09-29 11:25:06 +0300 |
---|---|---|
committer | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2014-09-29 13:43:40 +0300 |
commit | 4f447035bb53313fc7bf8a7b08e51ad57381e9f9 (patch) | |
tree | 8a8bfe92e5110f952e064d658a5968ffc6f096a3 | |
parent | c2017b127eb6b33962eb12d5c0be11c685951413 (diff) | |
download | awall-4f447035bb53313fc7bf8a7b08e51ad57381e9f9.tar.bz2 awall-4f447035bb53313fc7bf8a7b08e51ad57381e9f9.tar.xz |
map numeric and symbolic protocol identifiers
-rw-r--r-- | awall/model.lua | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/awall/model.lua b/awall/model.lua index 14024ed..46d70d1 100644 --- a/awall/model.lua +++ b/awall/model.lua @@ -179,13 +179,20 @@ function M.Rule:init(...) self.label = self.service end - self.service = maplist( - self.service, - function(s) - if type(s) ~= 'string' then return s end - return self.root.service[s] or self:error('Invalid service: '..s) + self.service = util.list(self.service) + + for i, serv in ipairs(self.service) do + if type(serv) == 'string' then + self.service[i] = self.root.service[serv] or + self:error('Invalid service: '..serv) end - ) + for i, sdef in listpairs(self.service[i]) do + if not sdef.proto then self:error('Protocol not defined') end + sdef.proto = ( + {[1]='icmp', [6]='tcp', [17]='udp', [58]='ipv6-icmp'} + )[sdef.proto] or sdef.proto + end + end end end @@ -268,9 +275,7 @@ function M.Rule:servoptfrags() for i, serv in ipairs(self.service) do for i, sdef in listpairs(serv) do - if not sdef.proto then self:error('Protocol not defined') end - - if contains({6, 'tcp', 17, 'udp'}, sdef.proto) then + if contains({'tcp', 'udp'}, sdef.proto) then for family, ports in pairs(fports) do if not sdef.family or family == sdef.family then @@ -298,10 +303,10 @@ function M.Rule:servoptfrags() -- TODO multiple ICMP types per rule local oname - if contains({1, 'icmp'}, sdef.proto) then + if sdef.proto == 'icmp' then family = 'inet' oname = 'icmp-type' - elseif contains({58, 'ipv6-icmp', 'icmpv6'}, sdef.proto) then + elseif contains({'ipv6-icmp', 'icmpv6'}, sdef.proto) then family = 'inet6' oname = 'icmpv6-type' elseif sdef.type or sdef['reply-type'] then |