Mercurial > prosody-modules
comparison mod_host_guard/mod_host_guard.lua @ 680:a2cea070f2c7
mod_host_guard: removed calls to s2smanager and made the module not dependant on it.
| author | Marco Cirillo <maranda@lightwitch.org> |
|---|---|
| date | Sat, 26 May 2012 22:45:46 +0000 |
| parents | 50be30f203f3 |
| children | 03ef667c96c3 |
comparison
equal
deleted
inserted
replaced
| 679:dcddd9195098 | 680:a2cea070f2c7 |
|---|---|
| 10 | 10 |
| 11 local s2smanager = require "core.s2smanager" | 11 local s2smanager = require "core.s2smanager" |
| 12 local config = require "core.configmanager" | 12 local config = require "core.configmanager" |
| 13 local nameprep = require "util.encodings".stringprep.nameprep | 13 local nameprep = require "util.encodings".stringprep.nameprep |
| 14 | 14 |
| 15 local _make_connect = s2smanager.make_connect | 15 local function s2s_hook (event) |
| 16 function s2smanager.make_connect(session, connect_host, connect_port) | 16 local origin, stanza = event.session or event.origin, event.stanza or false |
| 17 if not session.s2sValidation then | 17 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 |
| 18 if guard_blockall:contains(session.from_host) and not guard_ball_wl:contains(session.to_host) or | |
| 19 guard_block_bl:contains(session.to_host) and guard_protect:contains(session.from_host) then | |
| 20 module:log("error", "remote service %s attempted to access restricted host %s", session.to_host, session.from_host) | |
| 21 s2smanager.destroy_session(session, "You're not authorized, good bye.") | |
| 22 return false; | |
| 23 end | |
| 24 end | |
| 25 return _make_connect(session, connect_host, connect_port) | |
| 26 end | |
| 27 | |
| 28 local _stream_opened = s2smanager.streamopened | |
| 29 function s2smanager.streamopened(session, attr) | |
| 30 local host = attr.to and nameprep(attr.to) | |
| 31 local from = attr.from and nameprep(attr.from) | |
| 32 if not from then | |
| 33 session.s2sValidation = false | |
| 34 else | |
| 35 session.s2sValidation = true | |
| 36 end | |
| 37 | |
| 38 if guard_blockall:contains(host) and not guard_ball_wl:contains(from) or | |
| 39 guard_block_bl:contains(from) and guard_protect:contains(host) then | |
| 40 module:log("error", "remote service %s attempted to access restricted host %s", from, host) | |
| 41 session:close({condition = "policy-violation", text = "You're not authorized, good bye."}) | |
| 42 return false; | |
| 43 end | |
| 44 _stream_opened(session, attr) | |
| 45 end | |
| 46 | |
| 47 local function sdr_hook (event) | |
| 48 local origin, stanza = event.origin, event.stanza | |
| 49 | 18 |
| 50 if origin.type == "s2sin" or origin.type == "s2sin_unauthed" then | 19 if origin.type == "s2sin" or origin.type == "s2sin_unauthed" then |
| 51 if guard_blockall:contains(stanza.attr.to) and not guard_ball_wl:contains(stanza.attr.from) or | 20 if guard_blockall:contains(to_host) and not guard_ball_wl:contains(from_host) or |
| 52 guard_block_bl:contains(stanza.attr.from) and guard_protect:contains(stanza.attr.to) then | 21 guard_block_bl:contains(from_host) and guard_protect:contains(to_host) then |
| 53 module:log("error", "remote service %s attempted to access restricted host %s", stanza.attr.from, stanza.attr.to) | 22 module:log("error", "remote service %s attempted to access restricted host %s", stanza.attr.from, stanza.attr.to) |
| 54 origin:close({condition = "policy-violation", text = "You're not authorized, good bye."}) | 23 origin:close({condition = "policy-violation", text = "You're not authorized, good bye."}) |
| 55 return false | 24 return false |
| 56 end | 25 end |
| 57 end | 26 end |
| 60 end | 29 end |
| 61 | 30 |
| 62 local function handle_activation (host) | 31 local function handle_activation (host) |
| 63 if guard_blockall:contains(host) or guard_protect:contains(host) then | 32 if guard_blockall:contains(host) or guard_protect:contains(host) then |
| 64 if hosts[host] and hosts[host].events then | 33 if hosts[host] and hosts[host].events then |
| 65 hosts[host].events.add_handler("stanza/jabber:server:dialback:result", sdr_hook, 100) | 34 hosts[host].events.add_handler("s2sin-established", s2s_hook, 500) |
| 35 hosts[host].events.add_handler("stanza/jabber:server:dialback:result", s2s_hook, 500) | |
| 66 module:log ("debug", "adding host protection for: "..host) | 36 module:log ("debug", "adding host protection for: "..host) |
| 67 end | 37 end |
| 68 end | 38 end |
| 69 end | 39 end |
| 70 | 40 |
| 71 local function handle_deactivation (host) | 41 local function handle_deactivation (host) |
| 72 if guard_blockall:contains(host) or guard_protect:contains(host) then | 42 if guard_blockall:contains(host) or guard_protect:contains(host) then |
| 73 if hosts[host] and hosts[host].events then | 43 if hosts[host] and hosts[host].events then |
| 74 hosts[host].events.remove_handler("stanza/jabber:server:dialback:result", sdr_hook) | 44 hosts[host].events.remove_handler("s2sin-established", s2s_hook) |
| 45 hosts[host].events.remove_handler("stanza/jabber:server:dialback:result", s2s_hook) | |
| 75 module:log ("debug", "removing host protection for: "..host) | 46 module:log ("debug", "removing host protection for: "..host) |
| 76 end | 47 end |
| 77 end | 48 end |
| 78 end | 49 end |
| 79 | 50 |
| 80 local function init_hosts() | 51 local function init_hosts() |
| 81 for n,table in pairs(hosts) do | 52 for n,table in pairs(hosts) do |
| 82 hosts[n].events.remove_handler("stanza/jabber:server:dialback:result", sdr_hook) | 53 hosts[n].events.remove_handler("s2sin-established", s2s_hook) |
| 54 hosts[n].events.remove_handler("stanza/jabber:server:dialback:result", s2s_hook) | |
| 83 if guard_blockall:contains(n) or guard_protect:contains(n) then handle_activation(n) end | 55 if guard_blockall:contains(n) or guard_protect:contains(n) then handle_activation(n) end |
| 84 end | 56 end |
| 85 end | 57 end |
| 86 | 58 |
| 87 local function reload() | 59 local function reload() |
