]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/configreader.cpp
Improve the handling of config X-lines and filters. (#1583)
[user/henk/code/inspircd.git] / src / configreader.cpp
index 00880cfff80d88babd47c69d635f644a7d179704..0318dd602cb9f071dd9ca5a09369117046e6f23e 100644 (file)
@@ -74,6 +74,8 @@ ServerConfig::~ServerConfig()
 
 static void ReadXLine(ServerConfig* conf, const std::string& tag, const std::string& key, XLineFactory* make)
 {
+       insp::flat_set<std::string> configlines;
+
        ConfigTagList tags = conf->ConfTags(tag);
        for(ConfigIter i = tags.first; i != tags.second; ++i)
        {
@@ -84,9 +86,12 @@ static void ReadXLine(ServerConfig* conf, const std::string& tag, const std::str
                std::string reason = ctag->getString("reason", "<Config>");
                XLine* xl = make->Generate(ServerInstance->Time(), 0, "<Config>", reason, mask);
                xl->from_config = true;
+               configlines.insert(xl->Displayable());
                if (!ServerInstance->XLines->AddLine(xl, NULL))
                        delete xl;
        }
+
+       ServerInstance->XLines->ExpireRemovedConfigLines(make->GetType(), configlines);
 }
 
 typedef std::map<std::string, ConfigTag*> LocalIndex;
@@ -405,7 +410,6 @@ void ServerConfig::Fill()
                        SocketEngine::Close(socktest);
        }
 
-       ServerInstance->XLines->ClearConfigLines();
        ReadXLine(this, "badip", "ipmask", ServerInstance->XLines->GetFactory("Z"));
        ReadXLine(this, "badnick", "nick", ServerInstance->XLines->GetFactory("Q"));
        ReadXLine(this, "badhost", "host", ServerInstance->XLines->GetFactory("K"));