X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fconfigreader.cpp;h=31bbfa9542441c7be1170fb39fc1b9cd8e8753b4;hb=20fa9e1038ee3d5c2d0c89bf7e8e6dcda0644aa6;hp=00880cfff80d88babd47c69d635f644a7d179704;hpb=6daf442c77b411517ff656e543f5ecec02384ce8;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/configreader.cpp b/src/configreader.cpp index 00880cfff..31bbfa954 100644 --- a/src/configreader.cpp +++ b/src/configreader.cpp @@ -74,19 +74,29 @@ ServerConfig::~ServerConfig() static void ReadXLine(ServerConfig* conf, const std::string& tag, const std::string& key, XLineFactory* make) { + insp::flat_set configlines; + ConfigTagList tags = conf->ConfTags(tag); for(ConfigIter i = tags.first; i != tags.second; ++i) { ConfigTag* ctag = i->second; - std::string mask; - if (!ctag->readString(key, mask)) - throw CoreException("<"+tag+":"+key+"> missing at " + ctag->getTagLocation()); - std::string reason = ctag->getString("reason", ""); - XLine* xl = make->Generate(ServerInstance->Time(), 0, "", reason, mask); + + const std::string mask = ctag->getString(key); + if (mask.empty()) + throw CoreException("<" + tag + ":" + key + "> missing at " + ctag->getTagLocation()); + + const std::string reason = ctag->getString("reason"); + if (reason.empty()) + throw CoreException("<" + tag + ":reason> missing at " + ctag->getTagLocation()); + + XLine* xl = make->Generate(ServerInstance->Time(), 0, ServerInstance->Config->ServerName, 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 LocalIndex; @@ -358,7 +368,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"); } @@ -405,7 +416,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")); @@ -500,18 +510,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) { @@ -695,7 +704,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();