X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules%2Fm_dccallow.cpp;h=7ae20bb3ab14e2049bd5fe799ba714d729dff071;hb=551d687ec6d7ce44be35fae0dd7345fe73c4f63a;hp=495a0da5a51fa92f88283a5ba628dd6d16a641f0;hpb=44f42a13de52c8025942ddab42f51feb36821782;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules/m_dccallow.cpp b/src/modules/m_dccallow.cpp index 495a0da5a..7ae20bb3a 100644 --- a/src/modules/m_dccallow.cpp +++ b/src/modules/m_dccallow.cpp @@ -25,7 +25,7 @@ #include "inspircd.h" -/* $ModDesc: Povides support for the /DCCALLOW command */ +/* $ModDesc: Provides support for the /DCCALLOW command */ class BannedFileList { @@ -102,7 +102,7 @@ class CommandDccallow : public Command std::string nick = parameters[0].substr(1); User *target = ServerInstance->FindNickOnly(nick); - if (target) + if ((target) && (!IS_SERVER(target)) && (!target->quitting) && (target->registered == REG_ALL)) { if (action == '-') @@ -149,14 +149,13 @@ class CommandDccallow : public Command } } - std::string mask = std::string(target->nick)+"!"+std::string(target->ident)+"@"+std::string(target->dhost); - ConfigReader Conf; - std::string default_length = Conf.ReadValue("dccallow", "length", 0); + std::string mask = target->nick+"!"+target->ident+"@"+target->dhost; + std::string default_length = ServerInstance->Config->ConfValue("dccallow")->getString("length"); - long length; + unsigned long length; if (parameters.size() < 2) { - length = ServerInstance->Duration(default_length); + length = InspIRCd::Duration(default_length); } else if (!atoi(parameters[1].c_str())) { @@ -164,7 +163,7 @@ class CommandDccallow : public Command } else { - length = ServerInstance->Duration(parameters[1]); + length = InspIRCd::Duration(parameters[1]); } if (!ServerInstance->IsValidMask(mask.c_str())) @@ -248,20 +247,24 @@ class CommandDccallow : public Command class ModuleDCCAllow : public Module { CommandDccallow cmd; - public: + public: ModuleDCCAllow() : cmd(this) + { + ext = NULL; + } + + void init() { ext = new SimpleExtItem("dccallow", this); - ServerInstance->Extensions.Register(ext); - ServerInstance->AddCommand(&cmd); + ServerInstance->Modules->AddService(*ext); + ServerInstance->Modules->AddService(cmd); ReadFileConf(); - Implementation eventlist[] = { I_OnUserPreMessage, I_OnUserPreNotice, I_OnUserQuit, I_OnUserPreNick, I_OnRehash }; - ServerInstance->Modules->Attach(eventlist, this, 5); + Implementation eventlist[] = { I_OnUserPreMessage, I_OnUserPreNotice, I_OnUserQuit, I_OnUserPostNick, I_OnRehash }; + ServerInstance->Modules->Attach(eventlist, this, sizeof(eventlist)/sizeof(Implementation)); } - virtual void OnRehash(User* user) { ReadFileConf(); @@ -274,7 +277,9 @@ class ModuleDCCAllow : public Module // remove their DCCALLOW list if they have one if (udl) { - RemoveFromUserlist(user); + userlist::iterator it = std::find(ul.begin(), ul.end(), user); + if (it != ul.end()) + ul.erase(it); } // remove them from any DCCALLOW lists @@ -282,10 +287,9 @@ class ModuleDCCAllow : public Module RemoveNick(user); } - virtual ModResult OnUserPreNick(User* user, const std::string &newnick) + virtual void OnUserPostNick(User* user, const std::string &oldnick) { RemoveNick(user); - return MOD_RES_PASSTHRU; } virtual ModResult OnUserPreMessage(User* user, void* dest, int target_type, std::string &text, char status, CUList &exempt_list) @@ -333,12 +337,12 @@ class ModuleDCCAllow : public Module irc::string type = tokens[1].c_str(); - ConfigReader Conf; - bool blockchat = Conf.ReadFlag("dccallow", "blockchat", 0); + ConfigTag* conftag = ServerInstance->Config->ConfValue("dccallow"); + bool blockchat = conftag->getBool("blockchat"); if (type == "SEND") { - std::string defaultaction = Conf.ReadValue("dccallow", "action", 0); + std::string defaultaction = conftag->getString("action"); std::string filename = tokens[2]; bool found = false; @@ -381,7 +385,7 @@ class ModuleDCCAllow : public Module void Expire() { - for (userlist::iterator iter = ul.begin(); iter != ul.end(); ++iter) + for (userlist::iterator iter = ul.begin(); iter != ul.end();) { User* u = (User*)(*iter); dl = ext->get(u); @@ -403,10 +407,11 @@ class ModuleDCCAllow : public Module } } } + ++iter; } else { - RemoveFromUserlist(u); + iter = ul.erase(iter); } } } @@ -414,7 +419,7 @@ class ModuleDCCAllow : public Module void RemoveNick(User* user) { /* Iterate through all DCCALLOW lists and remove user */ - for (userlist::iterator iter = ul.begin(); iter != ul.end(); ++iter) + for (userlist::iterator iter = ul.begin(); iter != ul.end();) { User *u = (User*)(*iter); dl = ext->get(u); @@ -434,10 +439,11 @@ class ModuleDCCAllow : public Module } } } + ++iter; } else { - RemoveFromUserlist(u); + iter = ul.erase(iter); } } } @@ -458,18 +464,15 @@ class ModuleDCCAllow : public Module void ReadFileConf() { - ConfigReader Conf; bfl.clear(); - for (int i = 0; i < Conf.Enumerate("banfile"); i++) + ConfigTagList tags = ServerInstance->Config->ConfTags("banfile"); + for (ConfigIter i = tags.first; i != tags.second; ++i) { BannedFileList bf; - std::string fileglob = Conf.ReadValue("banfile", "pattern", i); - std::string action = Conf.ReadValue("banfile", "action", i); - bf.filemask = fileglob; - bf.action = action; + bf.filemask = i->second->getString("pattern"); + bf.action = i->second->getString("action"); bfl.push_back(bf); } - } virtual ~ModuleDCCAllow() @@ -479,7 +482,7 @@ class ModuleDCCAllow : public Module virtual Version GetVersion() { - return Version("Povides support for the /DCCALLOW command", VF_COMMON | VF_VENDOR); + return Version("Provides support for the /DCCALLOW command", VF_COMMON | VF_VENDOR); } };