From cc01e2144c2c9a0fd5c71c9a32300906aa14a246 Mon Sep 17 00:00:00 2001 From: Adam Date: Thu, 21 Nov 2013 15:52:38 -0500 Subject: [PATCH] Allow multiple allowmasks in link blocks, #679 --- docs/conf/links.conf.example | 2 +- src/modules/m_spanningtree/link.h | 2 +- src/modules/m_spanningtree/utils.cpp | 9 ++++++--- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/docs/conf/links.conf.example b/docs/conf/links.conf.example index 382455bcd..b196c5621 100644 --- a/docs/conf/links.conf.example +++ b/docs/conf/links.conf.example @@ -29,7 +29,7 @@ # allowmask: Range of IP addresses to allow for this link. # Can be a CIDR (see example). - allowmask="69.58.44.0/24" + allowmask="69.58.44.0/24 127.0.0.0/8" # timeout: If defined, this option defines how long the server # will wait to consider the connect attempt failed and try the diff --git a/src/modules/m_spanningtree/link.h b/src/modules/m_spanningtree/link.h index b318c9bf2..21213fb3e 100644 --- a/src/modules/m_spanningtree/link.h +++ b/src/modules/m_spanningtree/link.h @@ -30,7 +30,7 @@ class Link : public refcountbase std::string SendPass; std::string RecvPass; std::string Fingerprint; - std::string AllowMask; + std::vector AllowMasks; bool HiddenFromStats; std::string Hook; int Timeout; diff --git a/src/modules/m_spanningtree/utils.cpp b/src/modules/m_spanningtree/utils.cpp index 6c3ee703c..c9abbd008 100644 --- a/src/modules/m_spanningtree/utils.cpp +++ b/src/modules/m_spanningtree/utils.cpp @@ -227,8 +227,7 @@ void SpanningTreeUtilities::RefreshIPCache() continue; } - if (L->AllowMask.length()) - ValidIPs.push_back(L->AllowMask); + std::copy(L->AllowMasks.begin(), L->AllowMasks.end(), std::back_inserter(ValidIPs)); irc::sockets::sockaddrs dummy; bool ipvalid = irc::sockets::aptosa(L->IPAddr, L->Port, dummy); @@ -277,7 +276,11 @@ void SpanningTreeUtilities::ReadConfiguration() reference L = new Link(tag); std::string linkname = tag->getString("name"); L->Name = linkname.c_str(); - L->AllowMask = tag->getString("allowmask"); + + irc::spacesepstream sep = tag->getString("allowmask"); + for (std::string s; sep.GetToken(s);) + L->AllowMasks.push_back(s); + L->IPAddr = tag->getString("ipaddr"); L->Port = tag->getInt("port"); L->SendPass = tag->getString("sendpass", tag->getString("password")); -- 2.39.2