]> git.netwichtig.de Git - user/henk/code/inspircd.git/commitdiff
Add IS_SERVER() and REG_ALL checks to (mostly oper only) commands taking a target...
authorattilamolnar <attilamolnar@hush.com>
Mon, 19 Nov 2012 02:37:59 +0000 (03:37 +0100)
committerattilamolnar <attilamolnar@hush.com>
Sat, 15 Dec 2012 18:47:40 +0000 (19:47 +0100)
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

25 files changed:
src/commands/cmd_eline.cpp
src/commands/cmd_gline.cpp
src/commands/cmd_kline.cpp
src/commands/cmd_whois.cpp
src/commands/cmd_zline.cpp
src/mode.cpp
src/modules/m_chghost.cpp
src/modules/m_chgident.cpp
src/modules/m_chgname.cpp
src/modules/m_nicklock.cpp
src/modules/m_remove.cpp
src/modules/m_sajoin.cpp
src/modules/m_sakick.cpp
src/modules/m_sanick.cpp
src/modules/m_sapart.cpp
src/modules/m_saquit.cpp
src/modules/m_sasl.cpp
src/modules/m_shun.cpp
src/modules/m_spanningtree/away.cpp
src/modules/m_spanningtree/metadata.cpp
src/modules/m_spanningtree/operquit.cpp
src/modules/m_spanningtree/save.cpp
src/modules/m_sslinfo.cpp
src/modules/m_swhois.cpp
src/modules/m_uninvite.cpp

index 43eb678eeefe3ef8416037755f79bc52f5ce08a2..ca39f9061dcbda1c9faa6de31da225820eba7864 100644 (file)
@@ -50,15 +50,15 @@ CmdResult CommandEline::Handle (const std::vector<std::string>& parameters, User
        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())
         {
index 430256be8f52d9644db02a3cfd734cb0991892b0..6505b7464615804ad272018e1e883eab12fa557b 100644 (file)
@@ -51,15 +51,15 @@ CmdResult CommandGline::Handle (const std::vector<std::string>& parameters, User
        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())
                {
index b1f5f62db8959dfacc65777c4bfb91c7412a9bca..ce3642f91a70f8be66f7bd6a09c7e8357e7fe7b3 100644 (file)
@@ -51,15 +51,15 @@ CmdResult CommandKline::Handle (const std::vector<std::string>& parameters, User
        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())
         {
index 00a9b3409f7192e90eb03f7d2a3b5f27200cca93..ba2ad9c1526e1a83b8ad8f2518333f48de66270a 100644 (file)
@@ -64,7 +64,7 @@ CmdResult CommandWhois::Handle (const std::vector<std::string>& parameters, User
        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...
index 3e940a9bd42ad19f936150ae197bc63e20c34940..91d9c6255962e1a10b6aecdbfda9e99370033e79 100644 (file)
@@ -53,9 +53,9 @@ CmdResult CommandZline::Handle (const std::vector<std::string>& parameters, User
                        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();
                }
index 35f64ce00aca616f8f19de4a0871f9d07870bc38..e2b0c2f6893f5a86dced6da289563c5a5f7e3d19 100644 (file)
@@ -387,7 +387,7 @@ void ModeParser::Process(const std::vector<std::string>& parameters, User *user,
        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;
index 4d39127e7923b2aa4d159acf3dc92f2ee9f1a50e..ac318f9af1d69895d6efbe9e6bd3ab68cdb3b247 100644 (file)
@@ -58,7 +58,7 @@ class CommandChghost : public Command
 
                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;
index 968497f8c6046e679340dceee7fe3e0385e1d66a..7dfd71c972de5964147dec72e010e25e8455a45e 100644 (file)
@@ -40,7 +40,7 @@ class CommandChgident : public Command
        {
                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;
index aadf29fdb4532b54fe82aebda8d0b4b427e7b127..3ce1da5ec6ca192de72355d129f1fe747c0856ef 100644 (file)
@@ -38,7 +38,7 @@ class CommandChgname : public Command
        {
                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;
index a67c1b433b7da036a22829f11ce8b8484f2a44f7..abeb258691c30283caff0eaa1ba860a22f8da9b8 100644 (file)
@@ -42,7 +42,7 @@ class CommandNicklock : public Command
        {
                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;
index ffb8f8e551f7ac0c11b792b17dc84a4580e460f6..86f50ad625d9ad351dda7687f9e982c6063aabab 100644 (file)
@@ -69,9 +69,9 @@ class RemoveBase : public Command
                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;
                }
 
index d3c939b04219a9d8c495641cd7dc2b79c74265df..63d51f86d41d53179b166abc51416d7599ffb7f8 100644 (file)
@@ -37,7 +37,7 @@ class CommandSajoin : public Command
        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))
                        {
index efd991ff0c6aa34f76b837bae268cce289006ed4..7dfcd8904db3b7e8531059e270274a6eac547cb5 100644 (file)
@@ -39,7 +39,7 @@ class CommandSakick : public Command
                Channel* channel = ServerInstance->FindChan(parameters[0]);
                const char* reason = "";
 
-               if (dest && channel)
+               if ((dest) && (dest->registered == REG_ALL) && (channel))
                {
                        if (parameters.size() > 2)
                        {
index 722c9596dd0d5626f0d208bc4fefc3b05c03b8d6..cf093d28a713080f80005cb72b628ff78f166800 100644 (file)
@@ -47,7 +47,7 @@ class CommandSanick : public Command
                                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;
index 6bd961ea7d8e10667947680952870d8d32c60cae..89256e0e480bfc5cc9811e69a27f4a12d66b545e 100644 (file)
@@ -40,7 +40,7 @@ class CommandSapart : public Command
                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];
index 6afae913d5cabd64b1d23cdf841eab9d88168ea0..3b7bdc8245743ec5fc3868473de8bbad862fb74f 100644 (file)
@@ -37,7 +37,7 @@ class CommandSaquit : public Command
        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))
                        {
index 943f45bd3755f93713f70d16a2529b4a8a3e803d..59751588eaa8d8640645436d4037848374e4fc7d 100644 (file)
@@ -208,7 +208,7 @@ class CommandSASL : public Command
        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;
index 39e23f22e7fc458b3ce25b7a0f9d95544d1c53fe..21959e40069abcbc1e83af27d1bd6eb1d6a2fa89 100644 (file)
@@ -108,8 +108,8 @@ class CommandShun : public Command
 
                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)
index 3b6d44f0f2b6dcb5c610e6e9064ba57b4cbcd78d..ed97c48cdfe7c9e49b055cd8c943fa9d79d0935b 100644 (file)
@@ -27,7 +27,7 @@
 bool TreeSocket::Away(const std::string &prefix, parameterlist &params)
 {
        User* u = ServerInstance->FindNick(prefix);
-       if (!u)
+       if ((!u) || (IS_SERVER(u)))
                return true;
        if (params.size())
        {
index f74b2dc621610775c8858ebb7d8adf66b8f40662..a584f8fa8b6fcd8494d3c44537e8a324617e5184 100644 (file)
@@ -46,7 +46,7 @@ CmdResult CommandMetadata::Handle(const std::vector<std::string>& params, User *
        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);
index d065417064a1ff2d7ec7712333c268ed245f6c1f..af2e04ebc8c0bf4bc9409e2045ad5201e863a931 100644 (file)
@@ -34,7 +34,7 @@ bool TreeSocket::OperQuit(const std::string &prefix, parameterlist &params)
 
        User* u = ServerInstance->FindUUID(prefix);
 
-       if (u)
+       if ((u) && (!IS_SERVER(u)))
        {
                ServerInstance->OperQuit.set(u, params[0]);
                params[0] = ":" + params[0];
index de9cb73165c0f87b72244433001b3adff289e1fe..92999b422bb852d663132367f89d91dc1dd96b0e 100644 (file)
@@ -40,7 +40,7 @@ bool TreeSocket::ForceNick(const std::string &prefix, parameterlist &params)
        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);
 
index 161e7055cb4eab4f7506b27d7065a881df7a9cd9..2bfe0e1c4e0ca285727789b722d48a4056790e6e 100644 (file)
@@ -91,7 +91,7 @@ class CommandSSLInfo : public Command
        {
                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;
index 2e5abe95a9eccd016afdf4c18f0977c9ea1efc52..742781747f4e091de5e9848da2ac8b80095ee52c 100644 (file)
@@ -43,7 +43,7 @@ class CommandSwhois : public Command
        {
                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;
index 618e238927170d83b5bf56c5cf33b029047252a6..10fd7c7b63605ef7eb04bb3e441b0b589434c2e2 100644 (file)
@@ -40,7 +40,7 @@ class CommandUninvite : public Command
                User* u = ServerInstance->FindNick(parameters[0]);
                Channel* c = ServerInstance->FindChan(parameters[1]);
 
-               if ((!c) || (!u))
+               if ((!c) || (!u) || (u->registered != REG_ALL))
                {
                        if (!c)
                        {