changeset 960:d773a51af9b1

mod_firewall: Add actions EVENT (fire an event), JUMP EVENT (transfer control to the handlers of an event), JUMP CHAIN (transfer control to another mod_firewall chain)
author Matthew Wild <mwild1@gmail.com>
date Fri, 05 Apr 2013 18:08:16 +0100 (2013-04-05)
parents 6ef334596276
children f0108ec2b016
files mod_firewall/actions.lib.lua mod_firewall/mod_firewall.lua
diffstat 2 files changed, 13 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/mod_firewall/actions.lib.lua	Fri Apr 05 18:06:32 2013 +0100
+++ b/mod_firewall/actions.lib.lua	Fri Apr 05 18:08:16 2013 +0100
@@ -162,4 +162,16 @@
 	return "", { dep };
 end
 
+function action_handlers.EVENT(name)
+	return ("fire_event(%q, event)"):format(name);
+end
+
+function action_handlers.JUMP_EVENT(name)
+	return ("do return fire_event(%q, event); end"):format(name);
+end
+
+function action_handlers.JUMP_CHAIN(name)
+	return ("do return fire_event(%q, event); end"):format("firewall/chains/"..name);
+end
+
 return action_handlers;
--- a/mod_firewall/mod_firewall.lua	Fri Apr 05 18:06:32 2013 +0100
+++ b/mod_firewall/mod_firewall.lua	Fri Apr 05 18:08:16 2013 +0100
@@ -241,9 +241,7 @@
 			table.insert(code, rule_code);
 		end
 
-		assert(chains[chain_name].type == "event", "Only event chains supported at the moment")
-
-		local code_string = [[return function (zones, log)
+		local code_string = [[return function (zones, fire_event, log)
 			]]..table.concat(code.global_header, "\n")..[[
 			local db = require 'util.debug'
 			return function (event)