summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>2009-03-18 10:28:10 +0000
committerbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>2009-03-18 10:28:10 +0000
commitfc98fbf44d18ba866102544ca09f1b1c551fdb49 (patch)
tree20bf33870ada4bd9966647bbedd3dadbe22021df /src
parent876fb4786191b9d88994cfc981a22aa075bca153 (diff)
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
Diffstat (limited to 'src')
-rw-r--r--src/usermanager.cpp6
-rw-r--r--src/users.cpp8
2 files changed, 8 insertions, 6 deletions
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