From dc782bc846cf017475fb1c27f7cfed32db8f6518 Mon Sep 17 00:00:00 2001 From: Peter Powell Date: Fri, 25 Oct 2019 09:50:48 +0100 Subject: Add a workaround for connectban hitting gateway IP addresses. --- src/modules/m_connectban.cpp | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/modules/m_connectban.cpp b/src/modules/m_connectban.cpp index 12b123498..dd9ae4f54 100644 --- a/src/modules/m_connectban.cpp +++ b/src/modules/m_connectban.cpp @@ -19,8 +19,11 @@ #include "inspircd.h" #include "xline.h" +#include "modules/webirc.h" -class ModuleConnectBan : public Module +class ModuleConnectBan + : public Module + , public WebIRC::EventListener { typedef std::map ConnectMap; ConnectMap connects; @@ -52,6 +55,11 @@ class ModuleConnectBan : public Module } public: + ModuleConnectBan() + : WebIRC::EventListener(this) + { + } + Version GetVersion() CXX11_OVERRIDE { return Version("Throttles the connections of IP ranges who try to connect flood", VF_VENDOR); @@ -68,6 +76,20 @@ class ModuleConnectBan : public Module banmessage = tag->getString("banmessage", "Your IP range has been attempting to connect too many times in too short a duration. Wait a while, and you will be able to connect."); } + void OnWebIRCAuth(LocalUser* user, const WebIRC::FlagMap* flags) CXX11_OVERRIDE + { + if (user->exempt) + return; + + // HACK: Lower the connection attempts for the gateway IP address. The user + // will be rechecked for connect spamming shortly after when their IP address + // is changed and OnSetUserIP is called. + irc::sockets::cidr_mask mask(user->client_sa, GetRange(user)); + ConnectMap::iterator iter = connects.find(mask); + if (iter != connects.end() && iter->second) + iter->second--; + } + void OnSetUserIP(LocalUser* u) CXX11_OVERRIDE { if (u->exempt) -- cgit v1.2.3