Software / code / prosody
Comparison
core/componentmanager.lua @ 2323:b7f683c55a44
componentmanager: Set ssl_ctx[_in] for components correctly, and use global SSL context if available
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Fri, 04 Dec 2009 18:59:28 +0000 |
| parent | 2075:b4bfa6cb3d83 |
| child | 2447:9eb539222f22 |
| child | 2923:b7049746bd29 |
comparison
equal
deleted
inserted
replaced
| 2322:548a4fc54a74 | 2323:b7f683c55a44 |
|---|---|
| 12 local modulemanager = require "core.modulemanager"; | 12 local modulemanager = require "core.modulemanager"; |
| 13 local jid_split = require "util.jid".split; | 13 local jid_split = require "util.jid".split; |
| 14 local fire_event = require "core.eventmanager".fire_event; | 14 local fire_event = require "core.eventmanager".fire_event; |
| 15 local events_new = require "util.events".new; | 15 local events_new = require "util.events".new; |
| 16 local st = require "util.stanza"; | 16 local st = require "util.stanza"; |
| 17 local hosts = hosts; | 17 local prosody, hosts = prosody, prosody.hosts; |
| 18 local ssl = ssl; | |
| 18 | 19 |
| 19 local pairs, type, tostring = pairs, type, tostring; | 20 local pairs, setmetatable, type, tostring = pairs, setmetatable, type, tostring; |
| 20 | 21 |
| 21 local components = {}; | 22 local components = {}; |
| 22 | 23 |
| 23 local disco_items = require "util.multitable".new(); | 24 local disco_items = require "util.multitable".new(); |
| 24 local NULL = {}; | 25 local NULL = {}; |
| 71 end | 72 end |
| 72 end | 73 end |
| 73 | 74 |
| 74 function create_component(host, component, events) | 75 function create_component(host, component, events) |
| 75 -- TODO check for host well-formedness | 76 -- TODO check for host well-formedness |
| 76 local ssl_ctx; | 77 local ssl_ctx, ssl_ctx_in; |
| 77 if host then | 78 if host and ssl then |
| 78 -- We need to find SSL context to use... | 79 -- We need to find SSL context to use... |
| 79 -- Discussion in prosody@ concluded that | 80 -- Discussion in prosody@ concluded that |
| 80 -- 1 level back is usually enough by default | 81 -- 1 level back is usually enough by default |
| 81 local base_host = host:gsub("^[^%.]+%.", ""); | 82 local base_host = host:gsub("^[^%.]+%.", ""); |
| 82 if hosts[base_host] then | 83 if hosts[base_host] then |
| 83 ssl_ctx = hosts[base_host].ssl_ctx; | 84 ssl_ctx = hosts[base_host].ssl_ctx; |
| 85 ssl_ctx_in = hosts[base_host].ssl_ctx_in; | |
| 86 elseif prosody.global_ssl_ctx then | |
| 87 -- We have no cert, and no parent host to borrow a cert from | |
| 88 -- Use global/default cert if there is one | |
| 89 ssl_ctx = ssl.newcontext(prosody.global_ssl_ctx); | |
| 90 ssl_ctx_in = ssl.newcontext(setmetatable({ mode = "server" }, { __index = prosody.global_ssl_ctx })); | |
| 84 end | 91 end |
| 85 end | 92 end |
| 86 return { type = "component", host = host, connected = true, s2sout = {}, | 93 return { type = "component", host = host, connected = true, s2sout = {}, |
| 87 ssl_ctx = ssl_ctx, events = events or events_new() }; | 94 ssl_ctx = ssl_ctx, ssl_ctx_in = ssl_ctx_in, events = events or events_new() }; |
| 88 end | 95 end |
| 89 | 96 |
| 90 function register_component(host, component, session) | 97 function register_component(host, component, session) |
| 91 if not hosts[host] or (hosts[host].type == 'component' and not hosts[host].connected) then | 98 if not hosts[host] or (hosts[host].type == 'component' and not hosts[host].connected) then |
| 92 local old_events = hosts[host] and hosts[host].events; | 99 local old_events = hosts[host] and hosts[host].events; |