From 3bcf67b956b183a19b9c66027ee57d9d3b97d73b Mon Sep 17 00:00:00 2001 From: Shivaram Lingamneni Date: Sat, 29 Aug 2020 21:42:27 -0400 Subject: [PATCH 1/2] fix #1251 --- irc/nickname.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/irc/nickname.go b/irc/nickname.go index e7e96af5..8f917c17 100644 --- a/irc/nickname.go +++ b/irc/nickname.go @@ -129,7 +129,8 @@ func fixupNickEqualsAccount(client *Client, rb *ResponseBuffer, config *Config) if !client.registered { return true } - if performNickChange(client.server, client, client, rb.session, client.AccountName(), rb) != nil { + err := performNickChange(client.server, client, client, rb.session, client.AccountName(), rb) + if err != nil && err != errNoop { client.server.accounts.Logout(client) nsNotice(rb, client.t("A client is already using that account; try logging out and logging back in with SASL")) return false From 01726f89356d4f487410693811d4b1ab71fc9d65 Mon Sep 17 00:00:00 2001 From: Shivaram Lingamneni Date: Sat, 29 Aug 2020 23:40:49 -0400 Subject: [PATCH 2/2] fix #1252 --- irc/client_lookup_set.go | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/irc/client_lookup_set.go b/irc/client_lookup_set.go index fb0a72b2..f0d435cb 100644 --- a/irc/client_lookup_set.go +++ b/irc/client_lookup_set.go @@ -48,9 +48,8 @@ func (clients *ClientManager) Get(nick string) *Client { return nil } -func (clients *ClientManager) removeInternal(client *Client) (err error) { +func (clients *ClientManager) removeInternal(client *Client, oldcfnick, oldskeleton string) (err error) { // requires holding the writable Lock() - oldcfnick, oldskeleton := client.uniqueIdentifiers() if oldcfnick == "*" || oldcfnick == "" { return errNickMissing } @@ -88,7 +87,8 @@ func (clients *ClientManager) Remove(client *Client) error { clients.Lock() defer clients.Unlock() - return clients.removeInternal(client) + oldcfnick, oldskeleton := client.uniqueIdentifiers() + return clients.removeInternal(client, oldcfnick, oldskeleton) } // Handles a RESUME by attaching a session to a designated client. It is the @@ -240,10 +240,11 @@ func (clients *ClientManager) SetNick(client *Client, session *Session, newNick return "", errNicknameInUse, false } + formercfnick, formerskeleton := client.uniqueIdentifiers() if changeSuccess := client.SetNick(newNick, newCfNick, newSkeleton); !changeSuccess { return "", errClientDestroyed, false } - clients.removeInternal(client) + clients.removeInternal(client, formercfnick, formerskeleton) clients.byNick[newCfNick] = client clients.bySkeleton[newSkeleton] = client return newNick, nil, false