]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/configreader.cpp
Use XLineFactory in ADDLINE, so that it can deal with anything the rest of the ircd...
[user/henk/code/inspircd.git] / src / configreader.cpp
index e0d66d525846e92e97f9ba8c8c136d6d93d3a3f3..8311ad58eb3f0ba15ddb8b1ae0af9ef976c548d6 100644 (file)
@@ -31,6 +31,7 @@ std::vector<std::string> old_module_names, new_module_names, added_modules, remo
 
 /* Needs forward declaration */
 bool ValidateDnsServer(ServerConfig* conf, const char* tag, const char* value, ValueItem &data);
+bool DoneELine(ServerConfig* conf, const char* tag);
 
 ServerConfig::ServerConfig(InspIRCd* Instance) : ServerInstance(Instance)
 {
@@ -1924,7 +1925,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, NULL))
+               delete zl;
+
        return true;
 }
 
@@ -1933,7 +1937,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, NULL))
+               delete ql;
+
        return true;
 }
 
@@ -1942,7 +1949,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, NULL))
+               delete kl;
        return true;
 }
 
@@ -1951,7 +1964,26 @@ 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, NULL))
+               delete el;
+       return true;
+}
+
+// this should probably be moved to configreader, but atm it relies on CheckELines above.
+bool DoneELine(ServerConfig* conf, const char* tag)
+{
+       for (std::vector<User*>::const_iterator u2 = conf->GetInstance()->local_users.begin(); u2 != conf->GetInstance()->local_users.end(); u2++)
+       {
+               User* u = (User*)(*u2);
+               u->exempt = false;
+       }
+
+       conf->GetInstance()->XLines->CheckELines(conf->GetInstance()->XLines->lookup_lines['E']);
        return true;
 }