From c2c4de7267db9835e36132364f422ba7d93f25d6 Mon Sep 17 00:00:00 2001 From: Peter Powell Date: Thu, 7 Feb 2019 15:34:41 +0000 Subject: Fix linking servers with UNIX sockets. - Remove the address/port overloads of BeginConnect. - Change DoConnect to take a sockaddrs instead of an address/port. --- src/modules/m_spanningtree/treesocket1.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'src/modules/m_spanningtree/treesocket1.cpp') diff --git a/src/modules/m_spanningtree/treesocket1.cpp b/src/modules/m_spanningtree/treesocket1.cpp index 062d04222..fd20d04c4 100644 --- a/src/modules/m_spanningtree/treesocket1.cpp +++ b/src/modules/m_spanningtree/treesocket1.cpp @@ -36,7 +36,7 @@ * BufferedSocket, we just call DoConnect() for most of the action, * and only do minor initialization tasks ourselves. */ -TreeSocket::TreeSocket(Link* link, Autoconnect* myac, const std::string& ipaddr) +TreeSocket::TreeSocket(Link* link, Autoconnect* myac, const irc::sockets::sockaddrs& dest) : linkID(link->Name), LinkState(CONNECTING), MyRoot(NULL), proto_version(0) , burstsent(false), age(ServerInstance->Time()) { @@ -45,7 +45,17 @@ TreeSocket::TreeSocket(Link* link, Autoconnect* myac, const std::string& ipaddr) capab->ac = myac; capab->capab_phase = 0; - DoConnect(ipaddr, link->Port, link->Timeout, link->Bind); + irc::sockets::sockaddrs bind; + memset(&bind, 0, sizeof(bind)); + if ((dest.family() == AF_INET || dest.family() == AF_INET6) && !irc::sockets::aptosa(link->Bind, 0, bind)) + { + state = I_ERROR; + SetError("Bind address '" + link->Bind + "' is not an valid IPv4 or IPv6 address"); + TreeSocket::OnError(I_ERR_BIND); + return; + } + + DoConnect(dest, bind, link->Timeout); Utils->timeoutlist[this] = std::pair(linkID, link->Timeout); SendCapabilities(1); } -- cgit v1.3.1-10-gc9f91