]> git.netwichtig.de Git - user/henk/code/inspircd.git/commitdiff
Make the duration of nickflood and joinflood configurable.
authorPeter Powell <petpow@saberuk.com>
Mon, 2 May 2016 23:33:05 +0000 (00:33 +0100)
committerPeter Powell <petpow@saberuk.com>
Fri, 16 Sep 2016 18:38:43 +0000 (19:38 +0100)
docs/conf/modules.conf.example
src/modules/m_joinflood.cpp
src/modules/m_nickflood.cpp

index 4352b0a09aee99b68ccfcbc5d6650a43de504e8e..5aa5bb15835dc35d277e16f4914c379a266de441 100644 (file)
 
 #-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
 # Join flood module: Adds support for join flood protection +j X:Y.
-# Closes the channel for 60 seconds if X users join in Y seconds.
+# Closes the channel for N seconds if X users join in Y seconds.
 #<module name="joinflood">
+#
+# The number of seconds to close the channel for:
+#<joinflood duration="1m">
 
 #-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
 # Jump server module: Adds support for the RPL_REDIR numeric.
 # Nickchange flood protection module: Provides channel mode +F X:Y
 # which allows up to X nick changes in Y seconds.
 #<module name="nickflood">
+#
+# The number of seconds to prevent nick changes for:
+#<nickflood duration="1m">
 
 #-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
 # Nicklock module: Let opers change a user's nick and then stop that
index 56131f0be3339a4022ff5a819f41ac22adb75b67..077ceff52c14ff7ea507f54ff2279bf06a089331 100644 (file)
@@ -23,6 +23,9 @@
 
 #include "inspircd.h"
 
+// The number of seconds the channel will be closed for.
+static unsigned int duration;
+
 /** Holds settings and state associated with channel mode +j
  */
 class joinfloodsettings
@@ -71,7 +74,7 @@ class joinfloodsettings
 
        void lock()
        {
-               unlocktime = ServerInstance->Time() + 60;
+               unlocktime = ServerInstance->Time() + duration;
        }
 
        bool operator==(const joinfloodsettings& other) const
@@ -129,6 +132,12 @@ class ModuleJoinFlood : public Module
        {
        }
 
+       void ReadConfig(ConfigStatus&) CXX11_OVERRIDE
+       {
+               ConfigTag* tag = ServerInstance->Config->ConfValue("joinflood");
+               duration = tag->getDuration("duration", 60, 10, 600);
+       }
+
        ModResult OnUserPreJoin(LocalUser* user, Channel* chan, const std::string& cname, std::string& privs, const std::string& keygiven) CXX11_OVERRIDE
        {
                if (chan)
@@ -159,7 +168,7 @@ class ModuleJoinFlood : public Module
                        {
                                f->clear();
                                f->lock();
-                               memb->chan->WriteNotice(InspIRCd::Format("This channel has been closed to new users for 60 seconds because there have been more than %d joins in %d seconds.", f->joins, f->secs));
+                               memb->chan->WriteNotice(InspIRCd::Format("This channel has been closed to new users for %u seconds because there have been more than %d joins in %d seconds.", duration, f->joins, f->secs));
                        }
                }
        }
index 39e097daa5b7aee1a566d1f6fbd22db99f50f6ee..abb3cdfafa4a1f4889cf103c3970a4d5802318f7 100644 (file)
@@ -20,6 +20,9 @@
 
 #include "inspircd.h"
 
+// The number of seconds nickname changing will be blocked for.
+static unsigned int duration;
+
 /** Holds settings and state associated with channel mode +F
  */
 class nickfloodsettings
@@ -72,7 +75,7 @@ class nickfloodsettings
 
        void lock()
        {
-               unlocktime = ServerInstance->Time() + 60;
+               unlocktime = ServerInstance->Time() + duration;
        }
 };
 
@@ -126,6 +129,12 @@ class ModuleNickFlood : public Module
        {
        }
 
+       void ReadConfig(ConfigStatus&) CXX11_OVERRIDE
+       {
+               ConfigTag* tag = ServerInstance->Config->ConfValue("nickflood");
+               duration = tag->getDuration("duration", 60, 10, 600);
+       }
+
        ModResult OnUserPreNick(LocalUser* user, const std::string& newnick) CXX11_OVERRIDE
        {
                for (User::ChanList::iterator i = user->chans.begin(); i != user->chans.end(); i++)
@@ -142,7 +151,7 @@ class ModuleNickFlood : public Module
 
                                if (f->islocked())
                                {
-                                       user->WriteNumeric(ERR_CANTCHANGENICK, InspIRCd::Format("%s has been locked for nickchanges for 60 seconds because there have been more than %u nick changes in %u seconds", channel->name.c_str(), f->nicks, f->secs));
+                                       user->WriteNumeric(ERR_CANTCHANGENICK, InspIRCd::Format("%s has been locked for nickchanges for %u seconds because there have been more than %u nick changes in %u seconds", channel->name.c_str(), duration, f->nicks, f->secs));
                                        return MOD_RES_DENY;
                                }
 
@@ -150,7 +159,7 @@ class ModuleNickFlood : public Module
                                {
                                        f->clear();
                                        f->lock();
-                                       channel->WriteNotice(InspIRCd::Format("No nick changes are allowed for 60 seconds because there have been more than %u nick changes in %u seconds.", f->nicks, f->secs));
+                                       channel->WriteNotice(InspIRCd::Format("No nick changes are allowed for %u seconds because there have been more than %u nick changes in %u seconds.", duration, f->nicks, f->secs));
                                        return MOD_RES_DENY;
                                }
                        }