1
0
mirror of https://github.com/anope/anope.git synced 2026-06-25 04:56:39 +02:00

When unsetting a temporary ban delete the unset timer.

This prevents Anope from unsetting a later-added ban,

Resolves MantisBT bug 1709.
This commit is contained in:
Sadie Powell
2025-06-25 19:16:15 +01:00
parent eda6d8cc0f
commit 6cc997c4e9
+34 -1
View File
@@ -13,6 +13,9 @@
static Module *me;
class TempBan;
static std::vector<TempBan *> tempbans;
class TempBan final
: public Timer
{
@@ -28,6 +31,21 @@ public:
, mask(banmask)
, mode(mod)
{
tempbans.push_back(this);
}
~TempBan()
{
auto it = std::find(tempbans.begin(), tempbans.end(), this);
if (it != tempbans.end())
tempbans.erase(it);
}
bool Matches(Channel *chan, ChannelMode *cmode, const Anope::string &bmask) const
{
return chan->name.equals_ci(this->channel)
&& cmode->name == this->mode
&& bmask == this->mask;
}
void Tick() override
@@ -258,10 +276,25 @@ class CSBan final
CommandCSBan commandcsban;
public:
CSBan(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator, VENDOR), commandcsban(this)
CSBan(const Anope::string &modname, const Anope::string &creator)
: Module(modname, creator, VENDOR)
, commandcsban(this)
{
me = this;
}
EventReturn OnChannelModeUnset(Channel *c, MessageSource &setter, ChannelMode *cmode, const Anope::string &param) override
{
for (const auto *tempban : tempbans)
{
if (tempban->Matches(c, cmode, param))
{
delete tempban;
break;
}
}
return EVENT_CONTINUE;
}
};
MODULE_INIT(CSBan)