]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/configreader.cpp
ListModeBase: Minor changes to original u_listmode code
[user/henk/code/inspircd.git] / src / configreader.cpp
index 2577b83b800f6719fd93ef3eb71bfbd71c6468af..804463309c398bc2f18c256ba30276d278b5392d 100644 (file)
@@ -25,8 +25,8 @@
 #include "inspircd.h"
 #include <fstream>
 #include "xline.h"
+#include "listmode.h"
 #include "exitcodes.h"
-#include "commands/cmd_whowas.h"
 #include "configparser.h"
 #include <iostream>
 #ifdef _WIN32
@@ -36,7 +36,6 @@
 
 ServerConfig::ServerConfig()
 {
-       WhoWasGroupSize = WhoWasMaxGroups = WhoWasMaxKeep = 0;
        RawLog = NoUserDns = HideBans = HideSplits = UndernetMsgPrefix = false;
        WildcardIPv6 = CycleHosts = InvBypassModes = true;
        dns_timeout = 5;
@@ -241,7 +240,7 @@ void ServerConfig::CrossCheckOperClassType()
                std::string name = tag->getString("name");
                if (name.empty())
                        throw CoreException("<type:name> is missing from tag at " + tag->getTagLocation());
-               if (!ServerInstance->IsNick(name.c_str(), Limits.NickMax))
+               if (!ServerInstance->IsNick(name, Limits.NickMax))
                        throw CoreException("<type:name> is invalid (value '" + name + "')");
                if (oper_blocks.find(" " + name) != oper_blocks.end())
                        throw CoreException("Duplicate type block with name " + name + " at " + tag->getTagLocation());
@@ -436,42 +435,28 @@ void ServerConfig::CrossCheckConnectBlocks(ServerConfig* current)
 
 /** Represents a deprecated configuration tag.
  */
-struct Deprecated
+struct DeprecatedConfig
 {
-       /** Tag name
-        */
-       const char* tag;
-       /** Tag value
-        */
-       const char* value;
-       /** Reason for deprecation
-        */
-       const char* reason;
+       /** Tag name. */
+       std::string tag;
+       
+       /** Attribute key. */
+       std::string key;
+       
+       /** Attribute value. */
+       std::string value;
+       
+       /** Reason for deprecation. */
+       std::string reason;
 };
 
-static const Deprecated ChangedConfig[] = {
-       {"options", "hidelinks",                "has been moved to <security:hidelinks> as of 1.2a3"},
-       {"options", "hidewhois",                "has been moved to <security:hidewhois> as of 1.2a3"},
-       {"options", "userstats",                "has been moved to <security:userstats> as of 1.2a3"},
-       {"options", "customversion",    "has been moved to <security:customversion> as of 1.2a3"},
-       {"options", "hidesplits",               "has been moved to <security:hidesplits> as of 1.2a3"},
-       {"options", "hidebans",         "has been moved to <security:hidebans> as of 1.2a3"},
-       {"options", "hidekills",                "has been moved to <security:hidekills> as of 1.2a3"},
-       {"options", "operspywhois",             "has been moved to <security:operspywhois> as of 1.2a3"},
-       {"options", "announceinvites",  "has been moved to <security:announceinvites> as of 1.2a3"},
-       {"options", "hidemodes",                "has been moved to <security:hidemodes> as of 1.2a3"},
-       {"options", "maxtargets",               "has been moved to <security:maxtargets> as of 1.2a3"},
-       {"options",     "nouserdns",            "has been moved to <performance:nouserdns> as of 1.2a3"},
-       {"options",     "maxwho",               "has been moved to <performance:maxwho> as of 1.2a3"},
-       {"options",     "softlimit",            "has been moved to <performance:softlimit> as of 1.2a3"},
-       {"options", "somaxconn",                "has been moved to <performance:somaxconn> as of 1.2a3"},
-       {"options", "netbuffersize",    "has been moved to <performance:netbuffersize> as of 1.2a3"},
-       {"options", "maxwho",           "has been moved to <performance:maxwho> as of 1.2a3"},
-       {"options",     "loglevel",             "1.2+ does not use the loglevel value. Please define <log> tags instead."},
-       {"die",     "value",            "you need to reread your config"},
-       {"bind",    "transport",                "has been moved to <bind:ssl> as of 2.0a1"},
-       {"link",    "transport",                "has been moved to <link:ssl> as of 2.0a1"},
-       {"link",        "autoconnect",          "2.0+ does not use the autoconnect value. Please define <autoconnect> tags instead."},
+static const DeprecatedConfig ChangedConfig[] = {
+       { "bind",   "transport",   "",                 "has been moved to <bind:ssl> as of 2.0" },
+       { "die",    "value",       "",                 "you need to reread your config" },
+       { "link",   "autoconnect", "",                 "2.0+ does not use this attribute - define <autoconnect> tags instead" },
+       { "link",   "transport",   "",                 "has been moved to <link:ssl> as of 2.0" },
+       { "module", "name",        "m_chanprotect.so", "has been replaced with m_customprefix as of 2.2" },
+       { "module", "name",        "m_halfop.so",      "has been replaced with m_customprefix as of 2.2" },
 };
 
 void ServerConfig::Fill()
@@ -483,7 +468,7 @@ void ServerConfig::Fill()
                ServerName = ConfValue("server")->getString("name");
                sid = ConfValue("server")->getString("id");
                ValidHost(ServerName, "<server:name>");
-               if (!sid.empty() && !ServerInstance->IsSID(sid))
+               if (!sid.empty() && !InspIRCd::IsSID(sid))
                        throw CoreException(sid + " is not a valid server ID. A server ID must be 3 characters long, with the first character a digit and the next two characters a digit or letter.");
        }
        else
@@ -533,9 +518,6 @@ void ServerConfig::Fill()
        MaxTargets = security->getInt("maxtargets", 20);
        DefaultModes = options->getString("defaultmodes", "nt");
        PID = ConfValue("pid")->getString("file");
-       WhoWasGroupSize = ConfValue("whowas")->getInt("groupsize");
-       WhoWasMaxGroups = ConfValue("whowas")->getInt("maxgroups");
-       WhoWasMaxKeep = ServerInstance->Duration(ConfValue("whowas")->getString("maxkeep"));
        MaxChans = ConfValue("channels")->getInt("users", 20);
        OperMaxChans = ConfValue("channels")->getInt("opers", 60);
        c_ipv4_range = ConfValue("cidr")->getInt("ipv4clone", 32);
@@ -551,15 +533,11 @@ void ServerConfig::Fill()
        Limits.MaxAway = ConfValue("limits")->getInt("maxaway", 200);
        InvBypassModes = options->getBool("invitebypassmodes", true);
        NoSnoticeStack = options->getBool("nosnoticestack", false);
-       WelcomeNotice = options->getBool("welcomenotice", true);
 
        range(SoftLimit, 10, ServerInstance->SE->GetMaxFds(), ServerInstance->SE->GetMaxFds(), "<performance:softlimit>");
        range(MaxConn, 0, SOMAXCONN, SOMAXCONN, "<performance:somaxconn>");
        range(MaxTargets, 1, 31, 20, "<security:maxtargets>");
        range(NetBufferSize, 1024, 65534, 10240, "<performance:netbuffersize>");
-       range(WhoWasGroupSize, 0, 10000, 10, "<whowas:groupsize>");
-       range(WhoWasMaxGroups, 0, 1000000, 10240, "<whowas:maxgroups>");
-       range(WhoWasMaxKeep, 3600, INT_MAX, 3600, "<whowas:maxkeep>");
 
        ValidIP(DNSServer, "<dns:server>");
 
@@ -591,16 +569,6 @@ void ServerConfig::Fill()
                ulines[assign(server)] = tag->getBool("silent");
        }
 
-       tags = ConfTags("banlist");
-       for(ConfigIter i = tags.first; i != tags.second; ++i)
-       {
-               ConfigTag* tag = i->second;
-               std::string chan;
-               if (!tag->readString("chan", chan))
-                       throw CoreException("<banlist> tag missing chan at " + tag->getTagLocation());
-               maxbans[chan] = tag->getInt("limit");
-       }
-
        ReadXLine(this, "badip", "ipmask", ServerInstance->XLines->GetFactory("Z"));
        ReadXLine(this, "badnick", "nick", ServerInstance->XLines->GetFactory("Q"));
        ReadXLine(this, "badhost", "host", ServerInstance->XLines->GetFactory("K"));
@@ -689,16 +657,26 @@ void ServerConfig::Apply(ServerConfig* old, const std::string &useruid)
        /* The stuff in here may throw CoreException, be sure we're in a position to catch it. */
        try
        {
-               for (int Index = 0; Index * sizeof(Deprecated) < sizeof(ChangedConfig); Index++)
+               for (int index = 0; index * sizeof(DeprecatedConfig) < sizeof(ChangedConfig); index++)
                {
-                       std::string dummy;
-                       ConfigTagList tags = ConfTags(ChangedConfig[Index].tag);
+                       std::string value;
+                       ConfigTagList tags = ConfTags(ChangedConfig[index].tag);
                        for(ConfigIter i = tags.first; i != tags.second; ++i)
                        {
-                               if (i->second->readString(ChangedConfig[Index].value, dummy, true))
-                                       errstr << "Your configuration contains a deprecated value: <"
-                                               << ChangedConfig[Index].tag << ":" << ChangedConfig[Index].value << "> - " << ChangedConfig[Index].reason
-                                               << " (at " << i->second->getTagLocation() << ")\n";
+                               if (i->second->readString(ChangedConfig[index].key, value, true)
+                                       && (ChangedConfig[index].value.empty() || value == ChangedConfig[index].value))
+                               {
+                                       errstr << "Your configuration contains a deprecated value: <"  << ChangedConfig[index].tag;
+                                       if (ChangedConfig[index].value.empty())
+                                       {
+                                               errstr << ':' << ChangedConfig[index].key;
+                                       }
+                                       else
+                                       {
+                                               errstr << ' ' << ChangedConfig[index].key << "=\"" << ChangedConfig[index].value << "\"";
+                                       }
+                                       errstr << "> - " << ChangedConfig[index].reason << " (at " << i->second->getTagLocation() << ")\n";
+                               }
                        }
                }
 
@@ -806,10 +784,6 @@ void ServerConfig::Apply(ServerConfig* old, const std::string &useruid)
 
 void ServerConfig::ApplyModules(User* user)
 {
-       Module* whowas = ServerInstance->Modules->Find("cmd_whowas.so");
-       if (whowas)
-               WhowasRequest(NULL, whowas, WhowasRequest::WHOWAS_PRUNE).Send();
-
        const std::vector<std::string> v = ServerInstance->Modules->GetAllModuleNames(0);
        std::vector<std::string> added_modules;
        std::set<std::string> removed_modules(v.begin(), v.end());
@@ -953,7 +927,8 @@ void ConfigReaderThread::Finish()
                ServerInstance->XLines->CheckELines();
                ServerInstance->XLines->ApplyLines();
                ServerInstance->Res->Rehash();
-               ServerInstance->ResetMaxBans();
+               ModeReference ban(NULL, "ban");
+               static_cast<ListModeBase*>(*ban)->DoRehash();
                Config->ApplyDisabledCommands(Config->DisabledCommands);
                User* user = ServerInstance->FindNick(TheUserUID);
                FOREACH_MOD(I_OnRehash, OnRehash(user));