Comparison

core/portmanager.lua @ 5009:b27ba2c83dd4

portmanager: Show a friendly error message when initializing SSL fails (thanks MattJ for the entire patch that I fixed one line in)
author Kim Alvefur <zash@zash.se>
date Wed, 25 Jul 2012 20:31:14 +0200
parent 4902:a7c799a7a34b
child 5047:aab64739022e
comparison
equal deleted inserted replaced
5008:28498f29fdd8 5009:b27ba2c83dd4
50 else 50 else
51 friendly_message = "this port is in use by another application"; 51 friendly_message = "this port is in use by another application";
52 end 52 end
53 elseif err:match("permission") then 53 elseif err:match("permission") then
54 friendly_message = "Prosody does not have sufficient privileges to use this port"; 54 friendly_message = "Prosody does not have sufficient privileges to use this port";
55 elseif err == "no ssl context" then
56 if not config.get("*", "core", "ssl") then
57 friendly_message = "there is no 'ssl' config under Host \"*\" which is "
58 .."require for legacy SSL ports";
59 else
60 friendly_message = "initializing SSL support failed, see previous log entries";
61 end
62 end 55 end
63 return friendly_message; 56 return friendly_message;
64 end 57 end
65 58
66 prosody.events.add_handler("item-added/net-provider", function (event) 59 prosody.events.add_handler("item-added/net-provider", function (event)
108 for port in bind_ports do 101 for port in bind_ports do
109 port = tonumber(port); 102 port = tonumber(port);
110 if #active_services:search(nil, interface, port) > 0 then 103 if #active_services:search(nil, interface, port) > 0 then
111 log("error", "Multiple services configured to listen on the same port ([%s]:%d): %s, %s", interface, port, active_services:search(nil, interface, port)[1][1].service.name or "<unnamed>", service_name or "<unnamed>"); 104 log("error", "Multiple services configured to listen on the same port ([%s]:%d): %s, %s", interface, port, active_services:search(nil, interface, port)[1][1].service.name or "<unnamed>", service_name or "<unnamed>");
112 else 105 else
106 local err;
113 -- Create SSL context for this service/port 107 -- Create SSL context for this service/port
114 if service_info.encryption == "ssl" then 108 if service_info.encryption == "ssl" then
115 local ssl_config = config.get("*", config_prefix.."ssl"); 109 local ssl_config = config.get("*", config_prefix.."ssl");
116 ssl = certmanager.create_context(service_info.name.." port "..port, "server", ssl_config and (ssl_config[port] 110 ssl, err = certmanager.create_context(service_info.name.." port "..port, "server", ssl_config and (ssl_config[port]
117 or (ssl_config.certificate and ssl_config))); 111 or (ssl_config.certificate and ssl_config)));
112 if not ssl then
113 log("error", "Error binding encrypted port for %s: %s", service_info.name, error_to_friendly_message(service_name, port, err) or "unknown error");
114 end
118 end 115 end
119 -- Start listening on interface+port 116 if not err then
120 local handler, err = server.addserver(interface, port, listener, mode, ssl); 117 -- Start listening on interface+port
121 if not handler then 118 local handler, err = server.addserver(interface, port, listener, mode, ssl);
122 log("error", "Failed to open server port %d on %s, %s", port, interface, error_to_friendly_message(service_name, port, err)); 119 if not handler then
123 else 120 log("error", "Failed to open server port %d on %s, %s", port, interface, error_to_friendly_message(service_name, port, err));
124 log("debug", "Added listening service %s to [%s]:%d", service_name, interface, port); 121 else
125 active_services:add(service_name, interface, port, { 122 log("debug", "Added listening service %s to [%s]:%d", service_name, interface, port);
126 server = handler; 123 active_services:add(service_name, interface, port, {
127 service = service_info; 124 server = handler;
128 }); 125 service = service_info;
126 });
127 end
129 end 128 end
130 end 129 end
131 end 130 end
132 end 131 end
133 log("info", "Activated service '%s'", service_name); 132 log("info", "Activated service '%s'", service_name);