summaryrefslogtreecommitdiff
path: root/src/cmd_nick.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd_nick.cpp')
-rw-r--r--src/cmd_nick.cpp16
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;