changeset 961:f0108ec2b016

mod_firewall/actions: Break out logic into a separate reusable function
author Matthew Wild <mwild1@gmail.com>
date Fri, 05 Apr 2013 18:50:52 +0100 (2013-04-05)
parents d773a51af9b1
children 93ffa3ffc66f
files mod_firewall/actions.lib.lua
diffstat 1 files changed, 9 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/mod_firewall/actions.lib.lua	Fri Apr 05 18:08:16 2013 +0100
+++ b/mod_firewall/actions.lib.lua	Fri Apr 05 18:50:52 2013 +0100
@@ -1,5 +1,13 @@
 local action_handlers = {};
 
+
+-- Run code through this to allow strings to contain code. e.g.: LOG=Received: $(stanza:top_tag())
+local function meta(s, extra)
+	return (s:gsub("$(%b())", [["..%1.."]])
+		:gsub("$(%b<>)", [["..stanza:find("%1").."]])
+		:gsub("$$(%a+)", extra or {}));
+end
+
 -- Takes an XML string and returns a code string that builds that stanza
 -- using st.stanza()
 local function compile_xml(data)
@@ -152,10 +160,7 @@
 function action_handlers.LOG(string)
 	local level = string:match("^%[(%a+)%]") or "info";
 	string = string:gsub("^%[%a+%] ?", "");
-	return (("log(%q, %q)"):format(level, string)
-		:gsub("$top", [["..stanza:top_tag().."]])
-		:gsub("$stanza", [["..stanza.."]])
-		:gsub("$(%b())", [["..%1.."]]));
+	return meta(("log(%q, %q)"):format(level, string));
 end
 
 function action_handlers.RULEDEP(dep)