summaryrefslogtreecommitdiff
path: root/modules/operserv
diff options
context:
space:
mode:
authorSadie Powell <sadie@witchery.services>2024-03-12 16:50:30 +0000
committerSadie Powell <sadie@witchery.services>2024-03-12 16:50:30 +0000
commitb8cd00b4122b7a243a2071268f2d395808782472 (patch)
tree4b821af9a8a9969a97f4ded5b995228937ac851d /modules/operserv
parentb52e1b2b02c73195740ca836e21faeff281a36c2 (diff)
parentf4bd43e898e6ca415e22546f554e67139e62059e (diff)
Merge branch '2.0' into 2.1.
Diffstat (limited to 'modules/operserv')
-rw-r--r--modules/operserv/operserv.cpp3
-rw-r--r--modules/operserv/os_forbid.cpp53
2 files changed, 43 insertions, 13 deletions
diff --git a/modules/operserv/operserv.cpp b/modules/operserv/operserv.cpp
index 02866109c..0881b7654 100644
--- a/modules/operserv/operserv.cpp
+++ b/modules/operserv/operserv.cpp
@@ -126,6 +126,9 @@ public:
{
for (auto *x : this->GetList())
{
+ if (!Anope::NoExpire && x->expires && x->expires < Anope::CurTime)
+ continue; // Skip expired lines.
+
if (x->regex)
{
if (x->regex->Matches(c->name))
diff --git a/modules/operserv/os_forbid.cpp b/modules/operserv/os_forbid.cpp
index bb014c158..4b00e0759 100644
--- a/modules/operserv/os_forbid.cpp
+++ b/modules/operserv/os_forbid.cpp
@@ -68,6 +68,33 @@ class MyForbidService final
inline std::vector<ForbidData *>& forbids(unsigned t) { return (*this->forbid_data)[t - 1]; }
+ void Expire(ForbidData *fd, unsigned ft, size_t idx)
+ {
+ Anope::string typestr;
+ switch (ft)
+ {
+ case FT_NICK:
+ typestr = "nick";
+ break;
+ case FT_CHAN:
+ typestr = "chan";
+ break;
+ case FT_EMAIL:
+ typestr = "email";
+ break;
+ case FT_REGISTER:
+ typestr = "register";
+ break;
+ default:
+ typestr = "unknown";
+ break;
+ }
+
+ Log(LOG_NORMAL, "expire/forbid", Config->GetClient("OperServ")) << "Expiring forbid for " << fd->mask << " type " << typestr;
+ this->forbids(ft).erase(this->forbids(ft).begin() + idx);
+ delete fd;
+ }
+
public:
MyForbidService(Module *m) : ForbidService(m), forbid_data("ForbidData") { }
@@ -101,6 +128,12 @@ public:
{
ForbidData *d = this->forbids(ftype)[i - 1];
+ if (!Anope::NoExpire && d->expires && Anope::CurTime >= d->expires)
+ {
+ Expire(d, ftype, i - 1);
+ continue;
+ }
+
if (Anope::Match(mask, d->mask, false, true))
return d;
}
@@ -113,6 +146,12 @@ public:
{
ForbidData *d = this->forbids(ftype)[i - 1];
+ if (!Anope::NoExpire && d->expires && Anope::CurTime >= d->expires)
+ {
+ Expire(d, ftype, i - 1);
+ continue;
+ }
+
if (d->mask.equals_ci(mask))
return d;
}
@@ -128,19 +167,7 @@ public:
ForbidData *d = this->forbids(j).at(i - 1);
if (d->expires && !Anope::NoExpire && Anope::CurTime >= d->expires)
- {
- Anope::string ftype = "none";
- if (d->type == FT_NICK)
- ftype = "nick";
- else if (d->type == FT_CHAN)
- ftype = "chan";
- else if (d->type == FT_EMAIL)
- ftype = "email";
-
- Log(LOG_NORMAL, "expire/forbid", Config->GetClient("OperServ")) << "Expiring forbid for " << d->mask << " type " << ftype;
- this->forbids(j).erase(this->forbids(j).begin() + i - 1);
- delete d;
- }
+ Expire(d, j, i - 1);
else
f.push_back(d);
}