From aa7394ca95906d891703ac0c1c5485ceeb31a155 Mon Sep 17 00:00:00 2001 From: Sadie Powell Date: Thu, 19 Sep 2024 01:19:30 +0100 Subject: Expand IPv6 addresses in connectban to avoid breaking S2S. --- src/modules/m_connectban.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'src/modules/m_connectban.cpp') diff --git a/src/modules/m_connectban.cpp b/src/modules/m_connectban.cpp index bcacfcc3a..9e33dc6b8 100644 --- a/src/modules/m_connectban.cpp +++ b/src/modules/m_connectban.cpp @@ -150,14 +150,20 @@ class ModuleConnectBan CXX11_FINAL if (i->second >= threshold) { + // If an IPv6 address begins with a colon then expand it + // slightly to avoid breaking the server protocol. + std::string maskstr = mask.str(); + if (maskstr[0] == ':') + maskstr.insert(maskstr.begin(), 1, '0'); + // Create Z-line for set duration. - ZLine* zl = new ZLine(ServerInstance->Time(), banduration, MODNAME "@" + ServerInstance->Config->ServerName, banmessage, mask.str()); + ZLine* zl = new ZLine(ServerInstance->Time(), banduration, MODNAME "@" + ServerInstance->Config->ServerName, banmessage, maskstr); if (!ServerInstance->XLines->AddLine(zl, NULL)) { delete zl; return; } - std::string maskstr = mask.str(); + ServerInstance->SNO->WriteToSnoMask('x', "%s added a timed Z-line on %s, expires in %s (on %s): %s", zl->source.c_str(), maskstr.c_str(), InspIRCd::DurationString(zl->duration).c_str(), InspIRCd::TimeString(zl->expiry).c_str(), zl->reason.c_str()); -- cgit v1.3.1-10-gc9f91