mirror of
https://github.com/anope/anope.git
synced 2026-06-25 04:56:39 +02:00
Fix module event prioritization which was broken with the newer
auto-attach event stuff. Also remove logically dead code from os_defcon, and make os_defcon akill similar masks to os_session when enforcing session akills. Fixes #1618 which relies on os_session to be prioritized before os_defcon.
This commit is contained in:
@@ -285,6 +285,8 @@ class CoreExport Module : public Extensible
|
||||
*/
|
||||
ModuleVersion GetVersion() const;
|
||||
|
||||
virtual void Prioritize();
|
||||
|
||||
/* Everything below here are events. Modules must ModuleManager::Attach to these events
|
||||
* before they will be called.
|
||||
*/
|
||||
|
||||
@@ -496,11 +496,6 @@ class OSDefcon : public Module
|
||||
XLine x("*@" + u->host, OperServ ? OperServ->nick : "defcon", Anope::CurTime + DConfig.akillexpire, DConfig.akillreason, XLineManager::GenerateUID());
|
||||
akills->Send(NULL, &x);
|
||||
}
|
||||
if (DConfig.Check(DEFCON_NO_NEW_CLIENTS) || DConfig.Check(DEFCON_AKILL_NEW_CLIENTS))
|
||||
{
|
||||
u->Kill(OperServ ? OperServ->nick : "", DConfig.akillreason);
|
||||
return;
|
||||
}
|
||||
|
||||
if (DConfig.Check(DEFCON_NO_NEW_CLIENTS) || DConfig.Check(DEFCON_AKILL_NEW_CLIENTS))
|
||||
{
|
||||
@@ -529,9 +524,9 @@ class OSDefcon : public Module
|
||||
++session->hits;
|
||||
if (akills && DConfig.max_session_kill && session->hits >= DConfig.max_session_kill)
|
||||
{
|
||||
XLine x("*@" + u->host, OperServ ? OperServ->nick : "", Anope::CurTime + DConfig.session_autokill_expiry, "Defcon session limit exceeded", XLineManager::GenerateUID());
|
||||
XLine x("*@" + session->addr.mask(), OperServ ? OperServ->nick : "", Anope::CurTime + DConfig.session_autokill_expiry, "Defcon session limit exceeded", XLineManager::GenerateUID());
|
||||
akills->Send(NULL, &x);
|
||||
Log(OperServ, "akill/defcon") << "[DEFCON] Added a temporary AKILL for \002*@" << u->host << "\002 due to excessive connections";
|
||||
Log(OperServ, "akill/defcon") << "[DEFCON] Added a temporary AKILL for \002*@" << session->addr.mask() << "\002 due to excessive connections";
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -639,7 +639,10 @@ class OSSession : public Module
|
||||
exception_type("Exception", Exception::Unserialize), ss(this), commandossession(this), commandosexception(this), akills("XLineManager", "xlinemanager/sgline")
|
||||
{
|
||||
this->SetPermanent(true);
|
||||
}
|
||||
|
||||
void Prioritize() anope_override
|
||||
{
|
||||
ModuleManager::SetPriority(this, PRIORITY_FIRST);
|
||||
}
|
||||
|
||||
|
||||
@@ -220,7 +220,10 @@ class NSIdentifyLDAP : public Module
|
||||
{
|
||||
|
||||
me = this;
|
||||
}
|
||||
|
||||
void Prioritize() anope_override
|
||||
{
|
||||
ModuleManager::SetPriority(this, PRIORITY_FIRST);
|
||||
}
|
||||
|
||||
|
||||
@@ -1258,7 +1258,10 @@ class ProtoUnreal : public Module
|
||||
{
|
||||
|
||||
this->AddModes();
|
||||
}
|
||||
|
||||
void Prioritize() anope_override
|
||||
{
|
||||
ModuleManager::SetPriority(this, PRIORITY_FIRST);
|
||||
}
|
||||
|
||||
|
||||
@@ -101,6 +101,10 @@ void Module::SetAuthor(const Anope::string &nauthor)
|
||||
this->author = nauthor;
|
||||
}
|
||||
|
||||
void Module::Prioritize()
|
||||
{
|
||||
}
|
||||
|
||||
ModuleVersion::ModuleVersion(int maj, int min, int pa) : version_major(maj), version_minor(min), version_patch(pa)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -265,6 +265,8 @@ ModuleReturn ModuleManager::LoadModule(const Anope::string &modname, User *u)
|
||||
for (unsigned i = 0; i < I_SIZE; ++i)
|
||||
EventHandlers[i].push_back(m);
|
||||
|
||||
m->Prioritize();
|
||||
|
||||
FOREACH_MOD(OnModuleLoad, (u, m));
|
||||
|
||||
return MOD_ERR_OK;
|
||||
|
||||
Reference in New Issue
Block a user