Skip to content

Commit

Permalink
Merge pull request #2136 from slingamn/issue2135_nicknameinuse
Browse files Browse the repository at this point in the history
fix #2135
  • Loading branch information
slingamn authored Mar 20, 2024
2 parents 8d08286 + 837f6ac commit d56e4ea
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 1 deletion.
9 changes: 8 additions & 1 deletion irc/client_lookup_set.go
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,8 @@ func (clients *ClientManager) SetNick(client *Client, session *Session, newNick
useAccountName = alwaysOn || config.Accounts.NickReservation.ForceNickEqualsAccount
}

nickIsReserved := false

if useAccountName {
if registered && newNick != accountName {
return "", errNickAccountMismatch, false
Expand Down Expand Up @@ -167,7 +169,9 @@ func (clients *ClientManager) SetNick(client *Client, session *Session, newNick

reservedAccount, method := client.server.accounts.EnforcementStatus(newCfNick, newSkeleton)
if method == NickEnforcementStrict && reservedAccount != "" && reservedAccount != account {
return "", errNicknameReserved, false
// see #2135: we want to enter the critical section, see if the nick is actually in use,
// and return errNicknameInUse in that case
nickIsReserved = true
}
}

Expand Down Expand Up @@ -219,6 +223,9 @@ func (clients *ClientManager) SetNick(client *Client, session *Session, newNick
if skeletonHolder != nil && skeletonHolder != client {
return "", errNicknameInUse, false
}
if nickIsReserved {
return "", errNicknameReserved, false
}

if dryRun {
return "", nil, false
Expand Down
2 changes: 2 additions & 0 deletions irc/nickname.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,8 @@ func performNickChange(server *Server, client *Client, target *Client, session *
}
} else if err == errNicknameReserved {
if !isSanick {
// see #1594 for context: ERR_NICKNAMEINUSE can confuse clients if the nickname is not
// literally in use:
if !client.registered {
rb.Add(nil, server.name, ERR_NICKNAMEINUSE, details.nick, utils.SafeErrorParam(nickname), client.t("Nickname is reserved by a different account"))
}
Expand Down

0 comments on commit d56e4ea

Please sign in to comment.