From c3e52465901f11226616a2a93393c3d07295b45d Mon Sep 17 00:00:00 2001 From: w00t Date: Thu, 8 May 2008 16:54:16 +0000 Subject: Rename to m_connectban git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@9664 e03df62e-2008-0410-955e-edbf42e46eb7 --- docs/inspircd.conf.example | 26 ++++++------ src/modules/m_connectban.cpp | 96 ++++++++++++++++++++++++++++++++++++++++++++ src/modules/m_quitban.cpp | 96 -------------------------------------------- 3 files changed, 109 insertions(+), 109 deletions(-) create mode 100644 src/modules/m_connectban.cpp delete mode 100644 src/modules/m_quitban.cpp diff --git a/docs/inspircd.conf.example b/docs/inspircd.conf.example index f7898c7ec..66abfb955 100644 --- a/docs/inspircd.conf.example +++ b/docs/inspircd.conf.example @@ -1549,6 +1549,19 @@ # Channel cycle module. Server side /hop, with +ilk etc bypass. # +#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-# +# Connectban: Provides per-IP connection throttling. Any IP that disconnects +# too many times (configurable) in an hour is zlined for a (configurable) +# duration, and their count resets to 0. +# +# NOTE: This module may change name/behaviour later in 1.2. Please make sure +# you read release announcements! +# +# +# This allows for 10 quits in an hour with a 10 minute ban if that is exceeded. +# +# + #-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-# # Connection throttle module. Configuration: # @@ -2044,19 +2057,6 @@ # # -#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-# -# Quitban: Provides per-IP connection throttling. Any IP that disconnects -# too many times (configurable) in an hour is zlined for a (configurable) -# duration, and their count resets to 0. -# -# NOTE: This module may change name/behaviour later in 1.2. Please make sure -# you read release announcements! -# -# -# This allows for 10 quits in an hour with a 10 minute ban if that is exceeded. -# -# - #-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-# # Random Quote module: provides a random quote on connect. # NOTE: Some of these may mimic fatal errors and confuse users and diff --git a/src/modules/m_connectban.cpp b/src/modules/m_connectban.cpp new file mode 100644 index 000000000..a1ff0816c --- /dev/null +++ b/src/modules/m_connectban.cpp @@ -0,0 +1,96 @@ +/* +------------------------------------+ + * | Inspire Internet Relay Chat Daemon | + * +------------------------------------+ + * + * InspIRCd: (C) 2002-2008 InspIRCd Development Team + * See: http://www.inspircd.org/wiki/index.php/Credits + * + * This program is free but copyrighted software; see + * the file COPYING for details. + * + * --------------------------------------------------- + */ + +#include "inspircd.h" +#include "xline.h" + +/* $ModDesc: Throttles the connections of any users who try connect flood */ + +class ModuleQuitBan : public Module +{ + private: + clonemap connects; + unsigned int threshold; + unsigned int banduration; + public: + ModuleQuitBan(InspIRCd* Me) : Module(Me) + { + Implementation eventlist[] = { I_OnUserConnect, I_OnGarbageCollect, I_OnRehash }; + ServerInstance->Modules->Attach(eventlist, this, 3); + OnRehash(NULL, ""); + } + + virtual ~ModuleQuitBan() + { + } + + virtual Version GetVersion() + { + return Version(1,2,0,0,VF_VENDOR,API_VERSION); + } + + virtual void OnRehash(User* user, const std::string ¶meter) + { + ConfigReader Conf(ServerInstance); + std::string duration; + + threshold = Conf.ReadInteger("connectban", "threshold", 0, true); + + if (threshold == 0) + threshold = 10; + + duration = Conf.ReadValue("connectban", "duration", 0, true); + + if (duration.empty()) + duration = "10m"; + + banduration = ServerInstance->Duration(duration); + } + + virtual void OnUserConnect(User *u) + { + clonemap::iterator i = connects.find(u->GetIPString()); + + if (i != connects.end()) + { + i->second++; + ServerInstance->Logs->Log("m_connectban",DEBUG, "Count for IP is now %d", i->second); + + if (i->second >= threshold) + { + // Create zline for set duration. + ZLine* zl = new ZLine(ServerInstance, ServerInstance->Time(), banduration, ServerInstance->Config->ServerName, "Connect flooding", u->GetIPString()); + if (ServerInstance->XLines->AddLine(zl,NULL)) + ServerInstance->XLines->ApplyLines(); + else + delete zl; + + ServerInstance->SNO->WriteToSnoMask('x', "Connect flooding from IP %s (%d)", u->GetIPString(), threshold); + connects.erase(i); + } + } + else + { + connects[u->GetIPString()] = 1; + ServerInstance->Logs->Log("m_quitban",DEBUG, "Added new record"); + } + } + + virtual void OnGarbageCollect() + { + ServerInstance->Logs->Log("m_quitban",DEBUG, "Clearing map."); + connects.clear(); + } +}; + +MODULE_INIT(ModuleQuitBan) diff --git a/src/modules/m_quitban.cpp b/src/modules/m_quitban.cpp deleted file mode 100644 index a1ff0816c..000000000 --- a/src/modules/m_quitban.cpp +++ /dev/null @@ -1,96 +0,0 @@ -/* +------------------------------------+ - * | Inspire Internet Relay Chat Daemon | - * +------------------------------------+ - * - * InspIRCd: (C) 2002-2008 InspIRCd Development Team - * See: http://www.inspircd.org/wiki/index.php/Credits - * - * This program is free but copyrighted software; see - * the file COPYING for details. - * - * --------------------------------------------------- - */ - -#include "inspircd.h" -#include "xline.h" - -/* $ModDesc: Throttles the connections of any users who try connect flood */ - -class ModuleQuitBan : public Module -{ - private: - clonemap connects; - unsigned int threshold; - unsigned int banduration; - public: - ModuleQuitBan(InspIRCd* Me) : Module(Me) - { - Implementation eventlist[] = { I_OnUserConnect, I_OnGarbageCollect, I_OnRehash }; - ServerInstance->Modules->Attach(eventlist, this, 3); - OnRehash(NULL, ""); - } - - virtual ~ModuleQuitBan() - { - } - - virtual Version GetVersion() - { - return Version(1,2,0,0,VF_VENDOR,API_VERSION); - } - - virtual void OnRehash(User* user, const std::string ¶meter) - { - ConfigReader Conf(ServerInstance); - std::string duration; - - threshold = Conf.ReadInteger("connectban", "threshold", 0, true); - - if (threshold == 0) - threshold = 10; - - duration = Conf.ReadValue("connectban", "duration", 0, true); - - if (duration.empty()) - duration = "10m"; - - banduration = ServerInstance->Duration(duration); - } - - virtual void OnUserConnect(User *u) - { - clonemap::iterator i = connects.find(u->GetIPString()); - - if (i != connects.end()) - { - i->second++; - ServerInstance->Logs->Log("m_connectban",DEBUG, "Count for IP is now %d", i->second); - - if (i->second >= threshold) - { - // Create zline for set duration. - ZLine* zl = new ZLine(ServerInstance, ServerInstance->Time(), banduration, ServerInstance->Config->ServerName, "Connect flooding", u->GetIPString()); - if (ServerInstance->XLines->AddLine(zl,NULL)) - ServerInstance->XLines->ApplyLines(); - else - delete zl; - - ServerInstance->SNO->WriteToSnoMask('x', "Connect flooding from IP %s (%d)", u->GetIPString(), threshold); - connects.erase(i); - } - } - else - { - connects[u->GetIPString()] = 1; - ServerInstance->Logs->Log("m_quitban",DEBUG, "Added new record"); - } - } - - virtual void OnGarbageCollect() - { - ServerInstance->Logs->Log("m_quitban",DEBUG, "Clearing map."); - connects.clear(); - } -}; - -MODULE_INIT(ModuleQuitBan) -- cgit v1.2.3