X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules%2Fm_dccallow.cpp;h=97f0d2f13d916910e73b5f1eca9e80cde070d5cf;hb=b5e220008782b2d538cb8e6e3b1923af0c13fb99;hp=beb2b32e507846111d76b03f7cc8defc54412f55;hpb=43847ec9c7e1a195163eb4c529f1c92fd1ace0a4;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules/m_dccallow.cpp b/src/modules/m_dccallow.cpp index beb2b32e5..97f0d2f13 100644 --- a/src/modules/m_dccallow.cpp +++ b/src/modules/m_dccallow.cpp @@ -3,7 +3,7 @@ * +------------------------------------+ * * InspIRCd: (C) 2002-2009 InspIRCd Development Team - * See: http://www.inspircd.org/wiki/index.php/Credits + * See: http://wiki.inspircd.org/Credits * * This program is free but copyrighted software; see * the file COPYING for details. @@ -135,7 +135,7 @@ class CommandDccallow : public Command user->WriteNumeric(996, "%s %s :You cannot add yourself to your own DCCALLOW list!", user->nick.c_str(), user->nick.c_str()); return CMD_FAILURE; } - + if (!user->GetExt("dccallow_list", dl)) { dl = new dccallowlist; @@ -143,7 +143,7 @@ class CommandDccallow : public Command // add this user to the userlist ul.push_back(user); } - + for (dccallowlist::const_iterator k = dl->begin(); k != dl->end(); ++k) { if (k->nickname == target->nick) @@ -244,25 +244,25 @@ class CommandDccallow : public Command class ModuleDCCAllow : public Module { - CommandDccallow* mycommand; + CommandDccallow cmd; public: ModuleDCCAllow(InspIRCd* Me) - : Module(Me) + : Module(Me), cmd(Me) { Conf = new ConfigReader(ServerInstance); - mycommand = new CommandDccallow(ServerInstance); - ServerInstance->AddCommand(mycommand); + ServerInstance->AddCommand(&cmd); ReadFileConf(); Implementation eventlist[] = { I_OnUserPreMessage, I_OnUserPreNotice, I_OnUserQuit, I_OnUserPreNick, I_OnRehash }; ServerInstance->Modules->Attach(eventlist, this, 5); } - virtual void OnRehash(User* user, const std::string ¶meter) + virtual void OnRehash(User* user) { delete Conf; Conf = new ConfigReader(ServerInstance); + ReadFileConf(); } virtual void OnUserQuit(User* user, const std::string &reason, const std::string &oper_message) @@ -340,23 +340,26 @@ class ModuleDCCAllow : public Module std::string defaultaction = Conf->ReadValue("dccallow", "action", 0); std::string filename = tokens[2]; - if (defaultaction == "allow") - return 0; - + bool found = false; for (unsigned int i = 0; i < bfl.size(); i++) { if (InspIRCd::Match(filename, bfl[i].filemask, ascii_case_insensitive_map)) { + /* We have a matching badfile entry, override whatever the default action is */ if (bfl[i].action == "allow") return 0; - } - else - { - if (defaultaction == "allow") - return 0; + else + { + found = true; + break; + } } } - + + /* only follow the default action if no badfile matches were found above */ + if ((!found) && (defaultaction == "allow")) + return 0; + user->WriteServ("NOTICE %s :The user %s is not accepting DCC SENDs from you. Your file %s was not sent.", user->nick.c_str(), u->nick.c_str(), filename.c_str()); u->WriteServ("NOTICE %s :%s (%s@%s) attempted to send you a file named %s, which was blocked.", u->nick.c_str(), user->nick.c_str(), user->ident.c_str(), user->dhost.c_str(), filename.c_str()); u->WriteServ("NOTICE %s :If you trust %s and were expecting this, you can type /DCCALLOW HELP for information on the DCCALLOW system.", u->nick.c_str(), user->nick.c_str()); @@ -476,4 +479,3 @@ class ModuleDCCAllow : public Module }; MODULE_INIT(ModuleDCCAllow) -