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_epoll.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_epoll.lua')
-rw-r--r-- | net/server_epoll.lua | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/net/server_epoll.lua b/net/server_epoll.lua index 7a860878..b5053d22 100644 --- a/net/server_epoll.lua +++ b/net/server_epoll.lua @@ -21,6 +21,8 @@ local socket = require "socket"; local luasec = require "ssl"; local gettime = require "util.time".now; local createtable = require "util.table".create; +local inet = require "util.net"; +local inet_pton = inet.pton; local _SOCKETINVALID = socket._SOCKETINVALID or -1; local poll = require "util.poll".new(); @@ -614,7 +616,8 @@ local function wrapclient(conn, addr, port, listeners, read_size, tls_ctx) if not client.peername then client.peername, client.peerport = addr, port; end - client:init(); + local ok, err = client:init(); + if not ok then return ok, err; end if tls_ctx then client:starttls(tls_ctx); end @@ -623,12 +626,20 @@ end -- New outgoing TCP connection local function addclient(addr, port, listeners, read_size, tls_ctx) - local conn, err = socket.tcp(); - if not conn then return conn, err; end + local n = inet_pton(addr); + if not n then return nil, "invalid-ip"; end + local create + if #n == 16 then + create = socket.tcp6 or socket.tcp; + else + create = socket.tcp4 or socket.tcp; + end + local conn, err = create(); conn:settimeout(0); conn:connect(addr, port); local client = wrapsocket(conn, nil, read_size, listeners, tls_ctx) - client:init(); + local ok, err = client:init(); + if not ok then return ok, err; end if tls_ctx then client:starttls(tls_ctx); end |