X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fxline.cpp;h=8d4c822aab715bc43e5c5c7ade70dde7bbe7863a;hb=758fc5fcbb988a1f3d692485e47cb8d253b2bc8d;hp=b116d2e1f9eb5859e6e954b9345c4a9784264df8;hpb=c6a508a3da977041909f18f77d6e8fea942512cf;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/xline.cpp b/src/xline.cpp index b116d2e1f..8d4c822aa 100644 --- a/src/xline.cpp +++ b/src/xline.cpp @@ -33,7 +33,7 @@ class GLineFactory : public XLineFactory /** Generate a GLine */ - XLine* Generate(time_t set_time, long duration, std::string source, std::string reason, std::string xline_specific_mask) + XLine* Generate(time_t set_time, long duration, std::string source, std::string reason, std::string xline_specific_mask) CXX11_OVERRIDE { IdentHostPair ih = ServerInstance->XLines->IdentSplit(xline_specific_mask); return new GLine(set_time, duration, source, reason, ih.first, ih.second); @@ -49,7 +49,7 @@ class ELineFactory : public XLineFactory /** Generate an ELine */ - XLine* Generate(time_t set_time, long duration, std::string source, std::string reason, std::string xline_specific_mask) + XLine* Generate(time_t set_time, long duration, std::string source, std::string reason, std::string xline_specific_mask) CXX11_OVERRIDE { IdentHostPair ih = ServerInstance->XLines->IdentSplit(xline_specific_mask); return new ELine(set_time, duration, source, reason, ih.first, ih.second); @@ -65,7 +65,7 @@ class KLineFactory : public XLineFactory /** Generate a KLine */ - XLine* Generate(time_t set_time, long duration, std::string source, std::string reason, std::string xline_specific_mask) + XLine* Generate(time_t set_time, long duration, std::string source, std::string reason, std::string xline_specific_mask) CXX11_OVERRIDE { IdentHostPair ih = ServerInstance->XLines->IdentSplit(xline_specific_mask); return new KLine(set_time, duration, source, reason, ih.first, ih.second); @@ -81,7 +81,7 @@ class QLineFactory : public XLineFactory /** Generate a QLine */ - XLine* Generate(time_t set_time, long duration, std::string source, std::string reason, std::string xline_specific_mask) + XLine* Generate(time_t set_time, long duration, std::string source, std::string reason, std::string xline_specific_mask) CXX11_OVERRIDE { return new QLine(set_time, duration, source, reason, xline_specific_mask); } @@ -96,7 +96,7 @@ class ZLineFactory : public XLineFactory /** Generate a ZLine */ - XLine* Generate(time_t set_time, long duration, std::string source, std::string reason, std::string xline_specific_mask) + XLine* Generate(time_t set_time, long duration, std::string source, std::string reason, std::string xline_specific_mask) CXX11_OVERRIDE { return new ZLine(set_time, duration, source, reason, xline_specific_mask); } @@ -159,6 +159,7 @@ void XLineManager::CheckELines() for (UserManager::LocalList::const_iterator u2 = list.begin(); u2 != list.end(); u2++) { LocalUser* u = *u2; + u->exempt = false; /* This uses safe iteration to ensure that if a line expires here, it doenst trash the iterator */ LookupIter safei; @@ -169,7 +170,8 @@ void XLineManager::CheckELines() safei++; XLine *e = i->second; - u->exempt = e->Matches(u); + if ((!e->duration || ServerInstance->Time() < e->expiry) && e->Matches(u)) + u->exempt = true; i = safei; } @@ -323,14 +325,6 @@ bool XLineManager::DelLine(const char* hostmask, const std::string &type, User* void ELine::Unset() { - /* remove exempt from everyone and force recheck after deleting eline */ - const UserManager::LocalList& list = ServerInstance->Users.GetLocalUsers(); - for (UserManager::LocalList::const_iterator u2 = list.begin(); u2 != list.end(); u2++) - { - LocalUser* u = *u2; - u->exempt = false; - } - ServerInstance->XLines->CheckELines(); } @@ -554,7 +548,7 @@ bool KLine::Matches(User *u) if (InspIRCd::Match(u->ident, this->identmask, ascii_case_insensitive_map)) { - if (InspIRCd::MatchCIDR(u->host, this->hostmask, ascii_case_insensitive_map) || + if (InspIRCd::MatchCIDR(u->GetRealHost(), this->hostmask, ascii_case_insensitive_map) || InspIRCd::MatchCIDR(u->GetIPString(), this->hostmask, ascii_case_insensitive_map)) { return true; @@ -577,7 +571,7 @@ bool GLine::Matches(User *u) if (InspIRCd::Match(u->ident, this->identmask, ascii_case_insensitive_map)) { - if (InspIRCd::MatchCIDR(u->host, this->hostmask, ascii_case_insensitive_map) || + if (InspIRCd::MatchCIDR(u->GetRealHost(), this->hostmask, ascii_case_insensitive_map) || InspIRCd::MatchCIDR(u->GetIPString(), this->hostmask, ascii_case_insensitive_map)) { return true; @@ -600,7 +594,7 @@ bool ELine::Matches(User *u) if (InspIRCd::Match(u->ident, this->identmask, ascii_case_insensitive_map)) { - if (InspIRCd::MatchCIDR(u->host, this->hostmask, ascii_case_insensitive_map) || + if (InspIRCd::MatchCIDR(u->GetRealHost(), this->hostmask, ascii_case_insensitive_map) || InspIRCd::MatchCIDR(u->GetIPString(), this->hostmask, ascii_case_insensitive_map)) { return true;