- WriteServ(user->fd,"433 %s %s :Nickname is already in use.",user->nick,parameters[0]);
- return;
+ userrec* InUse = ServerInstance->FindNick(parameters[0]);
+ if (InUse->registered != REG_ALL)
+ {
+ /* 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
+ {
+ user->WriteServ("433 %s %s :Nickname is already in use.", user->registered >= REG_NICK ? user->nick : "*", parameters[0]);
+ return CMD_FAILURE;
+ }