diff options
author | Peter Powell <petpow@saberuk.com> | 2019-10-25 09:50:48 +0100 |
---|---|---|
committer | Peter Powell <petpow@saberuk.com> | 2019-10-25 09:53:27 +0100 |
commit | dc782bc846cf017475fb1c27f7cfed32db8f6518 (patch) | |
tree | 56f835368440357df0e94eb4ca5105a8618c2e88 | |
parent | 23d0ffcddeffcc719c7e7f5fbb1e9d851a46b598 (diff) |
Add a workaround for connectban hitting gateway IP addresses.
-rw-r--r-- | src/modules/m_connectban.cpp | 24 |
1 files changed, 23 insertions, 1 deletions
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<irc::sockets::cidr_mask, unsigned int> 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) |