diff --git a/irc/accounts.go b/irc/accounts.go index 18bd5ae2..00f76d00 100644 --- a/irc/accounts.go +++ b/irc/accounts.go @@ -834,6 +834,7 @@ func (am *AccountManager) loadRawAccount(tx *buntdb.Tx, casefoldedAccount string } func (am *AccountManager) Unregister(account string) error { + config := am.server.Config() casefoldedAccount, err := CasefoldName(account) if err != nil { return errAccountDoesNotExist @@ -906,7 +907,13 @@ func (am *AccountManager) Unregister(account string) error { delete(am.skeletonToAccount, additionalSkel) } for _, client := range clients { - am.logoutOfAccount(client) + if config.Accounts.RequireSasl.Enabled { + client.Quit(client.t("You are no longer authorized to be on this server")) + // destroy acquires a semaphore so we can't call it while holding a lock + go client.destroy(false) + } else { + am.logoutOfAccount(client) + } } if err != nil { diff --git a/irc/nickserv.go b/irc/nickserv.go index 078ce2f0..4d5368df 100644 --- a/irc/nickserv.go +++ b/irc/nickserv.go @@ -452,10 +452,6 @@ func nsUnregisterHandler(server *Server, client *Client, command string, params return } - if cfname == client.Account() { - client.server.accounts.Logout(client) - } - err = server.accounts.Unregister(cfname) if err == errAccountDoesNotExist { nsNotice(rb, client.t(err.Error()))