diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/commands/cmd_stats.cpp | 9 | ||||
-rw-r--r-- | src/configreader.cpp | 13 | ||||
-rw-r--r-- | src/modules/m_spanningtree/override_stats.cpp | 11 | ||||
-rw-r--r-- | src/modules/m_spanningtree/treeserver.cpp | 21 |
4 files changed, 28 insertions, 26 deletions
diff --git a/src/commands/cmd_stats.cpp b/src/commands/cmd_stats.cpp index 5aa608f14..411e9d5e1 100644 --- a/src/commands/cmd_stats.cpp +++ b/src/commands/cmd_stats.cpp @@ -149,15 +149,6 @@ void CommandStats::DoStats(char statschar, User* user, string_list &results) } break; - case 'U': - { - for(std::map<irc::string, bool>::iterator i = ServerInstance->Config->ulines.begin(); i != ServerInstance->Config->ulines.end(); ++i) - { - results.push_back(sn+" 248 "+user->nick+" U "+std::string(i->first.c_str())); - } - } - break; - case 'P': { unsigned int idx = 0; diff --git a/src/configreader.cpp b/src/configreader.cpp index b1cc746df..2320a44b1 100644 --- a/src/configreader.cpp +++ b/src/configreader.cpp @@ -444,19 +444,6 @@ void ServerConfig::Fill() else ServerInstance->SE->Close(socktest); } - ConfigTagList tags = ConfTags("uline"); - for(ConfigIter i = tags.first; i != tags.second; ++i) - { - ConfigTag* tag = i->second; - std::string server; - if (!tag->readString("server", server)) - throw CoreException("<uline> tag missing server at " + tag->getTagLocation()); - - if (ServerName == server) - throw CoreException("Servers should not uline themselves (at " + tag->getTagLocation() + ")"); - - ulines[assign(server)] = tag->getBool("silent"); - } ReadXLine(this, "badip", "ipmask", ServerInstance->XLines->GetFactory("Z")); ReadXLine(this, "badnick", "nick", ServerInstance->XLines->GetFactory("Q")); diff --git a/src/modules/m_spanningtree/override_stats.cpp b/src/modules/m_spanningtree/override_stats.cpp index 9762ecf4e..bdfc6ef43 100644 --- a/src/modules/m_spanningtree/override_stats.cpp +++ b/src/modules/m_spanningtree/override_stats.cpp @@ -37,6 +37,17 @@ ModResult ModuleSpanningTree::OnStats(char statschar, User* user, string_list &r } return MOD_RES_DENY; } + else if (statschar == 'U') + { + ConfigTagList tags = ServerInstance->Config->ConfTags("uline"); + for (ConfigIter i = tags.first; i != tags.second; ++i) + { + std::string name = i->second->getString("server"); + if (!name.empty()) + results.push_back(ServerInstance->Config->ServerName+" 248 "+user->nick+" U "+name); + } + return MOD_RES_DENY; + } return MOD_RES_PASSTHRU; } diff --git a/src/modules/m_spanningtree/treeserver.cpp b/src/modules/m_spanningtree/treeserver.cpp index ecde17261..b51c21db6 100644 --- a/src/modules/m_spanningtree/treeserver.cpp +++ b/src/modules/m_spanningtree/treeserver.cpp @@ -160,11 +160,24 @@ int TreeServer::QuitUsers(const std::string &reason) void TreeServer::CheckULine() { uline = silentuline = false; - std::map<irc::string, bool>::iterator it = ServerInstance->Config->ulines.find(GetName().c_str()); - if (it != ServerInstance->Config->ulines.end()) + + ConfigTagList tags = ServerInstance->Config->ConfTags("uline"); + for (ConfigIter i = tags.first; i != tags.second; ++i) { - uline = true; - silentuline = it->second; + ConfigTag* tag = i->second; + std::string server = tag->getString("server"); + if (!strcasecmp(server.c_str(), GetName().c_str())) + { + if (this->IsRoot()) + { + ServerInstance->Logs->Log(MODNAME, LOG_DEFAULT, "Servers should not uline themselves (at " + tag->getTagLocation() + ")"); + return; + } + + uline = true; + silentuline = tag->getBool("silent"); + break; + } } } |