Mercurial > prosody-hg
comparison core/portmanager.lua @ 9848:b923053e69ba
core.portmanager: Record TLS config for each port
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Wed, 10 Oct 2018 17:23:03 +0200 |
| parents | 789395f027f1 |
| children | 70e56f126177 |
comparison
equal
deleted
inserted
replaced
| 9847:adc0672b700e | 9848:b923053e69ba |
|---|---|
| 105 log("error", "Invalid port number specified for service '%s': %s", service_info.name, tostring(port)); | 105 log("error", "Invalid port number specified for service '%s': %s", service_info.name, tostring(port)); |
| 106 elseif #active_services:search(nil, interface, port_number) > 0 then | 106 elseif #active_services:search(nil, interface, port_number) > 0 then |
| 107 log("error", "Multiple services configured to listen on the same port ([%s]:%d): %s, %s", interface, port, | 107 log("error", "Multiple services configured to listen on the same port ([%s]:%d): %s, %s", interface, port, |
| 108 active_services:search(nil, interface, port)[1][1].service.name or "<unnamed>", service_name or "<unnamed>"); | 108 active_services:search(nil, interface, port)[1][1].service.name or "<unnamed>", service_name or "<unnamed>"); |
| 109 else | 109 else |
| 110 local ssl, err; | 110 local ssl, cfg, err; |
| 111 -- Create SSL context for this service/port | 111 -- Create SSL context for this service/port |
| 112 if service_info.encryption == "ssl" then | 112 if service_info.encryption == "ssl" then |
| 113 local global_ssl_config = config.get("*", "ssl") or {}; | 113 local global_ssl_config = config.get("*", "ssl") or {}; |
| 114 local prefix_ssl_config = config.get("*", config_prefix.."ssl") or global_ssl_config; | 114 local prefix_ssl_config = config.get("*", config_prefix.."ssl") or global_ssl_config; |
| 115 ssl, err = certmanager.create_context(service_info.name.." port "..port, "server", | 115 ssl, err, cfg = certmanager.create_context(service_info.name.." port "..port, "server", |
| 116 prefix_ssl_config[interface], | 116 prefix_ssl_config[interface], |
| 117 prefix_ssl_config[port], | 117 prefix_ssl_config[port], |
| 118 prefix_ssl_config, | 118 prefix_ssl_config, |
| 119 service_info.ssl_config or {}, | 119 service_info.ssl_config or {}, |
| 120 global_ssl_config[interface], | 120 global_ssl_config[interface], |
| 128 -- Start listening on interface+port | 128 -- Start listening on interface+port |
| 129 local handler, err = server.listen(interface, port_number, listener, { | 129 local handler, err = server.listen(interface, port_number, listener, { |
| 130 read_size = mode, | 130 read_size = mode, |
| 131 tls_ctx = ssl, | 131 tls_ctx = ssl, |
| 132 tls_direct = service_info.encryption == "ssl"; | 132 tls_direct = service_info.encryption == "ssl"; |
| 133 sni_hosts = {}, | |
| 133 }); | 134 }); |
| 134 if not handler then | 135 if not handler then |
| 135 log("error", "Failed to open server port %d on %s, %s", port_number, interface, | 136 log("error", "Failed to open server port %d on %s, %s", port_number, interface, |
| 136 error_to_friendly_message(service_name, port_number, err)); | 137 error_to_friendly_message(service_name, port_number, err)); |
| 137 else | 138 else |
| 138 table.insert(hooked_ports, "["..interface.."]:"..port_number); | 139 table.insert(hooked_ports, "["..interface.."]:"..port_number); |
| 139 log("debug", "Added listening service %s to [%s]:%d", service_name, interface, port_number); | 140 log("debug", "Added listening service %s to [%s]:%d", service_name, interface, port_number); |
| 140 active_services:add(service_name, interface, port_number, { | 141 active_services:add(service_name, interface, port_number, { |
| 141 server = handler; | 142 server = handler; |
| 142 service = service_info; | 143 service = service_info; |
| 144 tls_cfg = cfg; | |
| 143 }); | 145 }); |
| 144 end | 146 end |
| 145 end | 147 end |
| 146 end | 148 end |
| 147 end | 149 end |
