]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/cmd_nick.cpp
Whoops, typo
[user/henk/code/inspircd.git] / src / cmd_nick.cpp
index 64b1a466681f5062380d2dfc748115e673e2949b..78483e2f290b4545add2dc02238ba58d6a7010ae 100644 (file)
@@ -50,10 +50,10 @@ CmdResult cmd_nick::Handle (const char** parameters, int pcnt, userrec *user)
                FOREACH_RESULT(I_OnUserPreNick,OnUserPreNick(user,parameters[0]));
                if (MOD_RESULT)
                        return CMD_FAILURE;
-               user->InvalidateCache();
                if (user->registered == REG_ALL)
                        user->WriteCommon("NICK %s",parameters[0]);
                strlcpy(user->nick, parameters[0], NICKMAX - 1);
+               user->InvalidateCache();
                FOREACH_MOD(I_OnUserPostNick,OnUserPostNick(user,oldnick));
                return CMD_SUCCESS;
        }
@@ -71,7 +71,13 @@ CmdResult cmd_nick::Handle (const char** parameters, int pcnt, userrec *user)
                        userrec* InUse = ServerInstance->FindNick(parameters[0]);
                        if (InUse->registered != REG_ALL)
                        {
-                               userrec::QuitUser(ServerInstance, InUse, "Nickname overruled");
+                               /* change the nick of the older user to nnn-overruled,
+                                * where nnn is their file descriptor. We know this to be unique.
+                                */
+                               std::string changeback = ConvToStr(InUse->GetFd()) + "-overruled";
+                               InUse->UpdateNickHash(changeback.c_str());
+                               strlcpy(InUse->nick, changeback.c_str(), NICKMAX - 1);
+                               InUse->InvalidateCache();
                        }
                        else
                        {
@@ -96,7 +102,7 @@ CmdResult cmd_nick::Handle (const char** parameters, int pcnt, userrec *user)
                }
 
                user->WriteCommon("NICK %s",parameters[0]);
-               
+
        }
 
        strlcpy(oldnick, user->nick, NICKMAX - 1);