X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fcommand_parse.cpp;h=bf025be7ce5c4f505c1b3b31138edeff382175f3;hb=36cb60f872712e8e5a59df74b5b36177addc4248;hp=c8f5daef6122154d247bc7cb327891c594229c8d;hpb=976bf3c16569cd419ad79dcbfcc0f0e904761825;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/command_parse.cpp b/src/command_parse.cpp index c8f5daef6..bf025be7c 100644 --- a/src/command_parse.cpp +++ b/src/command_parse.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. @@ -266,6 +266,16 @@ bool CommandParser::ProcessCommand(User *user, std::string &cmd) /* find the command, check it exists */ Commandtable::iterator cm = cmdlist.find(command); + /* Modify the user's penalty regardless of whether or not the command exists */ + bool do_more = true; + if (!user->HasPrivPermission("users/flood/no-throttle")) + { + // If it *doesn't* exist, give it a slightly heftier penalty than normal to deter flooding us crap + user->IncreasePenalty(cm != cmdlist.end() ? cm->second->Penalty : 2); + do_more = (user->Penalty < 10); + } + + if (cm == cmdlist.end()) { int MOD_RESULT = 0; @@ -336,14 +346,6 @@ bool CommandParser::ProcessCommand(User *user, std::string &cmd) if (MOD_RESULT == 1) return true; - /* Modify the user's penalty */ - bool do_more = true; - if (!user->HasPrivPermission("users/flood/no-throttle")) - { - user->IncreasePenalty(cm->second->Penalty); - do_more = (user->Penalty < 10); - } - /* activity resets the ping pending timer */ if (user->MyClass) user->nping = ServerInstance->Time() + user->MyClass->GetPingTime(); @@ -506,11 +508,11 @@ bool CommandParser::ReloadCommand(std::string cmd, User* user) cmdlist.erase(cmdlist.find(cmd)); RFCCommands.erase(cmd); - std::transform(cmd.begin(), cmd.end(), cmd.begin(), ::tolower); delete cmdptr; dlclose(command->second); } + std::transform(cmd.begin(), cmd.end(), cmd.begin(), ::tolower); snprintf(filename, MAXBUF, "cmd_%s.so", cmd.c_str()); const char* err = this->LoadCommand(filename); if (err) @@ -531,12 +533,12 @@ CmdResult CommandReload::Handle(const std::vector& parameters, User if (ServerInstance->Parser->ReloadCommand(parameters[0], user)) { user->WriteServ("NOTICE %s :*** Successfully reloaded command '%s'", user->nick.c_str(), parameters[0].c_str()); - ServerInstance->SNO->WriteToSnoMask('A', "RELOAD: %s reloaded the '%s' command.", user->nick.c_str(), parameters[0].c_str()); + ServerInstance->SNO->WriteToSnoMask('a', "RELOAD: %s reloaded the '%s' command.", user->nick.c_str(), parameters[0].c_str()); return CMD_SUCCESS; } else { - user->WriteServ("NOTICE %s :*** Could not reload command '%s' -- fix this problem, then /REHASH as soon as possible!", user->nick.c_str(), parameters[0].c_str()); + user->WriteServ("NOTICE %s :*** Could not reload command '%s'. The command will not work until reloaded successfully.", user->nick.c_str(), parameters[0].c_str()); return CMD_FAILURE; } }