X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fconfigreader.cpp;h=2cd17e844bcd0b62e7f42281395ac1fd1f0d8461;hb=d494fa6e094e85cd29235e995fb2b447d6e1f168;hp=68630685fd03bd1484822fc89f893d0964537f71;hpb=44489ddf7e90413d8f656aea24d74445bab227af;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/configreader.cpp b/src/configreader.cpp index 68630685f..2cd17e844 100644 --- a/src/configreader.cpp +++ b/src/configreader.cpp @@ -3,7 +3,7 @@ * * Copyright (C) 2019 Matt Schatz * Copyright (C) 2013-2016 Attila Molnar - * Copyright (C) 2013-2014, 2016-2020 Sadie Powell + * Copyright (C) 2013-2014, 2016-2021 Sadie Powell * Copyright (C) 2013 Daniel Vassdal * Copyright (C) 2012 Robby * Copyright (C) 2012 Justin Crawford @@ -15,6 +15,7 @@ * Copyright (C) 2007-2010 Robin Burchell * Copyright (C) 2007 Dennis Friis * Copyright (C) 2006-2008 Craig Edwards + * Copyright (C) 2006 Oliver Lupton * * This file is part of InspIRCd. InspIRCd is free software: you can * redistribute it and/or modify it under the terms of the GNU General Public @@ -38,17 +39,17 @@ #include ServerLimits::ServerLimits(ConfigTag* tag) - : NickMax(tag->getUInt("maxnick", 30)) - , ChanMax(tag->getUInt("maxchan", 64)) - , MaxModes(tag->getUInt("maxmodes", 20)) - , IdentMax(tag->getUInt("maxident", 10)) - , MaxQuit(tag->getUInt("maxquit", 255)) - , MaxTopic(tag->getUInt("maxtopic", 307)) - , MaxKick(tag->getUInt("maxkick", 255)) - , MaxReal(tag->getUInt("maxreal", tag->getUInt("maxgecos", 128))) - , MaxAway(tag->getUInt("maxaway", 200)) - , MaxLine(tag->getUInt("maxline", 512)) - , MaxHost(tag->getUInt("maxhost", 64)) + : MaxLine(tag->getUInt("maxline", 512, 512)) + , NickMax(tag->getUInt("maxnick", 30, 1, MaxLine)) + , ChanMax(tag->getUInt("maxchan", 64, 1, MaxLine)) + , MaxModes(tag->getUInt("maxmodes", 20, 1)) + , IdentMax(tag->getUInt("maxident", 10, 1)) + , MaxQuit(tag->getUInt("maxquit", 255, 0, MaxLine)) + , MaxTopic(tag->getUInt("maxtopic", 307, 1, MaxLine)) + , MaxKick(tag->getUInt("maxkick", 255, 1, MaxLine)) + , MaxReal(tag->getUInt("maxreal", tag->getUInt("maxgecos", 128), 1, MaxLine)) + , MaxAway(tag->getUInt("maxaway", 200, 1, MaxLine)) + , MaxHost(tag->getUInt("maxhost", 64, 1, MaxLine)) { } @@ -57,6 +58,7 @@ ServerConfig::ServerPaths::ServerPaths(ConfigTag* tag) , Data(tag->getString("datadir", INSPIRCD_DATA_PATH, 1)) , Log(tag->getString("logdir", INSPIRCD_LOG_PATH, 1)) , Module(tag->getString("moduledir", INSPIRCD_MODULE_PATH, 1)) + , Runtime(tag->getString("runtimedir", INSPIRCD_RUNTIME_PATH, 1)) { } @@ -173,22 +175,23 @@ void ServerConfig::CrossCheckOperClassType() void ServerConfig::CrossCheckConnectBlocks(ServerConfig* current) { - typedef std::map ClassMap; + typedef std::map, ConnectClass*> ClassMap; ClassMap oldBlocksByMask; if (current) { for(ClassVector::iterator i = current->Classes.begin(); i != current->Classes.end(); ++i) { ConnectClass* c = *i; - if (c->name.compare(0, 8, "unnamed-", 8)) + switch (c->type) { - oldBlocksByMask["n" + c->name] = c; - } - else if (c->type == CC_ALLOW || c->type == CC_DENY) - { - std::string typeMask = (c->type == CC_ALLOW) ? "a" : "d"; - typeMask += c->host; - oldBlocksByMask[typeMask] = c; + case CC_ALLOW: + case CC_DENY: + oldBlocksByMask[std::make_pair(c->host, c->type)] = c; + break; + + case CC_NAMED: + oldBlocksByMask[std::make_pair(c->name, c->type)] = c; + break; } } } @@ -236,24 +239,17 @@ void ServerConfig::CrossCheckConnectBlocks(ServerConfig* current) } std::string name = tag->getString("name"); - std::string mask, typeMask; + std::string mask; char type; if (tag->readString("allow", mask, false)) - { type = CC_ALLOW; - typeMask = 'a' + mask; - } else if (tag->readString("deny", mask, false)) - { type = CC_DENY; - typeMask = 'd' + mask; - } else if (!name.empty()) { type = CC_NAMED; mask = name; - typeMask = 'n' + mask; } else { @@ -261,13 +257,7 @@ void ServerConfig::CrossCheckConnectBlocks(ServerConfig* current) } if (name.empty()) - { name = "unnamed-" + ConvToStr(i); - } - else - { - typeMask = 'n' + name; - } if (names.find(name) != names.end()) throw CoreException("Two connect classes with name \"" + name + "\" defined!"); @@ -321,7 +311,7 @@ void ServerConfig::CrossCheckConnectBlocks(ServerConfig* current) me->ports.insert(port); } - ClassMap::iterator oldMask = oldBlocksByMask.find(typeMask); + ClassMap::iterator oldMask = oldBlocksByMask.find(std::make_pair(me->name, me->type)); if (oldMask != oldBlocksByMask.end()) { ConnectClass* old = oldMask->second; @@ -335,7 +325,7 @@ void ServerConfig::CrossCheckConnectBlocks(ServerConfig* current) } } -static std::string GetServerName() +static std::string GetServerHost() { #ifndef _WIN32 char hostname[256]; @@ -359,7 +349,7 @@ void ServerConfig::Fill() ConfigTag* server = ConfValue("server"); if (sid.empty()) { - ServerName = server->getString("name", GetServerName(), InspIRCd::IsHost); + ServerName = server->getString("name", GetServerHost(), InspIRCd::IsHost); sid = server->getString("id"); if (!sid.empty() && !InspIRCd::IsSID(sid)) @@ -524,9 +514,9 @@ void ServerConfig::Apply(ServerConfig* old, const std::string &useruid) // On first run, ports are bound later on FailedPortList pl; ServerInstance->BindPorts(pl); - if (pl.size()) + if (!pl.empty()) { - std::cout << "Warning! Some of your listener" << (pl.size() == 1 ? "s" : "") << " failed to bind:" << std::endl; + errstr << "Warning! Some of your listener" << (pl.size() == 1 ? "s" : "") << " failed to bind:" << std::endl; for (FailedPortList::const_iterator iter = pl.begin(); iter != pl.end(); ++iter) { const FailedPort& fp = *iter;