/** Returns true wether or not the given string exactly matches the gline
* (no wildcard use in this method) -- used for removal of a line
*/
- virtual bool MatchesLiteral(std::string &str) = 0;
+ virtual bool MatchesLiteral(const std::string &str) = 0;
- virtual bool Matches(const std::string &str);
+ virtual bool Matches(const std::string &str) = 0;
virtual void Apply(User* u);
{
identmask = strdup(ident);
hostmask = strdup(host);
+ matchtext = this->identmask;
+ matchtext.append("@").append(this->hostmask);
}
/** Destructor
virtual bool Matches(User *u);
+ virtual bool Matches(const std::string &str);
+
virtual bool MatchesLiteral(const std::string &str);
virtual void Apply(User* u);
/** Host mask
*/
char* hostmask;
+
+ std::string matchtext;
};
/** GLine class
{
identmask = strdup(ident);
hostmask = strdup(host);
+ matchtext = this->identmask;
+ matchtext.append("@").append(this->hostmask);
}
/** Destructor
virtual bool Matches(User *u);
+ virtual bool Matches(const std::string &str);
+
virtual bool MatchesLiteral(const std::string &str);
virtual void Apply(User* u);
/** Host mask
*/
char* hostmask;
+
+ std::string matchtext;
};
/** ELine class
{
identmask = strdup(ident);
hostmask = strdup(host);
+ matchtext = this->identmask;
+ matchtext.append("@").append(this->hostmask);
}
~ELine()
virtual bool Matches(User *u);
+ virtual bool Matches(const std::string &str);
+
virtual bool MatchesLiteral(const std::string &str);
virtual void Unset();
/** Host mask
*/
char* hostmask;
+
+ std::string matchtext;
};
/** ZLine class
const char* reason = values[0].GetString();
const char* ipmask = values[1].GetString();
- conf->GetInstance()->XLines->AddZLine(0,"<Config>",reason,ipmask);
+ ZLine* zl = new ZLine(conf->GetInstance(), conf->GetInstance()->Time(), 0, "<Config>", reason, ipmask);
+ if (!conf->GetInstance()->XLines->AddLine(zl))
+ delete zl;
+
return true;
}
const char* reason = values[0].GetString();
const char* nick = values[1].GetString();
- conf->GetInstance()->XLines->AddQLine(0,"<Config>",reason,nick);
+ QLine* ql = new QLine(conf->GetInstance(), conf->GetInstance()->Time(), 0, "<Config>", reason, nick);
+ if (!conf->GetInstance()->XLines->AddLine(ql))
+ delete ql;
+
return true;
}
const char* reason = values[0].GetString();
const char* host = values[1].GetString();
- conf->GetInstance()->XLines->AddKLine(0,"<Config>",reason,host);
+ XLineManager* xlm = conf->GetInstance()->XLines;
+
+ IdentHostPair ih = xlm->IdentSplit(host);
+
+ KLine* kl = new KLine(conf->GetInstance(), conf->GetInstance()->Time(), 0, "<Config>", reason, ih.first.c_str(), ih.second.c_str());
+ if (!xlm->AddLine(kl))
+ delete kl;
return true;
}
const char* reason = values[0].GetString();
const char* host = values[1].GetString();
- conf->GetInstance()->XLines->AddELine(0,"<Config>",reason,host);
+ XLineManager* xlm = conf->GetInstance()->XLines;
+
+ IdentHostPair ih = xlm->IdentSplit(host);
+
+ ELine* el = new ELine(conf->GetInstance(), conf->GetInstance()->Time(), 0, "<Config>", reason, ih.first.c_str(), ih.second.c_str());
+ if (!xlm->AddLine(el))
+ delete el;
return true;
}
if (current->registered != REG_ALL)
{
- Server->XLines->AddZLine(120, Server->Config->ServerName, "Flood from unregistered connection", current->GetIPString());
- Server->XLines->ApplyLines();
+ ZLine* zl = new ZLine(Server, Server->Time(), 0, Server->Config->ServerName, "Flood from unregistered connection", current->GetIPString());
+ if (Server->XLines->AddLine(zl))
+ Server->XLines->ApplyLines();
+ else
+ delete zl;
}
}
{
}
-bool XLine::Matches(const std::string &str)
-{
- return false;
-}
-
void XLine::Apply(User* u)
{
}
return false;
}
+bool ELine::Matches(const std::string &str)
+{
+ return ((match(str.c_str(), matchtext.c_str(), true)));
+}
+
+bool KLine::Matches(const std::string &str)
+{
+ return ((match(str.c_str(), matchtext.c_str(), true)));
+}
+
+bool GLine::Matches(const std::string &str)
+{
+ return ((match(str.c_str(), matchtext.c_str(), true)));
+}
+
virtual bool ELine::MatchesLiteral(const std::string &str)
{
return (assign(str) == irc::string(this->identmask) + '@' + this->hostmask);