Make the duration of nickflood and joinflood configurable.

This commit is contained in:
Peter Powell 2016-05-03 00:33:05 +01:00
parent d8a41d73a3
commit d4f84b8e30
3 changed files with 30 additions and 6 deletions

View File

@ -1007,8 +1007,11 @@
#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
# 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.
@ -1215,6 +1218,9 @@
# 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

View 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));
}
}
}

View 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;
}
}