X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules%2Fm_dccallow.cpp;h=56345932c56c0d3e92bd43b91a4cb3b0ad2a3815;hb=819147178db00008a215670992d0f532dd57f9e5;hp=39c8e33c63f61e0a9827975f55ac06b35aaf2499;hpb=8de87c2a9b5f5e68caac1ca06b1021ed69cb3d6a;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules/m_dccallow.cpp b/src/modules/m_dccallow.cpp index 39c8e33c6..56345932c 100644 --- a/src/modules/m_dccallow.cpp +++ b/src/modules/m_dccallow.cpp @@ -2,8 +2,8 @@ * | Inspire Internet Relay Chat Daemon | * +------------------------------------+ * - * InspIRCd: (C) 2002-2008 InspIRCd Development Team - * See: http://www.inspircd.org/wiki/index.php/Credits + * InspIRCd: (C) 2002-2009 InspIRCd Development Team + * See: http://wiki.inspircd.org/Credits * * This program is free but copyrighted software; see * the file COPYING for details. @@ -82,6 +82,11 @@ class CommandDccallow : public Command DisplayHelp(user); return CMD_FAILURE; } + else + { + user->WriteNumeric(998, "%s :DCCALLOW command not understood. For help on DCCALLOW, type /DCCALLOW HELP", user->nick.c_str()); + return CMD_FAILURE; + } } std::string nick = parameters[0].substr(1); @@ -125,6 +130,12 @@ class CommandDccallow : public Command } else if (action == '+') { + if (target == user) + { + 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; @@ -132,6 +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) @@ -139,11 +151,6 @@ class CommandDccallow : public Command user->WriteNumeric(996, "%s %s :%s is already on your DCCALLOW list", user->nick.c_str(), user->nick.c_str(), target->nick.c_str()); return CMD_FAILURE; } - else if (InspIRCd::Match(user->GetFullHost(), k->hostmask)) - { - 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; - } } std::string mask = std::string(target->nick)+"!"+std::string(target->ident)+"@"+std::string(target->dhost); @@ -195,7 +202,7 @@ class CommandDccallow : public Command void DisplayHelp(User* user) { - user->WriteNumeric(998, "%s :DCCALLOW [<+|->nick.c_str() [time]] [list] [help]", user->nick.c_str()); + user->WriteNumeric(998, "%s :DCCALLOW [<+|->nick [time]] [list] [help]", user->nick.c_str()); user->WriteNumeric(998, "%s :You may allow DCCs from specific users by specifying a", user->nick.c_str()); user->WriteNumeric(998, "%s :DCC allow for the user you want to receive DCCs from.", user->nick.c_str()); user->WriteNumeric(998, "%s :For example, to allow the user Brain to send you inspircd.exe", user->nick.c_str()); @@ -252,10 +259,11 @@ class ModuleDCCAllow : public Module } - 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) @@ -333,26 +341,30 @@ 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)) + 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 + { + found = true; + break; + } } - else - { - if (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()); - return 1; } + + /* 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()); + return 1; } else if ((type == "CHAT") && (blockchat)) { @@ -468,4 +480,3 @@ class ModuleDCCAllow : public Module }; MODULE_INIT(ModuleDCCAllow) -