diff options
Diffstat (limited to 'src/cmd_nick.cpp')
-rw-r--r-- | src/cmd_nick.cpp | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/src/cmd_nick.cpp b/src/cmd_nick.cpp index ae02a2e6d..03bad2579 100644 --- a/src/cmd_nick.cpp +++ b/src/cmd_nick.cpp @@ -69,17 +69,17 @@ CmdResult cmd_nick::Handle (const char** parameters, int pcnt, userrec *user) if ((ServerInstance->FindNick(parameters[0])) && (ServerInstance->FindNick(parameters[0]) != user) && (ServerInstance->IsNick(parameters[0]))) { userrec* InUse = ServerInstance->FindNick(parameters[0]); - /* XXX FIXME: This no longer works with the global culllist stuff, - * because the user is pushed onto the cullList then we accept a new user - * with the SAME nickname, so this mucks up the nickname hash completely. - * We need to find a way to force a nickchange upon the user whos being - * overruled, rather than quitting them. -- Brain - * 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->fd) + "-overruled"; + InUse->UpdateNickHash(changeback.c_str()); + strlcpy(InUse->nick, changeback.c_str(), NICKMAX - 1); + InUse->InvalidateCache(); } - else*/ + else { user->WriteServ("433 %s %s :Nickname is already in use.", user->registered >= REG_NICK ? user->nick : "*", parameters[0]); return CMD_FAILURE; |