X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fcommands%2Fcmd_nick.cpp;h=0eb55ccfe7ee0d2cc40fa91f9086dff2d2175181;hb=7d7250484c352c13830e63ae41ee8faae40a9bd5;hp=8a8dbb6ddb40b757b593ed1f703c014137aa331f;hpb=4b856bda135a08e800b96c970a10b0b6a34d433a;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/commands/cmd_nick.cpp b/src/commands/cmd_nick.cpp index 8a8dbb6dd..0eb55ccfe 100644 --- a/src/commands/cmd_nick.cpp +++ b/src/commands/cmd_nick.cpp @@ -27,7 +27,7 @@ extern "C" DllExport Command* init_command(InspIRCd* Instance) */ CmdResult CommandNick::Handle (const std::vector& parameters, User *user) { - char oldnick[NICKMAX]; + std::string oldnick; if (parameters[0].empty()) { @@ -36,7 +36,7 @@ CmdResult CommandNick::Handle (const std::vector& parameters, User return CMD_FAILURE; } - if (((!ServerInstance->IsNick(parameters[0].c_str()))) && (IS_LOCAL(user))) + if (((!ServerInstance->IsNick(parameters[0].c_str(), ServerInstance->Config->Limits.NickMax))) && (IS_LOCAL(user))) { if (!allowinvalid) { @@ -57,24 +57,26 @@ CmdResult CommandNick::Handle (const std::vector& parameters, User } } - if (irc::string(user->nick.c_str()) == assign(parameters[0])) + if (assign(user->nick) == parameters[0]) { /* If its exactly the same, even case, dont do anything. */ if (parameters[0] == user->nick) + { return CMD_SUCCESS; + } /* Its a change of case. People insisted that they should be * able to do silly things like this even though the RFC says * the nick AAA is the same as the nick aaa. */ - strlcpy(oldnick, user->nick.c_str(), NICKMAX - 1); + oldnick.assign(user->nick, 0, ServerInstance->Config->Limits.NickMax); int MOD_RESULT = 0; - FOREACH_RESULT(I_OnUserPreNick,OnUserPreNick(user,parameters[0].c_str())); + FOREACH_RESULT(I_OnUserPreNick,OnUserPreNick(user,parameters[0])); if (MOD_RESULT) return CMD_FAILURE; if (user->registered == REG_ALL) user->WriteCommon("NICK %s",parameters[0].c_str()); - user->nick.assign(parameters[0], 0, NICKMAX - 1); + user->nick.assign(parameters[0], 0, ServerInstance->Config->Limits.NickMax); user->InvalidateCache(); FOREACH_MOD(I_OnUserPostNick,OnUserPostNick(user,oldnick)); return CMD_SUCCESS; @@ -94,7 +96,7 @@ CmdResult CommandNick::Handle (const std::vector& parameters, User XLine* mq = ServerInstance->XLines->MatchesLine("Q",parameters[0]); if (mq) { - ServerInstance->SNO->WriteToSnoMask('x', "Q-Lined nickname %s from %s!%s@%s: %s", parameters[0].c_str(), user->nick.c_str(), user->ident.c_str(), user->host, mq->reason); + ServerInstance->SNO->WriteToSnoMask('x', "Q-Lined nickname %s from %s!%s@%s: %s", parameters[0].c_str(), user->nick.c_str(), user->ident.c_str(), user->host.c_str(), mq->reason); user->WriteNumeric(432, "%s %s :Invalid nickname: %s",user->nick.c_str(), parameters[0].c_str(), mq->reason); return CMD_FAILURE; } @@ -118,7 +120,7 @@ CmdResult CommandNick::Handle (const std::vector& parameters, User InUse->WriteTo(InUse, "NICK %s", InUse->uuid.c_str()); InUse->WriteNumeric(433, "%s %s :Nickname overruled.", InUse->nick.c_str(), InUse->nick.c_str()); InUse->UpdateNickHash(InUse->uuid.c_str()); - InUse->nick.assign(InUse->uuid, 0, NICKMAX - 1); + InUse->nick.assign(InUse->uuid, 0, ServerInstance->Config->Limits.NickMax); InUse->InvalidateCache(); InUse->registered &= ~REG_NICK; } @@ -141,7 +143,7 @@ CmdResult CommandNick::Handle (const std::vector& parameters, User if (user->registered == REG_ALL) user->WriteCommon("NICK %s", parameters[0].c_str()); - strlcpy(oldnick, user->nick.c_str(), NICKMAX - 1); + oldnick.assign(user->nick, 0, ServerInstance->Config->Limits.NickMax); /* change the nick of the user in the users_hash */ user = user->UpdateNickHash(parameters[0].c_str()); @@ -149,11 +151,8 @@ CmdResult CommandNick::Handle (const std::vector& parameters, User /* actually change the nick within the record */ if (!user) return CMD_FAILURE; - if (!user->nick.empty()) - return CMD_FAILURE; - - user->nick.assign(parameters[0], 0, NICKMAX - 1); + user->nick.assign(parameters[0], 0, ServerInstance->Config->Limits.NickMax); user->InvalidateCache(); /* Update display nicks */ @@ -180,7 +179,7 @@ CmdResult CommandNick::Handle (const std::vector& parameters, User if (user->registered == REG_ALL) { user->IncreasePenalty(10); - FOREACH_MOD(I_OnUserPostNick,OnUserPostNick(user,oldnick)); + FOREACH_MOD(I_OnUserPostNick,OnUserPostNick(user, oldnick)); } return CMD_SUCCESS;