diff options
| author | Sadie Powell <sadie@witchery.services> | 2024-03-12 16:50:30 +0000 |
|---|---|---|
| committer | Sadie Powell <sadie@witchery.services> | 2024-03-12 16:50:30 +0000 |
| commit | b8cd00b4122b7a243a2071268f2d395808782472 (patch) | |
| tree | 4b821af9a8a9969a97f4ded5b995228937ac851d /modules/operserv | |
| parent | b52e1b2b02c73195740ca836e21faeff281a36c2 (diff) | |
| parent | f4bd43e898e6ca415e22546f554e67139e62059e (diff) | |
Merge branch '2.0' into 2.1.
Diffstat (limited to 'modules/operserv')
| -rw-r--r-- | modules/operserv/operserv.cpp | 3 | ||||
| -rw-r--r-- | modules/operserv/os_forbid.cpp | 53 |
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); } |
