aboutsummaryrefslogtreecommitdiffstats
path: root/awall/iptables.lua
diff options
context:
space:
mode:
Diffstat (limited to 'awall/iptables.lua')
-rw-r--r--awall/iptables.lua50
1 files changed, 27 insertions, 23 deletions
diff --git a/awall/iptables.lua b/awall/iptables.lua
index 662a7d9..7c6d329 100644
--- a/awall/iptables.lua
+++ b/awall/iptables.lua
@@ -1,11 +1,12 @@
--[[
Iptables file dumper for Alpine Wall
-Copyright (C) 2012-2016 Kaarle Ritvanen
+Copyright (C) 2012-2019 Kaarle Ritvanen
See LICENSE file for license details
]]--
local class = require('awall.class')
+local ACTIVE = require('awall.family').ACTIVE
local raise = require('awall.uerror').raise
local util = require('awall.util')
@@ -13,8 +14,8 @@ local printmsg = util.printmsg
local sortedkeys = util.sortedkeys
-local mkdir = require('posix').mkdir
local lpc = require('lpc')
+local posix = require('posix')
local M = {}
@@ -37,6 +38,21 @@ M.builtin = {
local backupdir = '/var/run/awall'
+local _actfamilies
+local function actfamilies()
+ if _actfamilies then return _actfamilies end
+ _actfamilies = {}
+ for _, family in ipairs(ACTIVE) do
+ if posix.stat(families[family].procfile) then
+ table.insert(_actfamilies, family)
+ else printmsg('Warning: firewall not enabled for '..family) end
+ end
+ return _actfamilies
+end
+
+function M.isenabled() return #actfamilies() > 0 end
+
+
local BaseIPTables = class()
function BaseIPTables:print()
@@ -55,27 +71,15 @@ function BaseIPTables:dump(dir)
end
function BaseIPTables:restore(test)
- local disabled = true
-
- for family, params in pairs(families) do
- local file = io.open(params.procfile)
- if file then
- io.close(file)
-
- local pid, stdin, stdout = lpc.run(
- params.cmd..'-restore', table.unpack{test and '-t' or nil}
- )
- stdout:close()
- self:dumpfile(family, stdin)
- stdin:close()
- assert(lpc.wait(pid) == 0)
-
- disabled = false
-
- elseif test then printmsg('Warning: '..family..' rules not tested') end
+ for _, family in ipairs(actfamilies()) do
+ local pid, stdin, stdout = lpc.run(
+ families[family].cmd..'-restore', table.unpack{test and '-t' or nil}
+ )
+ stdout:close()
+ self:dumpfile(family, stdin)
+ stdin:close()
+ assert(lpc.wait(pid) == 0)
end
-
- if disabled then raise('Firewall not enabled in kernel') end
end
function BaseIPTables:activate()
@@ -142,7 +146,7 @@ end
function M.backup()
- mkdir(backupdir)
+ posix.mkdir(backupdir)
Current():dump(backupdir)
end