aboutsummaryrefslogtreecommitdiff
path: root/src/modules/m_spanningtree/utils.cpp
diff options
context:
space:
mode:
authorGravatar Sadie Powell2022-05-07 17:19:01 +0100
committerGravatar Sadie Powell2022-05-07 17:19:01 +0100
commita31baf263eb58f97eae19a9efc4e85f85e726a5f (patch)
treed12a75e015ac14bfbef28935074a57cd95101a20 /src/modules/m_spanningtree/utils.cpp
parentFix an off by one error in regex_posix. (diff)
parentMake linking servers over UNIX sockets less difficult. (diff)
Merge branch 'insp3' into master.
Diffstat (limited to 'src/modules/m_spanningtree/utils.cpp')
-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 58b908413..e104bd63d 100644
--- a/src/modules/m_spanningtree/utils.cpp
+++ b/src/modules/m_spanningtree/utils.cpp
@@ -202,7 +202,8 @@ void SpanningTreeUtilities::RefreshIPCache()
ValidIPs.clear();
for (std::shared_ptr<Link> L : LinkBlocks)
{
- if (!L->Port)
+ bool isunix = L->IPAddr.find('/') != std::string::npos;
+ if (!L->Port && !isunix)
{
ServerInstance->Logs.Normal(MODNAME, "Ignoring a link block without a port.");
/* Invalid link block */
@@ -213,7 +214,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)
{
@@ -257,9 +258,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 = static_cast<unsigned int>(tag->getUInt("port", 0, 0, UINT16_MAX));
+ }
+ else
+ {
+ L->IPAddr = ServerInstance->Config->Paths.PrependData(path);
+ L->Port = 0;
+ }
+
L->Name = tag->getString("name");
- L->IPAddr = tag->getString("ipaddr");
- L->Port = static_cast<unsigned int>(tag->getUInt("port", 0, 0, UINT16_MAX));
L->SendPass = tag->getString("sendpass", tag->getString("password"));
L->RecvPass = tag->getString("recvpass", tag->getString("password"));
L->Fingerprint = tag->getString("fingerprint");