X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fusers.cpp;h=b8a2d31a83750669f7ea9f3ff006b42029d9103b;hb=b64177d3fb4f113c4db3325575970964867f01cc;hp=aaaa06f19293bf989469a88836ff029e43e61156;hpb=e57d1b19ff4823b7885eb7f4d3b37c84d2edca0e;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/users.cpp b/src/users.cpp index aaaa06f19..b8a2d31a8 100644 --- a/src/users.cpp +++ b/src/users.cpp @@ -105,7 +105,7 @@ LocalUser::LocalUser(int myfd, irc::sockets::sockaddrs* client, irc::sockets::so signon = ServerInstance->Time(); // The user's default nick is their UUID nick = uuid; - ident = "unknown"; + ident = uuid; eh.SetFd(myfd); memcpy(&client_sa, client, sizeof(irc::sockets::sockaddrs)); memcpy(&server_sa, servaddr, sizeof(irc::sockets::sockaddrs)); @@ -121,7 +121,6 @@ const std::string& User::MakeHost() if (!this->cached_makehost.empty()) return this->cached_makehost; - // XXX: Is there really a need to cache this? this->cached_makehost = ident + "@" + GetRealHost(); return this->cached_makehost; } @@ -131,7 +130,6 @@ const std::string& User::MakeHostIP() if (!this->cached_hostip.empty()) return this->cached_hostip; - // XXX: Is there really a need to cache this? this->cached_hostip = ident + "@" + this->GetIPString(); return this->cached_hostip; } @@ -141,7 +139,6 @@ const std::string& User::GetFullHost() if (!this->cached_fullhost.empty()) return this->cached_fullhost; - // XXX: Is there really a need to cache this? this->cached_fullhost = nick + "!" + ident + "@" + GetDisplayedHost(); return this->cached_fullhost; } @@ -151,7 +148,6 @@ const std::string& User::GetFullRealHost() if (!this->cached_fullrealhost.empty()) return this->cached_fullrealhost; - // XXX: Is there really a need to cache this? this->cached_fullrealhost = nick + "!" + ident + "@" + GetRealHost(); return this->cached_fullrealhost; } @@ -305,6 +301,12 @@ void UserIOHandler::AddWriteBuf(const std::string &data) WriteData(data); } +void UserIOHandler::SwapInternals(UserIOHandler& other) +{ + StreamSocket::SwapInternals(other); + std::swap(checked_until, other.checked_until); +} + bool UserIOHandler::OnSetEndPoint(const irc::sockets::sockaddrs& server, const irc::sockets::sockaddrs& client) { memcpy(&user->server_sa, &server, sizeof(irc::sockets::sockaddrs)); @@ -312,9 +314,12 @@ bool UserIOHandler::OnSetEndPoint(const irc::sockets::sockaddrs& server, const i return !user->quitting; } -void UserIOHandler::OnError(BufferedSocketError) +void UserIOHandler::OnError(BufferedSocketError sockerr) { - ServerInstance->Users->QuitUser(user, getError()); + ModResult res; + FIRST_MOD_RESULT(OnConnectionFail, res, (user, sockerr)); + if (res != MOD_RES_ALLOW) + ServerInstance->Users->QuitUser(user, getError()); } CullResult User::cull() @@ -436,6 +441,13 @@ void User::UnOper() */ oper = NULL; + // Remove the user from the oper list + stdalgo::vector::swaperase(ServerInstance->Users->all_opers, this); + + // If the user is quitting we shouldn't remove any modes as it results in + // mode messages being broadcast across the network. + if (quitting) + return; /* Remove all oper only modes from the user when the deoper - Bug #466*/ Modes::ChangeList changelist; @@ -449,9 +461,6 @@ void User::UnOper() ServerInstance->Modes->Process(this, NULL, this, changelist); - // Remove the user from the oper list - stdalgo::vector::swaperase(ServerInstance->Users->all_opers, this); - ModeHandler* opermh = ServerInstance->Modes->FindMode('o', MODETYPE_USER); if (opermh) this->SetMode(opermh, false); @@ -482,14 +491,20 @@ void LocalUser::CheckClass(bool clone_count) { ServerInstance->Users->QuitUser(this, "No more connections allowed from your host via this connect class (local)"); if (a->maxconnwarn) - ServerInstance->SNO->WriteToSnoMask('a', "WARNING: maximum LOCAL connections (%ld) exceeded for IP %s", a->GetMaxLocal(), this->GetIPString().c_str()); + { + ServerInstance->SNO->WriteToSnoMask('a', "WARNING: maximum local connections for the %s class (%ld) exceeded by %s", + a->name.c_str(), a->GetMaxLocal(), this->GetIPString().c_str()); + } return; } else if ((a->GetMaxGlobal()) && (clonecounts.global > a->GetMaxGlobal())) { ServerInstance->Users->QuitUser(this, "No more connections allowed from your host via this connect class (global)"); if (a->maxconnwarn) - ServerInstance->SNO->WriteToSnoMask('a', "WARNING: maximum GLOBAL connections (%ld) exceeded for IP %s", a->GetMaxGlobal(), this->GetIPString().c_str()); + { + ServerInstance->SNO->WriteToSnoMask('a', "WARNING: maximum global connections for the %s class (%ld) exceeded by %s", + a->name.c_str(), a->GetMaxGlobal(), this->GetIPString().c_str()); + } return; } }