X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fxline.cpp;h=22086375dd4333261f01dbc54aa00dd109df9314;hb=30b7a1bf7fb0b422a6fd674f0cce95b3b0f92673;hp=5d5a95516b27ec8e3a998c3d9d6b3610163f437e;hpb=4b856bda135a08e800b96c970a10b0b6a34d433a;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/xline.cpp b/src/xline.cpp index 5d5a95516..22086375d 100644 --- a/src/xline.cpp +++ b/src/xline.cpp @@ -11,10 +11,9 @@ * --------------------------------------------------- */ -/* $Core: libIRCDxline */ +/* $Core */ #include "inspircd.h" -#include "wildcard.h" #include "xline.h" #include "bancache.h" @@ -116,6 +115,22 @@ XLineLookup* XLineManager::GetAll(const std::string &type) return &(n->second); } +void XLineManager::DelAll(const std::string &type) +{ + ContainerIter n = lookup_lines.find(type); + + if (n == lookup_lines.end()) + return; + + LookupIter x; + + /* Delete all of a given type (this should probably use DelLine, but oh well) */ + while ((x = n->second.begin()) != n->second.end()) + { + ExpireLine(n, x); + } +} + std::vector XLineManager::GetAllTypes() { std::vector items; @@ -150,12 +165,21 @@ IdentHostPair XLineManager::IdentSplit(const std::string &ident_and_host) bool XLineManager::AddLine(XLine* line, User* user) { - /*IdentHostPair ih = IdentSplit(hostmask);*/ - ServerInstance->BanCache->RemoveEntries(line->type, false); // XXX perhaps remove ELines here? - if (DelLine(line->Displayable(), line->type, user, true)) - return false; + /* If the line exists, check if its an expired line */ + ContainerIter x = lookup_lines.find(line->type); + if (x != lookup_lines.end()) + { + LookupIter i = x->second.find(line->Displayable()); + if (i != x->second.end()) + { + if (i->second->duration && ServerInstance->Time() > i->second->expiry) + ExpireLine(x, i); + else + return false; + } + } /*ELine* item = new ELine(ServerInstance, ServerInstance->Time(), duration, source, reason, ih.first.c_str(), ih.second.c_str());*/ XLineFactory* xlf = GetFactory(line->type); @@ -442,9 +466,10 @@ bool KLine::Matches(User *u) if (u->exempt) return false; - if ((match(u->ident, this->identmask))) + if (InspIRCd::Match(u->ident, this->identmask)) { - if ((match(u->host, this->hostmask, true)) || (match(u->GetIPString(), this->hostmask, true))) + if (InspIRCd::MatchCIDR(u->host, this->hostmask) || + InspIRCd::MatchCIDR(u->GetIPString(), this->hostmask)) { return true; } @@ -463,9 +488,10 @@ bool GLine::Matches(User *u) if (u->exempt) return false; - if ((match(u->ident, this->identmask))) + if (InspIRCd::Match(u->ident, this->identmask)) { - if ((match(u->host, this->hostmask, true)) || (match(u->GetIPString(), this->hostmask, true))) + if (InspIRCd::MatchCIDR(u->host, this->hostmask) || + InspIRCd::MatchCIDR(u->GetIPString(), this->hostmask)) { return true; } @@ -484,9 +510,10 @@ bool ELine::Matches(User *u) if (u->exempt) return false; - if ((match(u->ident, this->identmask))) + if (InspIRCd::Match(u->ident, this->identmask)) { - if ((match(u->host, this->hostmask, true)) || (match(u->GetIPString(), this->hostmask, true))) + if (InspIRCd::MatchCIDR(u->host, this->hostmask) || + InspIRCd::MatchCIDR(u->GetIPString(), this->hostmask)) { return true; } @@ -500,7 +527,7 @@ bool ZLine::Matches(User *u) if (u->exempt) return false; - if (match(u->GetIPString(), this->ipaddr, true)) + if (InspIRCd::MatchCIDR(u->GetIPString(), this->ipaddr)) return true; else return false; @@ -514,10 +541,7 @@ void ZLine::Apply(User* u) bool QLine::Matches(User *u) { - if (u->exempt) - return false; - - if (match(u->nick, this->nick)) + if (InspIRCd::Match(u->nick, this->nick)) return true; return false; @@ -532,7 +556,7 @@ void QLine::Apply(User* u) bool ZLine::Matches(const std::string &str) { - if (match(str, this->ipaddr, true)) + if (InspIRCd::MatchCIDR(str, this->ipaddr)) return true; else return false; @@ -540,7 +564,7 @@ bool ZLine::Matches(const std::string &str) bool QLine::Matches(const std::string &str) { - if (match(str, this->nick)) + if (InspIRCd::Match(str, this->nick)) return true; return false; @@ -548,17 +572,17 @@ bool QLine::Matches(const std::string &str) bool ELine::Matches(const std::string &str) { - return ((match(str, matchtext, true))); + return (InspIRCd::MatchCIDR(str, matchtext)); } bool KLine::Matches(const std::string &str) { - return ((match(str.c_str(), matchtext, true))); + return (InspIRCd::MatchCIDR(str.c_str(), matchtext)); } bool GLine::Matches(const std::string &str) { - return ((match(str, matchtext, true))); + return (InspIRCd::MatchCIDR(str, matchtext)); } void ELine::OnAdd()