diff options
author | Attila Molnar <attilamolnar@hush.com> | 2016-02-12 18:30:01 +0100 |
---|---|---|
committer | Attila Molnar <attilamolnar@hush.com> | 2016-02-12 18:30:01 +0100 |
commit | 748b3a0d89e7ecc9a766471b79fb78f63a5ca2bb (patch) | |
tree | ef50b5b36a75faa7fa655345625886972c696398 | |
parent | bbd8815115acc7e463daa0f7bcd156cb3e51e6d5 (diff) |
m_dccallow Add config option to control max entries on a list
Default to 20
-rw-r--r-- | docs/conf/modules.conf.example | 3 | ||||
-rw-r--r-- | src/modules/m_dccallow.cpp | 11 |
2 files changed, 12 insertions, 2 deletions
diff --git a/docs/conf/modules.conf.example b/docs/conf/modules.conf.example index 98b614acd..97d69da90 100644 --- a/docs/conf/modules.conf.example +++ b/docs/conf/modules.conf.example @@ -671,6 +671,7 @@ # length - Default duration of entries in DCCALLOW list. # action - Default action to take if no action is # specified, can be 'block' or 'allow'. +# maxentries - Max number of nicks to allow on a DCCALLOW list. # # File configuration: # pattern - The glob pattern to match against. @@ -678,7 +679,7 @@ # that matches this pattern, can be 'block' or # 'allow'. # -#<dccallow blockchat="yes" length="5m" action="block"> +#<dccallow blockchat="yes" length="5m" action="block" maxentries="20"> #<banfile pattern="*.exe" action="block"> #<banfile pattern="*.txt" action="allow"> diff --git a/src/modules/m_dccallow.cpp b/src/modules/m_dccallow.cpp index 829c1d337..043486283 100644 --- a/src/modules/m_dccallow.cpp +++ b/src/modules/m_dccallow.cpp @@ -58,6 +58,7 @@ SimpleExtItem<dccallowlist>* ext; class CommandDccallow : public Command { public: + unsigned int maxentries; CommandDccallow(Module* parent) : Command(parent, "DCCALLOW", 0) { syntax = "[(+|-)<nick> [<time>]]|[LIST|HELP]"; @@ -140,6 +141,12 @@ class CommandDccallow : public Command ul.push_back(user); } + if (dl->size() >= maxentries) + { + user->WriteNumeric(996, "%s %s :Too many nicks on DCCALLOW list", user->nick.c_str(), user->nick.c_str()); + return CMD_FAILURE; + } + for (dccallowlist::const_iterator k = dl->begin(); k != dl->end(); ++k) { if (k->nickname == target->nick) @@ -264,7 +271,7 @@ class ModuleDCCAllow : public Module ext = new SimpleExtItem<dccallowlist>("dccallow", this); ServerInstance->Modules->AddService(*ext); ServerInstance->Modules->AddService(cmd); - ReadFileConf(); + OnRehash(NULL); Implementation eventlist[] = { I_OnUserPreMessage, I_OnUserPreNotice, I_OnUserQuit, I_OnUserPostNick, I_OnRehash }; ServerInstance->Modules->Attach(eventlist, this, sizeof(eventlist)/sizeof(Implementation)); } @@ -272,6 +279,8 @@ class ModuleDCCAllow : public Module virtual void OnRehash(User* user) { ReadFileConf(); + ConfigTag* tag = ServerInstance->Config->ConfValue("dccallow"); + cmd.maxentries = tag->getInt("maxentries", 20); } virtual void OnUserQuit(User* user, const std::string &reason, const std::string &oper_message) |