diff options
author | Kim Alvefur <zash@zash.se> | 2018-10-11 15:48:30 +0200 |
---|---|---|
committer | Kim Alvefur <zash@zash.se> | 2018-10-11 15:48:30 +0200 |
commit | d1c5754d3c4d0b8ba6b9034e087a345359b3bb1d (patch) | |
tree | 1f23a6726a51d1b6c2dc854dd34812f3e6ed656c /net/server_event.lua | |
parent | 93e87b0d829739ed010499b36ea69ccad4f4da25 (diff) | |
download | prosody-d1c5754d3c4d0b8ba6b9034e087a345359b3bb1d.tar.gz prosody-d1c5754d3c4d0b8ba6b9034e087a345359b3bb1d.zip |
net.server: Require IP address as argument to addclient (no DNS names)
The net.connect API should be used to resolve DNS names first
Diffstat (limited to 'net/server_event.lua')
-rw-r--r-- | net/server_event.lua | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/net/server_event.lua b/net/server_event.lua index 9fde558e..5a4dc1a4 100644 --- a/net/server_event.lua +++ b/net/server_event.lua @@ -50,9 +50,10 @@ local coroutine_yield = coroutine.yield local has_luasec, ssl = pcall ( require , "ssl" ) local socket = require "socket" local levent = require "luaevent.core" +local inet = require "util.net"; +local inet_pton = inet.pton; local socket_gettime = socket.gettime -local getaddrinfo = socket.dns.getaddrinfo local log = require ("util.logger").init("socket") @@ -728,15 +729,15 @@ local function addclient( addr, serverport, listener, pattern, sslctx, typ ) return nil, "luasec not found" end if not typ then - local addrinfo, err = getaddrinfo(addr) - if not addrinfo then return nil, err end - if addrinfo[1] and addrinfo[1].family == "inet6" then - typ = "tcp6" - else - typ = "tcp" + local n = inet_pton(addr); + if not n then return nil, "invalid-ip"; end + if #n == 16 then + typ = "tcp6"; + elseif #n == 4 then + typ = "tcp4"; end end - local create = socket[typ] + local create = socket[typ] or socket.tcp; if type( create ) ~= "function" then return nil, "invalid socket type" end |