]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_dccallow.cpp
Rename core_privmsg to core_message.
[user/henk/code/inspircd.git] / src / modules / m_dccallow.cpp
index f2d6bf105d03366767acc430959c58e9cc1c580c..d9e26d28f6d46155aa818bcd27f1d34f3119e1df 100644 (file)
@@ -106,6 +106,7 @@ class CommandDccallow : public Command
 
  public:
        unsigned int maxentries;
+       unsigned long defaultlength;
        CommandDccallow(Module* parent, DCCAllowExt& Ext)
                : Command(parent, "DCCALLOW", 0)
                , ext(Ext)
@@ -206,20 +207,23 @@ class CommandDccallow : public Command
                                        }
 
                                        std::string mask = target->nick+"!"+target->ident+"@"+target->GetDisplayedHost();
-                                       std::string default_length = ServerInstance->Config->ConfValue("dccallow")->getString("length");
-
                                        unsigned long length;
                                        if (parameters.size() < 2)
                                        {
-                                               length = InspIRCd::Duration(default_length);
+                                               length = defaultlength;
                                        }
-                                       else if (!atoi(parameters[1].c_str()))
+                                       else if (!InspIRCd::IsValidDuration(parameters[1]))
                                        {
-                                               length = 0;
+                                               user->WriteNumeric(ERR_DCCALLOWINVALID, user->nick, InspIRCd::Format("%s is not a valid DCCALLOW duration", parameters[1].c_str()));
+                                               return CMD_FAILURE;
                                        }
                                        else
                                        {
-                                               length = InspIRCd::Duration(parameters[1]);
+                                               if (!InspIRCd::Duration(parameters[1], length))
+                                               {
+                                                       user->WriteNotice("*** Invalid duration for DCC allow");
+                                                       return CMD_FAILURE;
+                                               }
                                        }
 
                                        if (!InspIRCd::IsValidMask(mask))
@@ -292,11 +296,14 @@ class ModuleDCCAllow : public Module
 {
        DCCAllowExt ext;
        CommandDccallow cmd;
+       bool blockchat;
+       std::string defaultaction;
 
  public:
        ModuleDCCAllow()
                : ext("dccallow", ExtensionItem::EXT_USER, this)
                , cmd(this, ext)
+               , blockchat(false)
        {
        }
 
@@ -355,9 +362,6 @@ class ModuleDCCAllow : public Module
 
                                        const std::string type = buf.substr(0, s);
 
-                                       ConfigTag* conftag = ServerInstance->Config->ConfValue("dccallow");
-                                       bool blockchat = conftag->getBool("blockchat");
-
                                        if (stdalgo::string::equalsci(type, "SEND"))
                                        {
                                                size_t first;
@@ -383,7 +387,6 @@ class ModuleDCCAllow : public Module
                                                if (s == std::string::npos)
                                                        return MOD_RES_PASSTHRU;
 
-                                               std::string defaultaction = conftag->getString("action");
                                                std::string filename = buf.substr(first, s);
 
                                                bool found = false;
@@ -506,18 +509,22 @@ class ModuleDCCAllow : public Module
 
        void ReadConfig(ConfigStatus& status) CXX11_OVERRIDE
        {
-               ConfigTag* tag = ServerInstance->Config->ConfValue("dccallow");
-               cmd.maxentries = tag->getUInt("maxentries", 20);
-
-               bfl.clear();
+               bannedfilelist newbfl;
                ConfigTagList tags = ServerInstance->Config->ConfTags("banfile");
                for (ConfigIter i = tags.first; i != tags.second; ++i)
                {
                        BannedFileList bf;
                        bf.filemask = i->second->getString("pattern");
                        bf.action = i->second->getString("action");
-                       bfl.push_back(bf);
+                       newbfl.push_back(bf);
                }
+               bfl.swap(newbfl);
+
+               ConfigTag* tag = ServerInstance->Config->ConfValue("dccallow");
+               cmd.maxentries = tag->getUInt("maxentries", 20);
+               cmd.defaultlength = tag->getDuration("length", 0);
+               blockchat = tag->getBool("blockchat");
+               defaultaction = tag->getString("action");
        }
 
        Version GetVersion() CXX11_OVERRIDE