From fc98fbf44d18ba866102544ca09f1b1c551fdb49 Mon Sep 17 00:00:00 2001 From: brain Date: Wed, 18 Mar 2009 10:28:10 +0000 Subject: Fix for bug #788, set user->quitting before writing error to users socket, and allow appending to sendq for quitting users (just don't check sendq's on quitting users) This allows the ERROR message to reach the user. git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@11231 e03df62e-2008-0410-955e-edbf42e46eb7 --- src/usermanager.cpp | 6 ++++-- src/users.cpp | 8 ++++---- 2 files changed, 8 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/usermanager.cpp b/src/usermanager.cpp index 68576f331..d930fd039 100644 --- a/src/usermanager.cpp +++ b/src/usermanager.cpp @@ -178,9 +178,11 @@ void UserManager::QuitUser(User *user, const std::string &quitreason, const char return; } - ServerInstance->Logs->Log("USERS", DEBUG,"QuitUser: %s '%s'", user->nick.c_str(), quitreason.c_str()); - user->Write("ERROR :Closing link: (%s@%s) [%s]", user->ident.c_str(), user->host.c_str(), *operreason ? operreason : quitreason.c_str()); user->quitting = true; + + ServerInstance->Logs->Log("USERS", DEBUG, "QuitUser: %s '%s'", user->nick.c_str(), quitreason.c_str()); + user->Write("ERROR :Closing link: (%s@%s) [%s]", user->ident.c_str(), user->host.c_str(), *operreason ? operreason : quitreason.c_str()); + user->quietquit = false; user->quitmsg = quitreason; diff --git a/src/users.cpp b/src/users.cpp index 6bafe5738..a755c4dd7 100644 --- a/src/users.cpp +++ b/src/users.cpp @@ -671,10 +671,7 @@ std::string User::GetBuffer() void User::AddWriteBuf(const std::string &data) { - if (this->quitting) - return; - - if (this->MyClass && !this->HasPrivPermission("users/flood/increased-buffers") && sendq.length() + data.length() > this->MyClass->GetSendqMax()) + if (!this->quitting && this->MyClass && !this->HasPrivPermission("users/flood/increased-buffers") && sendq.length() + data.length() > this->MyClass->GetSendqMax()) { /* * Fix by brain - Set the error text BEFORE calling, because @@ -686,6 +683,9 @@ void User::AddWriteBuf(const std::string &data) return; } + // We still want to append data to the sendq of a quitting user, + // e.g. their ERROR message that says 'closing link' + if (data.length() > MAXBUF - 2) /* MAXBUF has a value of 514, to account for line terminators */ sendq.append(data.substr(0,MAXBUF - 4)).append("\r\n"); /* MAXBUF-4 = 510 */ else -- cgit v1.2.3