mirror of
https://github.com/anope/anope.git
synced 2026-06-30 12:26:38 +02:00
Fix a few of the earlier changes to os_forbid
This commit is contained in:
@@ -16,32 +16,31 @@
|
||||
|
||||
class MyForbidService : public ForbidService
|
||||
{
|
||||
Serialize::Checker<std::vector<ForbidData *>[FT_SIZE]> forbid_data;
|
||||
Serialize::Checker<std::vector<ForbidData *>[FT_SIZE - 1]> forbid_data;
|
||||
|
||||
inline std::vector<ForbidData *>* forbids() { return *this->forbid_data; }
|
||||
inline std::vector<ForbidData *>& forbids(unsigned t) { return (*this->forbid_data)[t - 1]; }
|
||||
|
||||
public:
|
||||
MyForbidService(Module *m) : ForbidService(m), forbid_data("ForbidData") { }
|
||||
|
||||
void AddForbid(ForbidData *d) anope_override
|
||||
{
|
||||
this->forbids()[d->type].push_back(d);
|
||||
this->forbids(d->type).push_back(d);
|
||||
}
|
||||
|
||||
void RemoveForbid(ForbidData *d) anope_override
|
||||
{
|
||||
std::vector<ForbidData *>::iterator it = std::find(this->forbids()[d->type].begin(), this->forbids()[d->type].end(), d);
|
||||
if (it != this->forbids()[d->type].end())
|
||||
this->forbids()[d->type].erase(it);
|
||||
std::vector<ForbidData *>::iterator it = std::find(this->forbids(d->type).begin(), this->forbids(d->type).end(), d);
|
||||
if (it != this->forbids(d->type).end())
|
||||
this->forbids(d->type).erase(it);
|
||||
delete d;
|
||||
}
|
||||
|
||||
ForbidData *FindForbid(const Anope::string &mask, ForbidType ftype) anope_override
|
||||
{
|
||||
const std::vector<ForbidData *> &forbids = this->forbids()[ftype];
|
||||
for (unsigned i = forbids.size(); i > 0; --i)
|
||||
for (unsigned i = this->forbids(ftype).size(); i > 0; --i)
|
||||
{
|
||||
ForbidData *d = forbids[i - 1];
|
||||
ForbidData *d = this->forbids(ftype)[i - 1];
|
||||
|
||||
if (Anope::Match(mask, d->mask, false, true))
|
||||
return d;
|
||||
@@ -51,11 +50,11 @@ class MyForbidService : public ForbidService
|
||||
|
||||
std::vector<ForbidData *> GetForbids() anope_override
|
||||
{
|
||||
std::vector<ForbidData *> forbids;
|
||||
for (unsigned j = 0; j < FT_SIZE; ++j)
|
||||
for (unsigned i = this->forbids()[j].size(); i > 0; --i)
|
||||
std::vector<ForbidData *> f;
|
||||
for (unsigned j = FT_NICK; j < FT_SIZE; ++j)
|
||||
for (unsigned i = this->forbids(j).size(); i > 0; --i)
|
||||
{
|
||||
ForbidData *d = this->forbids()[j].at(i - 1);
|
||||
ForbidData *d = this->forbids(j).at(i - 1);
|
||||
|
||||
if (d->expires && Anope::CurTime >= d->expires)
|
||||
{
|
||||
@@ -68,15 +67,14 @@ class MyForbidService : public ForbidService
|
||||
ftype = "email";
|
||||
|
||||
Log(LOG_NORMAL, "expire/forbid") << "Expiring forbid for " << d->mask << " type " << ftype;
|
||||
std::vector<ForbidData *> &forbids = this->forbids()[j];
|
||||
forbids.erase(forbids.begin() + i - 1);
|
||||
this->forbids(j).erase(this->forbids(j).begin() + i - 1);
|
||||
delete d;
|
||||
}
|
||||
else
|
||||
forbids.push_back(d);
|
||||
f.push_back(d);
|
||||
}
|
||||
|
||||
return forbids;
|
||||
return f;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
enum ForbidType
|
||||
{
|
||||
FT_NICK,
|
||||
FT_NICK = 1,
|
||||
FT_CHAN,
|
||||
FT_EMAIL,
|
||||
FT_REGISTER,
|
||||
@@ -70,6 +70,9 @@ Serializable* ForbidData::Unserialize(Serializable *obj, Serialize::Data &data)
|
||||
data["type"] >> t;
|
||||
fb->type = static_cast<ForbidType>(t);
|
||||
|
||||
if (t > FT_SIZE - 1)
|
||||
return NULL;
|
||||
|
||||
if (!obj)
|
||||
forbid_service->AddForbid(fb);
|
||||
return fb;
|
||||
|
||||
Reference in New Issue
Block a user