From 96e4434f9078bf3db0dad96d56f35cbee53252d5 Mon Sep 17 00:00:00 2001 From: danieldg Date: Fri, 29 Jan 2010 00:08:45 +0000 Subject: 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 --- src/commands/cmd_who.cpp | 32 ++++++++++++-------------------- 1 file changed, 12 insertions(+), 20 deletions(-) (limited to 'src/commands/cmd_who.cpp') 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 = "|||||0 [ohurmMiaplf]"; } + CommandWho ( Module* parent) : Command(parent,"WHO", 1) { + syntax = "|||||0 [ohurmMiaplf]"; + } void SendWhoLine(User* user, const std::string &initial, Channel* ch, User* u, std::vector &whoresults); /** Handle command. * @param parameters The parameters to the comamnd @@ -228,7 +229,6 @@ CmdResult CommandWho::Handle (const std::vector& 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& 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& parameters, User * } } /* Send the results out */ - if ((ServerInstance->Config->MaxWhoResults && (whoresults.size() <= (size_t)ServerInstance->Config->MaxWhoResults)) || opt_unlimit) - { - for (std::vector::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::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) -- cgit v1.2.3