diff options
author | danieldg <danieldg@e03df62e-2008-0410-955e-edbf42e46eb7> | 2010-01-29 00:08:45 +0000 |
---|---|---|
committer | danieldg <danieldg@e03df62e-2008-0410-955e-edbf42e46eb7> | 2010-01-29 00:08:45 +0000 |
commit | 96e4434f9078bf3db0dad96d56f35cbee53252d5 (patch) | |
tree | 9a99a6cc7edda938c116307a917de9566677e943 | |
parent | 2b3d8e3d1841425af7412b3bf25657cf334c0175 (diff) |
Remove MaxWhoResults, replace with an increase of Penalty based on result list size
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@12325 e03df62e-2008-0410-955e-edbf42e46eb7
-rw-r--r-- | include/configreader.h | 5 | ||||
-rw-r--r-- | src/commands/cmd_who.cpp | 32 | ||||
-rw-r--r-- | src/configreader.cpp | 3 |
3 files changed, 12 insertions, 28 deletions
diff --git a/include/configreader.h b/include/configreader.h index eee16cb6c..3d01d7e91 100644 --- a/include/configreader.h +++ b/include/configreader.h @@ -409,11 +409,6 @@ class CoreExport ServerConfig */ unsigned int MaxTargets; - /** The maximum number of /WHO results allowed - * in any single /WHO command. - */ - int MaxWhoResults; - /** True if we're going to hide netsplits as *.net *.split for non-opers */ bool HideSplits; diff --git a/src/commands/cmd_who.cpp b/src/commands/cmd_who.cpp index 5c01d40fc..6aac6eeea 100644 --- a/src/commands/cmd_who.cpp +++ b/src/commands/cmd_who.cpp @@ -23,7 +23,6 @@ class CommandWho : public Command bool CanView(Channel* chan, User* user); bool opt_viewopersonly; bool opt_showrealhost; - bool opt_unlimit; bool opt_realname; bool opt_mode; bool opt_ident; @@ -37,7 +36,9 @@ class CommandWho : public Command public: /** Constructor for who. */ - CommandWho ( Module* parent) : Command(parent,"WHO", 1) { Penalty = 2; syntax = "<server>|<nickname>|<channel>|<realname>|<host>|0 [ohurmMiaplf]"; } + CommandWho ( Module* parent) : Command(parent,"WHO", 1) { + syntax = "<server>|<nickname>|<channel>|<realname>|<host>|0 [ohurmMiaplf]"; + } void SendWhoLine(User* user, const std::string &initial, Channel* ch, User* u, std::vector<std::string> &whoresults); /** Handle command. * @param parameters The parameters to the comamnd @@ -228,7 +229,6 @@ CmdResult CommandWho::Handle (const std::vector<std::string>& parameters, User * /* WHO options */ opt_viewopersonly = false; opt_showrealhost = false; - opt_unlimit = false; opt_realname = false; opt_mode = false; opt_ident = false; @@ -277,10 +277,6 @@ CmdResult CommandWho::Handle (const std::vector<std::string>& parameters, User * if (user->HasPrivPermission("users/auspex")) opt_showrealhost = true; break; - case 'u': - if (user->HasPrivPermission("users/auspex")) - opt_unlimit = true; - break; case 'r': opt_realname = true; break; @@ -388,19 +384,15 @@ CmdResult CommandWho::Handle (const std::vector<std::string>& parameters, User * } } /* Send the results out */ - if ((ServerInstance->Config->MaxWhoResults && (whoresults.size() <= (size_t)ServerInstance->Config->MaxWhoResults)) || opt_unlimit) - { - for (std::vector<std::string>::const_iterator n = whoresults.begin(); n != whoresults.end(); n++) - user->WriteServ(*n); - user->WriteNumeric(315, "%s %s :End of /WHO list.",user->nick.c_str(), *parameters[0].c_str() ? parameters[0].c_str() : "*"); - return CMD_SUCCESS; - } - else - { - /* BZZT! Too many results. */ - user->WriteNumeric(315, "%s %s :Too many results",user->nick.c_str(), parameters[0].c_str()); - return CMD_FAILURE; - } + for (std::vector<std::string>::const_iterator n = whoresults.begin(); n != whoresults.end(); n++) + user->WriteServ(*n); + user->WriteNumeric(315, "%s %s :End of /WHO list.",user->nick.c_str(), *parameters[0].c_str() ? parameters[0].c_str() : "*"); + + // Penalize the user a bit for large queries + // (add one unit of penalty per 200 results) + if (IS_LOCAL(user)) + IS_LOCAL(user)->CommandFloodPenalty += whoresults.size() * 5; + return CMD_SUCCESS; } COMMAND_INIT(CommandWho) diff --git a/src/configreader.cpp b/src/configreader.cpp index 6057420c8..04763cbab 100644 --- a/src/configreader.cpp +++ b/src/configreader.cpp @@ -42,7 +42,6 @@ ServerConfig::ServerConfig() NetBufferSize = 10240; SoftLimit = ServerInstance->SE->GetMaxFds(); MaxConn = SOMAXCONN; - MaxWhoResults = 0; MaxChans = 20; OperMaxChans = 30; c_ipv4_range = 32; @@ -452,7 +451,6 @@ void ServerConfig::Fill() AdminNick = ConfValue("admin")->getString("nick", "admin"); ModPath = ConfValue("path")->getString("moduledir", MOD_PATH); NetBufferSize = ConfValue("performance")->getInt("netbuffersize", 10240); - MaxWhoResults = ConfValue("performance")->getInt("maxwho", 1024); dns_timeout = ConfValue("dns")->getInt("timeout", 5); DisabledCommands = ConfValue("disabled")->getString("commands", ""); DisabledDontExist = ConfValue("disabled")->getBool("fakenonexistant"); @@ -496,7 +494,6 @@ void ServerConfig::Fill() range(MaxConn, 0, SOMAXCONN, SOMAXCONN, "<performance:somaxconn>"); range(MaxTargets, 1, 31, 20, "<security:maxtargets>"); range(NetBufferSize, 1024, 65534, 10240, "<performance:netbuffersize>"); - range(MaxWhoResults, 1, 65535, 1024, "<performace:maxwho>"); range(WhoWasGroupSize, 0, 10000, 10, "<whowas:groupsize>"); range(WhoWasMaxGroups, 0, 1000000, 10240, "<whowas:maxgroups>"); range(WhoWasMaxKeep, 3600, INT_MAX, 3600, "<whowas:maxkeep>"); |