X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fcommands%2Fcmd_kick.cpp;h=b59eec0309ae181a6d1dadeddbc8736fadd3801f;hb=882084defcc43c876ecb10e30086b63ac074fcad;hp=3c5fb00527ae8e94d73e72b6f16cb8a35e4c2c1a;hpb=74ee9af96639323d852a8b15be72ee9974e0a826;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/commands/cmd_kick.cpp b/src/commands/cmd_kick.cpp index 3c5fb0052..b59eec030 100644 --- a/src/commands/cmd_kick.cpp +++ b/src/commands/cmd_kick.cpp @@ -38,6 +38,10 @@ class CommandKick : public Command * @return A value from CmdResult to indicate command success or failure. */ CmdResult Handle(const std::vector& parameters, User *user); + RouteDescriptor GetRouting(User* user, const std::vector& parameters) + { + return (IS_LOCAL(user) ? ROUTE_LOCALONLY : ROUTE_BROADCAST); + } }; /** Handle /KICK @@ -48,7 +52,7 @@ CmdResult CommandKick::Handle (const std::vector& parameters, User Channel* c = ServerInstance->FindChan(parameters[0]); User* u; - if (ServerInstance->Parser->LoopCall(user, this, parameters, 1)) + if (CommandParser::LoopCall(user, this, parameters, 1)) return CMD_SUCCESS; if (IS_LOCAL(user)) @@ -62,10 +66,21 @@ CmdResult CommandKick::Handle (const std::vector& parameters, User return CMD_FAILURE; } - if ((IS_LOCAL(user)) && (!c->HasUser(user)) && (!ServerInstance->ULine(user->server))) + Membership* srcmemb = NULL; + if (IS_LOCAL(user)) { - user->WriteServ( "442 %s %s :You're not on that channel!", user->nick.c_str(), parameters[0].c_str()); - return CMD_FAILURE; + srcmemb = c->GetUser(user); + if (!srcmemb) + { + user->WriteServ( "442 %s %s :You're not on that channel!", user->nick.c_str(), parameters[0].c_str()); + return CMD_FAILURE; + } + + if (ServerInstance->ULine(u->server)) + { + user->WriteNumeric(ERR_CHANOPRIVSNEEDED, "%s %s :You may not kick a u-lined client", user->nick.c_str(), c->name.c_str()); + return CMD_FAILURE; + } } if (parameters.size() > 2) @@ -77,7 +92,7 @@ CmdResult CommandKick::Handle (const std::vector& parameters, User reason.assign(user->nick, 0, ServerInstance->Config->Limits.MaxKick); } - c->KickUser(user, u, reason.c_str()); + c->KickUser(user, u, reason, srcmemb); return CMD_SUCCESS; }