X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fconfigreader.cpp;h=d06753423af9df5b8779fabc2694fcadc01d7f81;hb=a30a0074edac353cb60e134b43fa8ff0ffb67f8b;hp=782a80080aad8e9e83cc4e741ce557c30733ad01;hpb=586abc72dab240bc9e4d6bfd60a53a26f0811422;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/configreader.cpp b/src/configreader.cpp index 782a80080..d06753423 100644 --- a/src/configreader.cpp +++ b/src/configreader.cpp @@ -1,12 +1,20 @@ /* * InspIRCd -- Internet Relay Chat Daemon * - * Copyright (C) 2009-2010 Daniel De Graaf - * Copyright (C) 2007-2009 Robin Burchell - * Copyright (C) 2006-2009 Dennis Friis - * Copyright (C) 2006-2008 Craig Edwards + * Copyright (C) 2019 Matt Schatz + * Copyright (C) 2013-2016 Attila Molnar + * Copyright (C) 2013-2014, 2016-2020 Sadie Powell + * Copyright (C) 2013 Daniel Vassdal + * Copyright (C) 2012 Robby + * Copyright (C) 2012 Justin Crawford + * Copyright (C) 2012 DjSlash + * Copyright (C) 2012 ChrisTX + * Copyright (C) 2009-2011 Daniel De Graaf + * Copyright (C) 2009 Uli Schlachter * Copyright (C) 2008 Thomas Stagner - * Copyright (C) 2006 Oliver Lupton + * Copyright (C) 2007-2010 Robin Burchell + * Copyright (C) 2007 Dennis Friis + * Copyright (C) 2006-2008 Craig Edwards * * 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 @@ -30,25 +38,25 @@ #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)) { } ServerConfig::ServerPaths::ServerPaths(ConfigTag* tag) - : Config(tag->getString("configdir", INSPIRCD_CONFIG_PATH)) - , Data(tag->getString("datadir", INSPIRCD_DATA_PATH)) - , Log(tag->getString("logdir", INSPIRCD_LOG_PATH)) - , Module(tag->getString("moduledir", INSPIRCD_MODULE_PATH)) + : Config(tag->getString("configdir", INSPIRCD_CONFIG_PATH, 1)) + , Data(tag->getString("datadir", INSPIRCD_DATA_PATH, 1)) + , Log(tag->getString("logdir", INSPIRCD_LOG_PATH, 1)) + , Module(tag->getString("moduledir", INSPIRCD_MODULE_PATH, 1)) { } @@ -296,6 +304,14 @@ void ServerConfig::CrossCheckConnectBlocks(ServerConfig* current) me->maxconnwarn = tag->getBool("maxconnwarn", me->maxconnwarn); me->limit = tag->getUInt("limit", me->limit); me->resolvehostnames = tag->getBool("resolvehostnames", me->resolvehostnames); + me->password = tag->getString("password", me->password); + + me->passwordhash = tag->getString("hash", me->passwordhash); + if (!me->password.empty() && (me->passwordhash.empty() || stdalgo::string::equalsci(me->passwordhash, "plaintext"))) + { + ServerInstance->Logs->Log("CONNECTCLASS", LOG_DEFAULT, " tag '%s' at %s contains an plain text password, this is insecure!", + name.c_str(), tag->getTagLocation().c_str()); + } std::string ports = tag->getString("port"); if (!ports.empty()) @@ -349,7 +365,7 @@ void ServerConfig::Fill() 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."); - CaseMapping = options->getString("casemapping", "rfc1459"); + CaseMapping = options->getString("casemapping", "rfc1459", 1); if (CaseMapping == "ascii") national_case_insensitive_map = ascii_case_insensitive_map; else if (CaseMapping == "rfc1459") @@ -368,7 +384,8 @@ void ServerConfig::Fill() throw CoreException("You must restart to change the server id"); std::string casemapping = options->getString("casemapping"); - if (!casemapping.empty() && casemapping != CaseMapping) + // Ignore this value if CaseMapping is set to something the core doesn't provide (i.e., m_nationalchars). + if (!casemapping.empty() && casemapping != CaseMapping && (CaseMapping == "ascii" || CaseMapping == "rfc1459")) throw CoreException("You must restart to change the server casemapping"); } @@ -377,8 +394,8 @@ void ServerConfig::Fill() MaxConn = ConfValue("performance")->getUInt("somaxconn", SOMAXCONN); TimeSkipWarn = ConfValue("performance")->getDuration("timeskipwarn", 2, 0, 30); XLineMessage = options->getString("xlinemessage", options->getString("moronbanner", "You're banned!")); - ServerDesc = server->getString("description", "Configure Me"); - Network = server->getString("network", "Network"); + ServerDesc = server->getString("description", "Configure Me", 1); + Network = server->getString("network", "Network", 1); NetBufferSize = ConfValue("performance")->getInt("netbuffersize", 10240, 1024, 65534); CustomVersion = security->getString("customversion"); HideBans = security->getBool("hidebans"); @@ -420,7 +437,7 @@ void ServerConfig::Fill() ReadXLine(this, "badhost", "host", ServerInstance->XLines->GetFactory("K")); ReadXLine(this, "exception", "host", ServerInstance->XLines->GetFactory("E")); - const std::string restrictbannedusers = options->getString("restrictbannedusers", "yes"); + const std::string restrictbannedusers = options->getString("restrictbannedusers", "yes", 1); if (stdalgo::string::equalsci(restrictbannedusers, "no")) RestrictBannedUsers = ServerConfig::BUT_NORMAL; else if (stdalgo::string::equalsci(restrictbannedusers, "silent")) @@ -509,18 +526,17 @@ void ServerConfig::Apply(ServerConfig* old, const std::string &useruid) ServerInstance->BindPorts(pl); if (pl.size()) { - errstr << "Not all your client ports could be bound." << std::endl - << "The following port(s) failed to bind:" << std::endl; - - int j = 1; - for (FailedPortList::iterator i = pl.begin(); i != pl.end(); i++, j++) + std::cout << "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) { - errstr << j << ".\tAddress: " << i->first.str() << "\tReason: " << strerror(i->second) << std::endl; + const FailedPort& fp = *iter; + errstr << " " << fp.sa.str() << ": " << strerror(fp.error) << std::endl + << " " << "Created from tag at " << fp.tag->getTagLocation() << std::endl; } } } - User* user = useruid.empty() ? NULL : ServerInstance->FindNick(useruid); + User* user = useruid.empty() ? NULL : ServerInstance->FindUUID(useruid); if (!valid) { @@ -704,7 +720,7 @@ void ConfigReaderThread::Finish() ServerInstance->Users.RehashCloneCounts(); ServerInstance->XLines->CheckELines(); ServerInstance->XLines->ApplyLines(); - User* user = ServerInstance->FindNick(TheUserUID); + User* user = ServerInstance->FindUUID(TheUserUID); ConfigStatus status(user); const ModuleManager::ModuleMap& mods = ServerInstance->Modules->GetModules();