]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/commands/cmd_kill.cpp
First phase of conversion to dynamic limits on all the lengths, configured via the...
[user/henk/code/inspircd.git] / src / commands / cmd_kill.cpp
index 6a1e64d7fe8e02b3063a0900d781acbf02c8005d..02e80b4f2de28c161b181acc64c6167500fd8bbb 100644 (file)
@@ -21,10 +21,10 @@ extern "C" DllExport Command* init_command(InspIRCd* Instance)
 
 /** Handle /KILL
  */
-CmdResult CommandKill::Handle (const char** parameters, int pcnt, User *user)
+CmdResult CommandKill::Handle (const std::vector<std::string>& parameters, User *user)
 {
        /* Allow comma seperated lists of users for /KILL (thanks w00t) */
-       if (ServerInstance->Parser->LoopCall(user, this, parameters, pcnt, 0))
+       if (ServerInstance->Parser->LoopCall(user, this, parameters, 0))
                return CMD_SUCCESS;
 
        User *u = ServerInstance->FindNick(parameters[0]);
@@ -54,18 +54,18 @@ CmdResult CommandKill::Handle (const char** parameters, int pcnt, User *user)
                        if (*ServerInstance->Config->HideKillsServer)
                        {
                                // hidekills is on, use it
-                               snprintf(killreason, MAXQUIT, "Killed (%s (%s))", ServerInstance->Config->HideKillsServer, parameters[1]);
+                               snprintf(killreason, ServerInstance->Config->Limits.MaxQuit, "Killed (%s (%s))", ServerInstance->Config->HideKillsServer, parameters[1].c_str());
                        }
                        else
                        {
                                // hidekills is off, do nothing
-                               snprintf(killreason, MAXQUIT, "Killed (%s (%s))", user->nick, parameters[1]);
+                               snprintf(killreason, ServerInstance->Config->Limits.MaxQuit, "Killed (%s (%s))", user->nick.c_str(), parameters[1].c_str());
                        }
                }
                else
                {
                        /* Leave it alone, remote server has already formatted it */
-                       snprintf(killreason, MAXQUIT, "%s", parameters[1]);
+                       strlcpy(killreason, parameters[1].c_str(), ServerInstance->Config->Limits.MaxQuit);
                }
 
                /*
@@ -75,7 +75,7 @@ CmdResult CommandKill::Handle (const char** parameters, int pcnt, User *user)
                if (!IS_LOCAL(u))
                {
                        // remote kill
-                       ServerInstance->SNO->WriteToSnoMask('K', "Remote kill by %s: %s!%s@%s (%s)", user->nick, u->nick, u->ident, u->host, parameters[1]);
+                       ServerInstance->SNO->WriteToSnoMask('K', "Remote kill by %s: %s!%s@%s (%s)", user->nick.c_str(), u->nick.c_str(), u->ident.c_str(), u->host.c_str(), parameters[1].c_str());
                        FOREACH_MOD(I_OnRemoteKill, OnRemoteKill(user, u, killreason, killreason));
                }
                else
@@ -85,28 +85,28 @@ CmdResult CommandKill::Handle (const char** parameters, int pcnt, User *user)
                         * XXX - this isn't entirely correct, servers A - B - C, oper on A, client on C. Oper kills client, A and B will get remote kill
                         * snotices, C will get a local kill snotice. this isn't accurate, and needs fixing at some stage. -- w00t
                         */
-                       ServerInstance->SNO->WriteToSnoMask('k',"Local Kill by %s: %s!%s@%s (%s)", user->nick, u->nick, u->ident, u->host, parameters[1]);
-                       ServerInstance->Log(DEFAULT,"LOCAL KILL: %s :%s!%s!%s (%s)", u->nick, ServerInstance->Config->ServerName, user->dhost, user->nick, parameters[1]);
+                       ServerInstance->SNO->WriteToSnoMask('k',"Local Kill by %s: %s!%s@%s (%s)", user->nick.c_str(), u->nick.c_str(), u->ident.c_str(), u->host.c_str(), parameters[1].c_str());
+                       ServerInstance->Logs->Log("KILL",DEFAULT,"LOCAL KILL: %s :%s!%s!%s (%s)", u->nick.c_str(), ServerInstance->Config->ServerName, user->dhost.c_str(), user->nick.c_str(), parameters[1].c_str());
                        /* Bug #419, make sure this message can only occur once even in the case of multiple KILL messages crossing the network, and change to show
                         * hidekillsserver as source if possible
                         */
                        if (!u->quitting)
                        {
-                               u->Write(":%s KILL %s :%s!%s!%s (%s)", *ServerInstance->Config->HideKillsServer ? ServerInstance->Config->HideKillsServer : user->GetFullHost(),
-                                               u->nick,
+                               u->Write(":%s KILL %s :%s!%s!%s (%s)", *ServerInstance->Config->HideKillsServer ? ServerInstance->Config->HideKillsServer : user->GetFullHost().c_str(),
+                                               u->nick.c_str(),
                                                ServerInstance->Config->ServerName,
-                                               user->dhost,
-                                               *ServerInstance->Config->HideKillsServer ? ServerInstance->Config->HideKillsServer : user->nick,
-                                               parameters[1]);
+                                               user->dhost.c_str(),
+                                               *ServerInstance->Config->HideKillsServer ? ServerInstance->Config->HideKillsServer : user->nick.c_str(),
+                                               parameters[1].c_str());
                        }
                }
 
                // send the quit out
-               User::QuitUser(ServerInstance, u, killreason);
+               ServerInstance->Users->QuitUser(u, killreason);
        }
        else
        {
-               user->WriteServ( "401 %s %s :No such nick/channel", user->nick, parameters[0]);
+               user->WriteServ( "401 %s %s :No such nick/channel", user->nick.c_str(), parameters[0].c_str());
                return CMD_FAILURE;
        }