+ 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.
+ * NOTE: We must do this and not quit the user, even though we do
+ * not have UID support yet. This is because if we set this user
+ * as quitting and then introduce the new user before the old one
+ * has quit, then the user hash gets totally buggered.
+ * (Yes, that is a technical term). -- Brain
+ */
+ std::string changeback = ConvToStr(InUse->GetFd()) + "-overruled";
+ InUse->WriteTo(InUse, "NICK %s", changeback.c_str());
+ InUse->WriteServ("433 %s %s :Nickname overruled.", InUse->nick, InUse->nick);
+ InUse->UpdateNickHash(changeback.c_str());
+ strlcpy(InUse->nick, changeback.c_str(), NICKMAX - 1);
+ InUse->InvalidateCache();
+ /* Take away their nickname-sent state forcing them to send a nick again */
+ InUse->registered &= ~REG_NICK;
+ }
+ else
+ {
+ user->WriteServ("433 %s %s :Nickname is already in use.", user->registered >= REG_NICK ? user->nick : "*", parameters[0]);
+ return CMD_FAILURE;
+ }