comparison mod_firewall/mod_firewall.lua @ 2366:14021c93a962

mod_firewall: Allow prefixing script paths with 'module:' to specify path relative to module file
author Matthew Wild <mwild1@gmail.com>
date Tue, 15 Nov 2016 15:00:38 +0000
parents 05dae9adf778
children 3ebd3cb4d7d2
comparison
equal deleted inserted replaced
2365:05dae9adf778 2366:14021c93a962
406 end 406 end
407 chunk = chunk()(active_definitions, fire_event, logger(filename)); -- Returns event handler with 'zones' upvalue. 407 chunk = chunk()(active_definitions, fire_event, logger(filename)); -- Returns event handler with 'zones' upvalue.
408 return chunk; 408 return chunk;
409 end 409 end
410 410
411 local function resolve_script_path(script_path)
412 local relative_to = prosody.paths.config;
413 if script_path:match("^module:") then
414 relative_to = module.path:sub(1, -#("/mod_"..module.name..".lua"));
415 script_path = script_path:match("^module:(.+)$");
416 end
417 return resolve_relative_path(relative_to, script_path);
418 end
419
411 function module.load() 420 function module.load()
412 if not prosody.arg then return end -- Don't run in prosodyctl 421 if not prosody.arg then return end -- Don't run in prosodyctl
413 active_definitions = {}; 422 active_definitions = {};
414 local firewall_scripts = module:get_option_set("firewall_scripts", {}); 423 local firewall_scripts = module:get_option_set("firewall_scripts", {});
415 for script in firewall_scripts do 424 for script in firewall_scripts do
416 script = resolve_relative_path(prosody.paths.config, script); 425 script = resolve_script_path(script);
417 local chain_functions, err = compile_firewall_rules(script) 426 local chain_functions, err = compile_firewall_rules(script)
418 427
419 if not chain_functions then 428 if not chain_functions then
420 module:log("error", "Error compiling %s: %s", script, err or "unknown error"); 429 module:log("error", "Error compiling %s: %s", script, err or "unknown error");
421 else 430 else
457 print("local function fire_event(name, data)\n\tmodule:fire_event(name, data)\nend"); 466 print("local function fire_event(name, data)\n\tmodule:fire_event(name, data)\nend");
458 print(); 467 print();
459 end 468 end
460 469
461 for _, filename in ipairs(arg) do 470 for _, filename in ipairs(arg) do
471 filename = resolve_script_path(filename);
462 print("do -- File "..filename); 472 print("do -- File "..filename);
463 local chain_functions = assert(compile_firewall_rules(filename)); 473 local chain_functions = assert(compile_firewall_rules(filename));
464 if verbose then 474 if verbose then
465 print(); 475 print();
466 print("local active_definitions = "..serialize(active_definitions)..";"); 476 print("local active_definitions = "..serialize(active_definitions)..";");