If a SID was passed as the target user parameter or when it's an unregistered user reply with the "no such nick" (or the moral equivalent) message
if (parameters.size() >= 3)
{
IdentHostPair ih;
- User* find = ServerInstance->FindNick(target.c_str());
- if (find)
+ User* find = ServerInstance->FindNick(target);
+ if ((find) && (find->registered == REG_ALL))
{
ih.first = "*";
ih.second = find->GetIPString();
target = std::string("*@") + find->GetIPString();
}
else
- ih = ServerInstance->XLines->IdentSplit(target.c_str());
+ ih = ServerInstance->XLines->IdentSplit(target);
if (ih.first.empty())
{
if (parameters.size() >= 3)
{
IdentHostPair ih;
- User* find = ServerInstance->FindNick(target.c_str());
- if (find)
+ User* find = ServerInstance->FindNick(target);
+ if ((find) && (find->registered == REG_ALL))
{
ih.first = "*";
ih.second = find->GetIPString();
target = std::string("*@") + find->GetIPString();
}
else
- ih = ServerInstance->XLines->IdentSplit(target.c_str());
+ ih = ServerInstance->XLines->IdentSplit(target);
if (ih.first.empty())
{
if (parameters.size() >= 3)
{
IdentHostPair ih;
- User* find = ServerInstance->FindNick(target.c_str());
- if (find)
+ User* find = ServerInstance->FindNick(target);
+ if ((find) && (find->registered == REG_ALL))
{
ih.first = "*";
ih.second = find->GetIPString();
target = std::string("*@") + find->GetIPString();
}
else
- ih = ServerInstance->XLines->IdentSplit(target.c_str());
+ ih = ServerInstance->XLines->IdentSplit(target);
if (ih.first.empty())
{
else
dest = ServerInstance->FindNick(parameters[userindex]);
- if (dest)
+ if ((dest) && (dest->registered == REG_ALL))
{
/*
* Okay. Umpteenth attempt at doing this, so let's re-comment...
return CMD_FAILURE;
}
- User *u = ServerInstance->FindNick(target.c_str());
+ User *u = ServerInstance->FindNick(target);
- if (u)
+ if ((u) && (u->registered == REG_ALL))
{
target = u->GetIPString();
}
LastParseParams.clear();
LastParseTranslate.clear();
- if (!targetchannel && !targetuser)
+ if ((!targetchannel) && ((!targetuser) || (IS_SERVER(targetuser))))
{
user->WriteNumeric(ERR_NOSUCHNICK, "%s %s :No such nick/channel",user->nick.c_str(),target.c_str());
return;
User* dest = ServerInstance->FindNick(parameters[0]);
- if (!dest)
+ if ((!dest) || (dest->registered != REG_ALL))
{
user->WriteNumeric(ERR_NOSUCHNICK, "%s %s :No such nick/channel", user->nick.c_str(), parameters[0].c_str());
return CMD_FAILURE;
{
User* dest = ServerInstance->FindNick(parameters[0]);
- if (!dest)
+ if ((!dest) || (dest->registered != REG_ALL))
{
user->WriteNumeric(ERR_NOSUCHNICK, "%s %s :No such nick/channel", user->nick.c_str(), parameters[0].c_str());
return CMD_FAILURE;
{
User* dest = ServerInstance->FindNick(parameters[0]);
- if (!dest)
+ if ((!dest) || (dest->registered != REG_ALL))
{
user->WriteNumeric(ERR_NOSUCHNICK, "%s %s :No such nick/channel", user->nick.c_str(), parameters[0].c_str());
return CMD_FAILURE;
{
User* target = ServerInstance->FindNick(parameters[0]);
- if (!target)
+ if ((!target) || (target->registered != REG_ALL))
{
user->WriteServ("NOTICE %s :*** No such nickname: '%s'", user->nick.c_str(), parameters[0].c_str());
return CMD_FAILURE;
channel = ServerInstance->FindChan(channame);
/* Fix by brain - someone needs to learn to validate their input! */
- if (!target || !channel)
+ if ((!target) || (target->registered != REG_ALL) || (!channel))
{
- user->WriteNumeric(ERR_NOSUCHNICK, "%s %s :No such nick/channel", user->nick.c_str(), !target ? username.c_str() : channame.c_str());
+ user->WriteNumeric(ERR_NOSUCHNICK, "%s %s :No such nick/channel", user->nick.c_str(), !channel ? channame.c_str() : username.c_str());
return CMD_FAILURE;
}
CmdResult Handle (const std::vector<std::string>& parameters, User *user)
{
User* dest = ServerInstance->FindNick(parameters[0]);
- if (dest)
+ if ((dest) && (dest->registered == REG_ALL))
{
if (ServerInstance->ULine(dest->server))
{
Channel* channel = ServerInstance->FindChan(parameters[0]);
const char* reason = "";
- if (dest && channel)
+ if ((dest) && (dest->registered == REG_ALL) && (channel))
{
if (parameters.size() > 2)
{
return CMD_FAILURE;
}
- if (!target)
+ if ((!target) || (target->registered != REG_ALL))
{
user->WriteServ("NOTICE %s :*** No such nickname: '%s'", user->nick.c_str(), parameters[0].c_str());
return CMD_FAILURE;
Channel* channel = ServerInstance->FindChan(parameters[1]);
std::string reason;
- if (dest && channel)
+ if ((dest) && (dest->registered == REG_ALL) && (channel))
{
if (parameters.size() > 2)
reason = parameters[2];
CmdResult Handle (const std::vector<std::string>& parameters, User *user)
{
User* dest = ServerInstance->FindNick(parameters[0]);
- if (dest)
+ if ((dest) && (!IS_SERVER(dest)))
{
if (ServerInstance->ULine(dest->server))
{
CmdResult Handle(const std::vector<std::string>& parameters, User *user)
{
User* target = ServerInstance->FindNick(parameters[1]);
- if (!target)
+ if ((!target) || (IS_SERVER(target)))
{
ServerInstance->Logs->Log("m_sasl", DEBUG,"User not found in sasl ENCAP event: %s", parameters[1].c_str());
return CMD_FAILURE;
std::string target = parameters[0];
- User *find = ServerInstance->FindNick(target.c_str());
- if (find)
+ User *find = ServerInstance->FindNick(target);
+ if ((find) && (find->registered == REG_ALL))
target = std::string("*!*@") + find->GetIPString();
if (parameters.size() == 1)
bool TreeSocket::Away(const std::string &prefix, parameterlist ¶ms)
{
User* u = ServerInstance->FindNick(prefix);
- if (!u)
+ if ((!u) || (IS_SERVER(u)))
return true;
if (params.size())
{
else if (*(params[0].c_str()) != '#')
{
User* u = ServerInstance->FindUUID(params[0]);
- if (u)
+ if ((u) && (!IS_SERVER(u)))
{
if (item)
item->unserialize(FORMAT_NETWORK, u, value);
User* u = ServerInstance->FindUUID(prefix);
- if (u)
+ if ((u) && (!IS_SERVER(u)))
{
ServerInstance->OperQuit.set(u, params[0]);
params[0] = ":" + params[0];
User* u = ServerInstance->FindNick(params[0]);
time_t ts = atol(params[1].c_str());
- if (u && u->age == ts)
+ if ((u) && (!IS_SERVER(u)) && (u->age == ts))
{
Utils->DoOneToAllButSender(prefix,"SAVE",params,prefix);
{
User* target = ServerInstance->FindNickOnly(parameters[0]);
- if (!target)
+ if ((!target) || (target->registered != REG_ALL))
{
user->WriteNumeric(ERR_NOSUCHNICK, "%s %s :No such nickname", user->nick.c_str(), parameters[0].c_str());
return CMD_FAILURE;
{
User* dest = ServerInstance->FindNick(parameters[0]);
- if (!dest)
+ if ((!dest) || (IS_SERVER(dest))) // allow setting swhois using SWHOIS before reg
{
user->WriteNumeric(ERR_NOSUCHNICK, "%s %s :No such nick/channel", user->nick.c_str(), parameters[0].c_str());
return CMD_FAILURE;
User* u = ServerInstance->FindNick(parameters[0]);
Channel* c = ServerInstance->FindChan(parameters[1]);
- if ((!c) || (!u))
+ if ((!c) || (!u) || (u->registered != REG_ALL))
{
if (!c)
{