aboutsummaryrefslogtreecommitdiff
path: root/src/modules/m_spanningtree
diff options
context:
space:
mode:
authorGravatar Sadie Powell2022-05-07 17:01:53 +0100
committerGravatar Sadie Powell2022-05-07 17:05:16 +0100
commita8e6cbf414b4f42f7da3b2ed86914c04bdb45eb8 (patch)
tree232bfe18e122c660c4ebbf00277ad27f850c14ad /src/modules/m_spanningtree
parentFix the argon2 package name on newer versions of Debian. (diff)
Make linking servers over UNIX sockets less difficult.
Closes #1730.
Diffstat (limited to 'src/modules/m_spanningtree')
-rw-r--r--src/modules/m_spanningtree/utils.cpp19
1 files changed, 15 insertions, 4 deletions
diff --git a/src/modules/m_spanningtree/utils.cpp b/src/modules/m_spanningtree/utils.cpp
index 84d96e098..1a8935e93 100644
--- a/src/modules/m_spanningtree/utils.cpp
+++ b/src/modules/m_spanningtree/utils.cpp
@@ -211,7 +211,8 @@ void SpanningTreeUtilities::RefreshIPCache()
for (std::vector<reference<Link> >::iterator i = LinkBlocks.begin(); i != LinkBlocks.end(); ++i)
{
Link* L = *i;
- if (!L->Port)
+ bool isunix = L->IPAddr.find('/') != std::string::npos;
+ if (!L->Port && !isunix)
{
ServerInstance->Logs->Log(MODNAME, LOG_DEFAULT, "Ignoring a link block without a port.");
/* Invalid link block */
@@ -222,7 +223,7 @@ void SpanningTreeUtilities::RefreshIPCache()
irc::sockets::sockaddrs dummy;
bool ipvalid = irc::sockets::aptosa(L->IPAddr, L->Port, dummy);
- if ((L->IPAddr == "*") || (ipvalid))
+ if ((L->IPAddr == "*") || (isunix) || (ipvalid))
ValidIPs.push_back(L->IPAddr);
else if (this->Creator->DNS)
{
@@ -267,9 +268,19 @@ void SpanningTreeUtilities::ReadConfiguration()
for (std::string s; sep.GetToken(s);)
L->AllowMasks.push_back(s);
+ const std::string path = tag->getString("path");
+ if (path.empty())
+ {
+ L->IPAddr = tag->getString("ipaddr");
+ L->Port = tag->getUInt("port", 0);
+ }
+ else
+ {
+ L->IPAddr = ServerInstance->Config->Paths.PrependData(path);
+ L->Port = 0;
+ }
+
L->Name = tag->getString("name");
- L->IPAddr = tag->getString("ipaddr");
- L->Port = tag->getUInt("port", 0);
L->SendPass = tag->getString("sendpass", tag->getString("password"));
L->RecvPass = tag->getString("recvpass", tag->getString("password"));
L->Fingerprint = tag->getString("fingerprint");