]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/configreader.cpp
Merge extras/m_privdeaf into m_deaf and update documentation.
[user/henk/code/inspircd.git] / src / configreader.cpp
index 5a0ceff06b9e0462e38a5ae2dfa72fa5a4cab486..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;
@@ -309,6 +314,23 @@ void ServerConfig::CrossCheckConnectBlocks(ServerConfig* current)
        }
 }
 
+static std::string GetServerName()
+{
+#ifndef _WIN32
+       char hostname[256];
+       if (gethostname(hostname, sizeof(hostname)) == 0)
+       {
+               std::string name(hostname);
+               if (name.find('.') == std::string::npos)
+                       name.push_back('.');
+
+               if (name.length() <= ServerInstance->Config->Limits.MaxHost && InspIRCd::IsHost(name))
+                       return name;
+       }
+#endif
+       return "irc.example.com";
+}
+
 void ServerConfig::Fill()
 {
        ConfigTag* options = ConfValue("options");
@@ -316,7 +338,7 @@ void ServerConfig::Fill()
        ConfigTag* server = ConfValue("server");
        if (sid.empty())
        {
-               ServerName = server->getString("name", "irc.example.com", InspIRCd::IsHost);
+               ServerName = server->getString("name", GetServerName(), InspIRCd::IsHost);
 
                sid = server->getString("id");
                if (!sid.empty() && !InspIRCd::IsSID(sid))
@@ -388,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"));