]> git.netwichtig.de Git - user/henk/code/inspircd.git/commitdiff
m_dccallow Add config option to control max entries on a list
authorAttila Molnar <attilamolnar@hush.com>
Fri, 12 Feb 2016 17:30:01 +0000 (18:30 +0100)
committerAttila Molnar <attilamolnar@hush.com>
Fri, 12 Feb 2016 17:30:01 +0000 (18:30 +0100)
Default to 20

docs/conf/modules.conf.example
src/modules/m_dccallow.cpp

index 98b614acdffb182060c033f443b4f2d60e076be5..97d69da90477b77dac16bae68e3d2419d1bc0c5a 100644 (file)
 #  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.
 #                      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">
 
index 829c1d3378ce91a3229f4de51ef15a6fc7a47611..043486283365bd3f6467c388eb8244f5989aea62 100644 (file)
@@ -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)