diff --git a/irc/accounts.go b/irc/accounts.go index b68b0f7f..1345ebe5 100644 --- a/irc/accounts.go +++ b/irc/accounts.go @@ -238,7 +238,10 @@ func (am *AccountManager) BouncerAllowed(account string, session *Session) bool if !config.Accounts.Bouncer.Enabled { return false } - return config.Accounts.Bouncer.AllowedByDefault || session.capabilities.Has(caps.Bouncer) + if config.Accounts.Bouncer.AllowedByDefault { + return true + } + return session != nil && session.capabilities.Has(caps.Bouncer) } // Looks up the enforcement method stored in the database for an account diff --git a/irc/client_lookup_set.go b/irc/client_lookup_set.go index 56bcd995..65ac7127 100644 --- a/irc/client_lookup_set.go +++ b/irc/client_lookup_set.go @@ -152,7 +152,7 @@ func (clients *ClientManager) SetNick(client *Client, session *Session, newNick currentClient := clients.byNick[newcfnick] // the client may just be changing case - if currentClient != nil && currentClient != client { + if currentClient != nil && currentClient != client && session != nil { // these conditions forbid reattaching to an existing session: if client.Registered() || !bouncerAllowed || account == "" || account != currentClient.Account() || client.isTor != currentClient.isTor || client.HasMode(modes.TLS) != currentClient.HasMode(modes.TLS) { return errNicknameInUse