Software /
code /
prosody
Comparison
core/portmanager.lua @ 9849:70e56f126177
core.portmanager: Collect per-host certificates for SNI
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Fri, 14 Sep 2018 01:30:56 +0200 |
parent | 9848:b923053e69ba |
child | 9975:ca01c449357f |
comparison
equal
deleted
inserted
replaced
9848:b923053e69ba | 9849:70e56f126177 |
---|---|
8 local set = require "util.set"; | 8 local set = require "util.set"; |
9 | 9 |
10 local table = table; | 10 local table = table; |
11 local setmetatable, rawset, rawget = setmetatable, rawset, rawget; | 11 local setmetatable, rawset, rawget = setmetatable, rawset, rawget; |
12 local type, tonumber, tostring, ipairs = type, tonumber, tostring, ipairs; | 12 local type, tonumber, tostring, ipairs = type, tonumber, tostring, ipairs; |
13 local pairs = pairs; | |
13 | 14 |
14 local prosody = prosody; | 15 local prosody = prosody; |
15 local fire_event = prosody.events.fire_event; | 16 local fire_event = prosody.events.fire_event; |
16 | 17 |
17 local _ENV = nil; | 18 local _ENV = nil; |
225 return services; | 226 return services; |
226 end | 227 end |
227 | 228 |
228 -- Event handlers | 229 -- Event handlers |
229 | 230 |
231 local function add_sni_host(host, service) | |
232 -- local global_ssl_config = config.get(host, "ssl") or {}; | |
233 for name, interface, port, n, active_service --luacheck: ignore 213 | |
234 in active_services:iter(service, nil, nil, nil) do | |
235 if active_service.server.hosts and active_service.tls_cfg then | |
236 -- local config_prefix = (active_service.config_prefix or name).."_"; | |
237 -- if config_prefix == "_" then | |
238 -- config_prefix = ""; | |
239 -- end | |
240 -- local prefix_ssl_config = config.get(host, config_prefix.."ssl") or global_ssl_config; | |
241 -- FIXME only global 'ssl' settings are mixed in here | |
242 -- TODO per host and per service settings should be merged in, | |
243 -- without overriding the per-host certificate | |
244 local ssl, err, cfg = certmanager.create_context(host, "server"); | |
245 if ssl then | |
246 active_service.server.hosts[host] = ssl; | |
247 if not active_service.tls_cfg.certificate then | |
248 active_service.server.tls_ctx = ssl; | |
249 active_service.tls_cfg = cfg; | |
250 end | |
251 else | |
252 log("error", "err = %q", err); | |
253 end | |
254 end | |
255 end | |
256 end | |
257 | |
230 prosody.events.add_handler("item-added/net-provider", function (event) | 258 prosody.events.add_handler("item-added/net-provider", function (event) |
231 local item = event.item; | 259 local item = event.item; |
232 register_service(item.name, item); | 260 register_service(item.name, item); |
261 for host in pairs(prosody.hosts) do | |
262 add_sni_host(host, item.name); | |
263 end | |
233 end); | 264 end); |
234 prosody.events.add_handler("item-removed/net-provider", function (event) | 265 prosody.events.add_handler("item-removed/net-provider", function (event) |
235 local item = event.item; | 266 local item = event.item; |
236 unregister_service(item.name, item); | 267 unregister_service(item.name, item); |
268 end); | |
269 | |
270 prosody.events.add_handler("host-activated", add_sni_host); | |
271 prosody.events.add_handler("host-deactivated", function (host) | |
272 for name, interface, port, n, active_service --luacheck: ignore 213 | |
273 in active_services:iter(nil, nil, nil, nil) do | |
274 if active_service.tls_cfg then | |
275 active_service.server.hosts[host] = nil; | |
276 end | |
277 end | |
237 end); | 278 end); |
238 | 279 |
239 return { | 280 return { |
240 activate = activate; | 281 activate = activate; |
241 deactivate = deactivate; | 282 deactivate = deactivate; |