mir3c/squashfs-root/lib/config_post_ota/firewall_cfg_update.lua

58 lines
1.6 KiB
Lua
Executable File

#!/usr/bin/lua
-- it's executed after OTA to upgrade cfg to new version
-- local bit= require "bit"
local uci= require 'luci.model.uci'
-- local json= require 'json'
local curs = uci.cursor()
-- only merge named sections, not touch anonmous sections
function merge_tbl(cfg_from, cfg_to, t_type)
curs:foreach(
cfg_from, t_type,
function(s)
if not s['.anonymous'] and not curs:get(cfg_to,t_type,s['.name']) then
new_name = curs:section(cfg_to,t_type,s['.name'])
for k,v in pairs(s) do
-- only support flat config structure
if type(v) == 'string' then
curs:set(cfg_to,new_name,k,v)
else
-- not supported
end
end
end
end
)
end
function main()
local from_cfg='firewall_default'
local to_cfg='firewall'
merge_tbl(from_cfg,to_cfg,'include')
merge_tbl(from_cfg,to_cfg,'rule')
merge_tbl(from_cfg,to_cfg,'zone')
merge_tbl(from_cfg,to_cfg,'redirect')
-- use this form to set options for anonymous section.
curs:foreach("firewall", "defaults",
function(s)
curs:set("firewall",s[".name"],"drop_invalid","1")
curs:set("firewall",s[".name"],"disable_ipv6","1")
end)
curs:save(to_cfg)
curs:commit(to_cfg)
os.remove('/etc/config/firewall_default')
end
main()