Use FindNickOnly in a few commands to prevent enumerating users via UID walking

This commit is contained in:
Daniel De Graaf 2010-04-02 10:39:15 -05:00
parent cd6b7a8cda
commit 3cf9935005
6 changed files with 17 additions and 7 deletions

View File

@ -41,7 +41,12 @@ CmdResult CommandInvite::Handle (const std::vector<std::string>& parameters, Use
if (parameters.size() == 2 || parameters.size() == 3)
{
User* u = ServerInstance->FindNick(parameters[0]);
User* u;
if (IS_LOCAL(user))
u = ServerInstance->FindNickOnly(parameters[0]);
else
u = ServerInstance->FindNick(parameters[0]);
Channel* c = ServerInstance->FindChan(parameters[1]);
time_t timeout = 0;
if (parameters.size() == 3)

View File

@ -54,7 +54,7 @@ CmdResult CommandIson::Handle (const std::vector<std::string>& parameters, User
for (unsigned int i = 0; i < parameters.size(); i++)
{
u = ServerInstance->FindNick(parameters[i]);
u = ServerInstance->FindNickOnly(parameters[i]);
if (ison_already.find(u) != ison_already.end())
continue;
@ -79,7 +79,7 @@ CmdResult CommandIson::Handle (const std::vector<std::string>& parameters, User
while (list.GetToken(item))
{
u = ServerInstance->FindNick(item);
u = ServerInstance->FindNickOnly(item);
if (ison_already.find(u) != ison_already.end())
continue;

View File

@ -40,11 +40,16 @@ CmdResult CommandKick::Handle (const std::vector<std::string>& parameters, User
{
std::string reason;
Channel* c = ServerInstance->FindChan(parameters[0]);
User* u = ServerInstance->FindNick(parameters[1]);
User* u;
if (ServerInstance->Parser->LoopCall(user, this, parameters, 1))
return CMD_SUCCESS;
if (IS_LOCAL(user))
u = ServerInstance->FindNickOnly(parameters[1]);
else
u = ServerInstance->FindNick(parameters[1]);
if (!u || !c)
{
user->WriteServ( "401 %s %s :No such nick/channel", user->nick.c_str(), u ? parameters[0].c_str() : parameters[1].c_str());

View File

@ -50,7 +50,7 @@ CmdResult CommandUserhost::Handle (const std::vector<std::string>& parameters, U
for (unsigned int i = 0; i < parameters.size(); i++)
{
User *u = ServerInstance->FindNick(parameters[i]);
User *u = ServerInstance->FindNickOnly(parameters[i]);
if ((u) && (u->registered == REG_ALL))
{

View File

@ -88,7 +88,7 @@ class CommandDccallow : public Command
}
std::string nick = parameters[0].substr(1);
User *target = ServerInstance->FindNick(nick);
User *target = ServerInstance->FindNickOnly(nick);
if (target)
{

View File

@ -83,7 +83,7 @@ class CommandSSLInfo : public Command
CmdResult Handle (const std::vector<std::string> &parameters, User *user)
{
User* target = ServerInstance->FindNick(parameters[0]);
User* target = ServerInstance->FindNickOnly(parameters[0]);
if (!target)
{