From 3f7c0829efb1d3af8f7a0e8092c6dadb2ed041e8 Mon Sep 17 00:00:00 2001 From: Adam Date: Tue, 21 Feb 2017 09:59:10 -0500 Subject: [PATCH] os_forbid: match forbids exact on add/del --- include/modules/os_forbid.h | 2 ++ modules/commands/os_forbid.cpp | 16 ++++++++++++++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/include/modules/os_forbid.h b/include/modules/os_forbid.h index 0742ecd8d..9a43a7b02 100644 --- a/include/modules/os_forbid.h +++ b/include/modules/os_forbid.h @@ -45,6 +45,8 @@ class ForbidService : public Service virtual ForbidData *FindForbid(const Anope::string &mask, ForbidType type) = 0; + virtual ForbidData *FindForbidExact(const Anope::string &mask, ForbidType type) = 0; + virtual std::vector GetForbids() = 0; }; diff --git a/modules/commands/os_forbid.cpp b/modules/commands/os_forbid.cpp index 0d4426839..46d9aafb7 100644 --- a/modules/commands/os_forbid.cpp +++ b/modules/commands/os_forbid.cpp @@ -105,6 +105,18 @@ class MyForbidService : public ForbidService return NULL; } + ForbidData *FindForbidExact(const Anope::string &mask, ForbidType ftype) anope_override + { + for (unsigned i = this->forbids(ftype).size(); i > 0; --i) + { + ForbidData *d = this->forbids(ftype)[i - 1]; + + if (d->mask.equals_ci(mask)) + return d; + } + return NULL; + } + std::vector GetForbids() anope_override { std::vector f; @@ -203,7 +215,7 @@ class CommandOSForbid : public Command return; } - ForbidData *d = this->fs->FindForbid(entry, ftype); + ForbidData *d = this->fs->FindForbidExact(entry, ftype); bool created = false; if (d == NULL) { @@ -322,7 +334,7 @@ class CommandOSForbid : public Command { const Anope::string &entry = params[2]; - ForbidData *d = this->fs->FindForbid(entry, ftype); + ForbidData *d = this->fs->FindForbidExact(entry, ftype); if (d != NULL) { if (Anope::ReadOnly)