net.server: Only add alternate SNI contexts if at least one is provided
Fixes use of <starttls/> when a client sends SNI, which would send no certificate otherwise.
--- a/net/server_epoll.lua Sun Mar 10 19:58:28 2019 +0100
+++ b/net/server_epoll.lua Mon Mar 11 13:00:51 2019 +0100
@@ -512,7 +512,7 @@
if conn.sni then
if self.servername then
conn:sni(self.servername);
- elseif self._server and self._server.hosts then
+ elseif self._server and type(self._server.hosts) == "table" and next(self._server.hosts) ~= nil then
conn:sni(self._server.hosts, true);
end
end
--- a/net/server_event.lua Sun Mar 10 19:58:28 2019 +0100
+++ b/net/server_event.lua Mon Mar 11 13:00:51 2019 +0100
@@ -168,7 +168,7 @@
if self.conn.sni then
if self.servername then
self.conn:sni(self.servername);
- elseif self._server and self._server.hosts then
+ elseif self._server and type(self._server.hosts) == "table" and next(self._server.hosts) ~= nil then
self.conn:sni(self._server.hosts, true);
end
end
--- a/net/server_select.lua Sun Mar 10 19:58:28 2019 +0100
+++ b/net/server_select.lua Mon Mar 11 13:00:51 2019 +0100
@@ -637,7 +637,7 @@
if socket.sni then
if self.servername then
socket:sni(self.servername);
- elseif self.server() and self.server().hosts then
+ elseif self._server and type(self._server.hosts) == "table" and next(self._server.hosts) ~= nil then
socket:sni(self.server().hosts, true);
end
end