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).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()
|
||||||
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user