mirror of
https://github.com/inspircd/inspircd.git
synced 2025-03-10 02:59:01 -04:00
Fix killing elined clients on [gkz]line in some cases.
This commit is contained in:
parent
5fc4403f62
commit
6c6dbb427b
@ -223,6 +223,11 @@ void InspIRCd::RehashUsersAndChans()
|
||||
(**i).already_sent = 0;
|
||||
(**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()
|
||||
|
@ -159,6 +159,7 @@ void XLineManager::CheckELines()
|
||||
for (LocalUserList::const_iterator u2 = ServerInstance->Users->local_users.begin(); u2 != ServerInstance->Users->local_users.end(); 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 */
|
||||
LookupIter safei;
|
||||
@ -169,7 +170,8 @@ void XLineManager::CheckELines()
|
||||
safei++;
|
||||
|
||||
XLine *e = i->second;
|
||||
u->exempt = e->Matches(u);
|
||||
if ((!e->duration || ServerInstance->Time() < e->expiry) && e->Matches(u))
|
||||
u->exempt = true;
|
||||
|
||||
i = safei;
|
||||
}
|
||||
@ -325,13 +327,6 @@ bool XLineManager::DelLine(const char* hostmask, const std::string &type, User*
|
||||
|
||||
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();
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user