summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/xline.h22
-rw-r--r--src/configreader.cpp26
-rw-r--r--src/userprocess.cpp7
-rw-r--r--src/xline.cpp20
4 files changed, 62 insertions, 13 deletions
diff --git a/include/xline.h b/include/xline.h
index 5b81eef82..cca0e9b76 100644
--- a/include/xline.h
+++ b/include/xline.h
@@ -69,9 +69,9 @@ class CoreExport XLine : public classbase
/** 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);
@@ -123,6 +123,8 @@ class CoreExport KLine : public XLine
{
identmask = strdup(ident);
hostmask = strdup(host);
+ matchtext = this->identmask;
+ matchtext.append("@").append(this->hostmask);
}
/** Destructor
@@ -135,6 +137,8 @@ class CoreExport KLine : public XLine
virtual bool Matches(User *u);
+ virtual bool Matches(const std::string &str);
+
virtual bool MatchesLiteral(const std::string &str);
virtual void Apply(User* u);
@@ -147,6 +151,8 @@ class CoreExport KLine : public XLine
/** Host mask
*/
char* hostmask;
+
+ std::string matchtext;
};
/** GLine class
@@ -166,6 +172,8 @@ class CoreExport GLine : public XLine
{
identmask = strdup(ident);
hostmask = strdup(host);
+ matchtext = this->identmask;
+ matchtext.append("@").append(this->hostmask);
}
/** Destructor
@@ -178,6 +186,8 @@ class CoreExport GLine : public XLine
virtual bool Matches(User *u);
+ virtual bool Matches(const std::string &str);
+
virtual bool MatchesLiteral(const std::string &str);
virtual void Apply(User* u);
@@ -190,6 +200,8 @@ class CoreExport GLine : public XLine
/** Host mask
*/
char* hostmask;
+
+ std::string matchtext;
};
/** ELine class
@@ -209,6 +221,8 @@ class CoreExport ELine : public XLine
{
identmask = strdup(ident);
hostmask = strdup(host);
+ matchtext = this->identmask;
+ matchtext.append("@").append(this->hostmask);
}
~ELine()
@@ -219,6 +233,8 @@ class CoreExport ELine : public XLine
virtual bool Matches(User *u);
+ virtual bool Matches(const std::string &str);
+
virtual bool MatchesLiteral(const std::string &str);
virtual void Unset();
@@ -233,6 +249,8 @@ class CoreExport ELine : public XLine
/** Host mask
*/
char* hostmask;
+
+ std::string matchtext;
};
/** ZLine class
diff --git a/src/configreader.cpp b/src/configreader.cpp
index e0d66d525..96f461162 100644
--- a/src/configreader.cpp
+++ b/src/configreader.cpp
@@ -1924,7 +1924,10 @@ bool DoZLine(ServerConfig* conf, const char* tag, char** entries, ValueList &val
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;
}
@@ -1933,7 +1936,10 @@ bool DoQLine(ServerConfig* conf, const char* tag, char** entries, ValueList &val
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;
}
@@ -1942,7 +1948,13 @@ bool DoKLine(ServerConfig* conf, const char* tag, char** entries, ValueList &val
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;
}
@@ -1951,7 +1963,13 @@ bool DoELine(ServerConfig* conf, const char* tag, char** entries, ValueList &val
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;
}
diff --git a/src/userprocess.cpp b/src/userprocess.cpp
index 066800409..39d3ad0ec 100644
--- a/src/userprocess.cpp
+++ b/src/userprocess.cpp
@@ -29,8 +29,11 @@ void FloodQuitUserHandler::Call(User* current)
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;
}
}
diff --git a/src/xline.cpp b/src/xline.cpp
index 9a56450ff..bc505dcc5 100644
--- a/src/xline.cpp
+++ b/src/xline.cpp
@@ -428,11 +428,6 @@ XLineManager::XLineManager(InspIRCd* Instance) : ServerInstance(Instance)
{
}
-bool XLine::Matches(const std::string &str)
-{
- return false;
-}
-
void XLine::Apply(User* u)
{
}
@@ -558,6 +553,21 @@ bool QLine::Matches(const std::string &str)
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);