comparison mod_host_guard/mod_host_guard.lua @ 753:9d5731af2c27

Merge with Oliver Gerlich
author Matthew Wild <mwild1@gmail.com>
date Fri, 27 Jul 2012 14:29:59 +0100
parents ce8e7b784be0
children b16b291d68c3
comparison
equal deleted inserted replaced
752:9bbd99f2057a 753:9d5731af2c27
6 local guard_blockall = module:get_option_set("host_guard_blockall", {}) 6 local guard_blockall = module:get_option_set("host_guard_blockall", {})
7 local guard_ball_wl = module:get_option_set("host_guard_blockall_exceptions", {}) 7 local guard_ball_wl = module:get_option_set("host_guard_blockall_exceptions", {})
8 local guard_protect = module:get_option_set("host_guard_selective", {}) 8 local guard_protect = module:get_option_set("host_guard_selective", {})
9 local guard_block_bl = module:get_option_set("host_guard_blacklist", {}) 9 local guard_block_bl = module:get_option_set("host_guard_blacklist", {})
10 10
11 local config = require "core.configmanager" 11 local config = configmanager
12 local error_reply = require "util.stanza".error_reply 12 local error_reply = require "util.stanza".error_reply
13 13
14 local function s2s_hook (event) 14 local function s2s_hook (event)
15 local origin, stanza = event.session or event.origin, event.stanza or false 15 local origin, stanza = event.session or event.origin, event.stanza or false
16 local to_host, from_host = (not stanza and origin.to_host) or stanza.attr.to, (not stanza and origin.from_host) or stanza.attr.from 16 local to_host, from_host = (not stanza and origin.to_host) or stanza.attr.to, (not stanza and origin.from_host) or stanza.attr.from
38 end 38 end
39 39
40 return nil 40 return nil
41 end 41 end
42 42
43 local function handle_activation (host) 43 local function handle_activation (host, u)
44 if guard_blockall:contains(host) or guard_protect:contains(host) then 44 if guard_blockall:contains(host) or guard_protect:contains(host) then
45 if hosts[host] and hosts[host].events then 45 if hosts[host] and hosts[host].events then
46 hosts[host].events.add_handler("s2sin-established", s2s_hook, 500) 46 hosts[host].events.add_handler("s2sin-established", s2s_hook, 500)
47 hosts[host].events.add_handler("route/remote", rr_hook, 500) 47 hosts[host].events.add_handler("route/remote", rr_hook, 500)
48 hosts[host].events.add_handler("stanza/jabber:server:dialback:result", s2s_hook, 500) 48 hosts[host].events.add_handler("stanza/jabber:server:dialback:result", s2s_hook, 500)
49 module:log ("debug", "adding host protection for: "..host) 49 if not u then
50 module:log ("debug", "adding host protection for: "..host)
51 else
52 module:log ("debug", "updating or adding host protection for: "..host)
53 end
50 end 54 end
51 end 55 end
52 end 56 end
53 57
54 local function handle_deactivation (host) 58 local function handle_deactivation (host, u, i)
55 if guard_blockall:contains(host) or guard_protect:contains(host) then 59 if guard_blockall:contains(host) or guard_protect:contains(host) then
56 if hosts[host] and hosts[host].events then 60 if hosts[host] and hosts[host].events then
57 hosts[host].events.remove_handler("s2sin-established", s2s_hook) 61 hosts[host].events.remove_handler("s2sin-established", s2s_hook)
58 hosts[host].events.remove_handler("route/remote", rr_hook) 62 hosts[host].events.remove_handler("route/remote", rr_hook)
59 hosts[host].events.remove_handler("stanza/jabber:server:dialback:result", s2s_hook) 63 hosts[host].events.remove_handler("stanza/jabber:server:dialback:result", s2s_hook)
60 module:log ("debug", "removing host protection for: "..host) 64 if not u and not i then module:log ("debug", "removing host protection for: "..host) end
61 end 65 end
62 end 66 end
63 end 67 end
64 68
65 local function init_hosts() 69 local function init_hosts(u, i)
66 for n,table in pairs(hosts) do 70 for n in pairs(hosts) do
67 hosts[n].events.remove_handler("s2sin-established", s2s_hook) 71 if guard_blockall:contains(n) or guard_protect:contains(n) then
68 hosts[n].events.remove_handler("route/remote", rr_hook) 72 handle_deactivation(n, u, i)
69 hosts[n].events.remove_handler("stanza/jabber:server:dialback:result", s2s_hook) 73 handle_activation(n, u)
70 if guard_blockall:contains(n) or guard_protect:contains(n) then handle_activation(n) end 74 end
71 end 75 end
72 end 76 end
73 77
74 local function reload() 78 local function reload()
75 module:log ("debug", "server configuration reloaded, rehashing plugin tables...") 79 module:log ("debug", "server configuration reloaded, rehashing plugin tables...")
76 guard_blockall = module:get_option_set("host_guard_blockall", {}) 80 guard_blockall = module:get_option_set("host_guard_blockall", {})
77 guard_ball_wl = module:get_option_set("host_guard_blockall_exceptions", {}) 81 guard_ball_wl = module:get_option_set("host_guard_blockall_exceptions", {})
78 guard_protect = module:get_option_set("host_guard_selective", {}) 82 guard_protect = module:get_option_set("host_guard_selective", {})
79 guard_block_bl = module:get_option_set("host_guard_blacklist", {}) 83 guard_block_bl = module:get_option_set("host_guard_blacklist", {})
80 84
81 init_hosts() 85 init_hosts(true)
82 end 86 end
83 87
84 local function setup() 88 local function setup()
85 module:log ("debug", "initializing host guard module...") 89 module:log ("debug", "initializing host guard module...")
86 module:hook ("host-activated", handle_activation) 90 module:hook ("host-activated", handle_activation)
87 module:hook ("host-deactivated", handle_deactivation) 91 module:hook ("host-deactivated", handle_deactivation)
88 module:hook ("config-reloaded", reload) 92 module:hook ("config-reloaded", reload)
89 93
90 init_hosts() 94 init_hosts(false, true)
95 end
96
97 function module.unload()
98 module:log ("debug", "removing host handlers as module is being unloaded...")
99 for n in pairs(hosts) do
100 hosts[n].events.remove_handler("s2sin-established", s2s_hook)
101 hosts[n].events.remove_handler("route/remote", rr_hook)
102 hosts[n].events.remove_handler("stanza/jabber:server:dialback:result", s2s_hook)
103 end
91 end 104 end
92 105
93 if prosody.start_time then 106 if prosody.start_time then
94 setup() 107 setup()
95 else 108 else