From ef960ee420460e437b49e8085c3f1158c60752b9 Mon Sep 17 00:00:00 2001 From: special Date: Mon, 2 Apr 2007 04:46:01 +0000 Subject: Fixed a DNS timeout race condition that could result in a NOTICE AUTH message being sent after connecting (thanks NBKWH5I) git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@6730 e03df62e-2008-0410-955e-edbf42e46eb7 --- src/userprocess.cpp | 1 + src/users.cpp | 11 ++++++++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/userprocess.cpp b/src/userprocess.cpp index 1d2187165..7cdb85cd2 100644 --- a/src/userprocess.cpp +++ b/src/userprocess.cpp @@ -266,6 +266,7 @@ void InspIRCd::DoBackgroundUserStuff(time_t TIME) bool ready = AllModulesReportReady(curr); if ((TIME > curr->signon) && (curr->registered == REG_NICKUSER) && (ready)) { + curr->WriteServ("NOTICE Auth :*** Could not resolve your hostname: Request timed out; using your IP address (%s) instead.", curr->GetIPString()); curr->dns_done = true; this->stats->statsDnsBad++; curr->FullConnect(); diff --git a/src/users.cpp b/src/users.cpp index 48260bd1f..1f8a62eec 100644 --- a/src/users.cpp +++ b/src/users.cpp @@ -240,9 +240,14 @@ void UserResolver::OnError(ResolverError e, const std::string &errormessage) { if (ServerInstance->SE->GetRef(this->bound_fd) == this->bound_user) { - /* Error message here */ - this->bound_user->WriteServ("NOTICE Auth :*** Could not resolve your hostname: %s; using your IP address (%s) instead.", errormessage.c_str(), this->bound_user->GetIPString()); - this->bound_user->dns_done = true; + /* Since dns timeout is implemented outside of the resolver, this was a race condition that could result in this message being sent *after* + * the user was fully connected. This check fixes that issue - Special */ + if (!this->bound_user->dns_done) + { + /* Error message here */ + this->bound_user->WriteServ("NOTICE Auth :*** Could not resolve your hostname: %s; using your IP address (%s) instead.", errormessage.c_str(), this->bound_user->GetIPString()); + this->bound_user->dns_done = true; + } } } -- cgit v1.2.3