Fix killing elined clients on [gkz]line in some cases.

This commit is contained in:
Peter Powell 2017-07-15 18:04:26 +01:00
parent 5fc4403f62
commit 6c6dbb427b
2 changed files with 8 additions and 8 deletions

View File

@ -223,6 +223,11 @@ void InspIRCd::RehashUsersAndChans()
(**i).already_sent = 0; (**i).already_sent = 0;
(**i).RemoveExpiredInvites(); (**i).RemoveExpiredInvites();
} }
// HACK: ELines are not expired properly at the moment but it can't be fixed as
// the 2.0 XLine system is a spaghetti nightmare. Instead we skip over expired
// ELines in XLineManager::CheckELines() and expire them here instead.
ServerInstance->XLines->GetAll("E");
} }
void InspIRCd::SetSignals() void InspIRCd::SetSignals()

View File

@ -159,6 +159,7 @@ void XLineManager::CheckELines()
for (LocalUserList::const_iterator u2 = ServerInstance->Users->local_users.begin(); u2 != ServerInstance->Users->local_users.end(); u2++) for (LocalUserList::const_iterator u2 = ServerInstance->Users->local_users.begin(); u2 != ServerInstance->Users->local_users.end(); u2++)
{ {
User* u = (User*)(*u2); User* u = (User*)(*u2);
u->exempt = false;
/* This uses safe iteration to ensure that if a line expires here, it doenst trash the iterator */ /* This uses safe iteration to ensure that if a line expires here, it doenst trash the iterator */
LookupIter safei; LookupIter safei;
@ -169,7 +170,8 @@ void XLineManager::CheckELines()
safei++; safei++;
XLine *e = i->second; XLine *e = i->second;
u->exempt = e->Matches(u); if ((!e->duration || ServerInstance->Time() < e->expiry) && e->Matches(u))
u->exempt = true;
i = safei; i = safei;
} }
@ -325,13 +327,6 @@ bool XLineManager::DelLine(const char* hostmask, const std::string &type, User*
void ELine::Unset() void ELine::Unset()
{ {
/* remove exempt from everyone and force recheck after deleting eline */
for (LocalUserList::const_iterator u2 = ServerInstance->Users->local_users.begin(); u2 != ServerInstance->Users->local_users.end(); u2++)
{
User* u = (User*)(*u2);
u->exempt = false;
}
ServerInstance->XLines->CheckELines(); ServerInstance->XLines->CheckELines();
} }