]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/configreader.cpp
Temporary fix for HASHMAP_DEPRECATED on clang.
[user/henk/code/inspircd.git] / src / configreader.cpp
index 660df77d7025b2065525b6c1cc4627fd6d145cd8..866521b92033f59e4b86ac8fba466643bf9035d3 100644 (file)
@@ -28,6 +28,7 @@
 #include "exitcodes.h"
 #include "commands/cmd_whowas.h"
 #include "configparser.h"
+#include <iostream>
 #ifdef _WIN32
 #include <Iphlpapi.h>
 #pragma comment(lib, "Iphlpapi.lib")
@@ -388,7 +389,7 @@ void ServerConfig::CrossCheckConnectBlocks(ServerConfig* current)
                                throw CoreException("Two connect classes with name \"" + name + "\" defined!");
                        names[name] = i;
 
-                       ConnectClass* me = parent ? 
+                       ConnectClass* me = parent ?
                                new ConnectClass(tag, type, mask, *parent) :
                                new ConnectClass(tag, type, mask);
 
@@ -470,7 +471,6 @@ static const Deprecated ChangedConfig[] = {
        {"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"},
-       
 };
 
 void ServerConfig::Fill()
@@ -609,7 +609,9 @@ void ServerConfig::Fill()
        std::string modes = ConfValue("disabled")->getString("usermodes");
        for (std::string::const_iterator p = modes.begin(); p != modes.end(); ++p)
        {
-               if (*p < 'A' || *p > ('A' + 64)) throw CoreException("Invalid usermode " + std::string(1, *p) + " was found.");
+               // Complain when the character is not a-z or A-Z
+               if ((*p < 'A') || (*p > 'z') || ((*p < 'a') && (*p > 'Z')))
+                       throw CoreException("Invalid usermode " + std::string(1, *p) + " was found.");
                DisabledUModes[*p - 'A'] = 1;
        }
 
@@ -617,7 +619,8 @@ void ServerConfig::Fill()
        modes = ConfValue("disabled")->getString("chanmodes");
        for (std::string::const_iterator p = modes.begin(); p != modes.end(); ++p)
        {
-               if (*p < 'A' || *p > ('A' + 64)) throw CoreException("Invalid chanmode " + std::string(1, *p) + " was found.");
+               if ((*p < 'A') || (*p > 'z') || ((*p < 'a') && (*p > 'Z')))
+                       throw CoreException("Invalid chanmode " + std::string(1, *p) + " was found.");
                DisabledCModes[*p - 'A'] = 1;
        }
 
@@ -750,7 +753,7 @@ void ServerConfig::Apply(ServerConfig* old, const std::string &useruid)
                        continue;
                // On startup, print out to console (still attached at this point)
                if (!old)
-                       printf("%s\n", line.c_str());
+                       std::cout << line << std::endl;
                // If a user is rehashing, tell them directly
                if (user)
                        user->SendText(":%s NOTICE %s :*** %s", ServerInstance->Config->ServerName.c_str(), user->nick.c_str(), line.c_str());
@@ -769,14 +772,13 @@ void ServerConfig::Apply(ServerConfig* old, const std::string &useruid)
                if(!tag->getBool("allowmotdcolors"))
                      continue;
 
-               ConfigFileCache::iterator motdfile = this->Files.find(tag->getString("motd", "motd"));
-               ConfigFileCache::iterator rulesfile = this->Files.find(tag->getString("rules", "rules"));
+               ConfigFileCache::iterator file = this->Files.find(tag->getString("motd", "motd"));
+               if (file != this->Files.end())
+                     InspIRCd::ProcessColors(file->second);
 
-               if(motdfile != this->Files.end())
-                     this->ProcessColors(motdfile);
-
-               if(rulesfile != this->Files.end())
-                     this->ProcessColors(rulesfile);
+               file = this->Files.find(tag->getString("rules", "rules"));
+               if (file != this->Files.end())
+                     InspIRCd::ProcessColors(file->second);
        }
 
        /* No old configuration -> initial boot, nothing more to do here */
@@ -897,63 +899,6 @@ ConfigTagList ServerConfig::ConfTags(const std::string& tag)
        return config_data.equal_range(tag);
 }
 
-/*
- * Replace all color codes from the special[] array to actual
- * color code chars using C++ style escape sequences. You
- * can append other chars to replace if you like -- Justasic
- */
-void ServerConfig::ProcessColors(ConfigFileCache::iterator &file)
-{
-       static struct special_chars
-       {
-               std::string character;
-               std::string replace;
-               special_chars(const std::string &c, const std::string &r) : character(c), replace(r) { }
-       }
-
-       special[] = {
-               special_chars("\\002", "\002"),  // Bold
-               special_chars("\\037", "\037"),  // underline
-               special_chars("\\003", "\003"),  // Color
-               special_chars("\\017", "\017"), // Stop colors
-               special_chars("\\u", "\037"),    // Alias for underline
-               special_chars("\\b", "\002"),    // Alias for Bold
-               special_chars("\\x", "\017"),    // Alias for stop
-               special_chars("\\c", "\003"),    // Alias for color
-               special_chars("", "")
-       };
-
-       for(file_cache::iterator it = file->second.begin(), it_end = file->second.end(); it != it_end; it++)
-       {
-               std::string ret = *it;
-               for(int i = 0; special[i].character.empty() == false; ++i)
-               {
-                       std::string::size_type pos = ret.find(special[i].character);
-                       if(pos == std::string::npos) // Couldn't find the character, skip this line
-                               continue;
-                       
-                       if((pos > 0) && (ret[pos-1] == '\\') && (ret[pos] == '\\'))
-                               continue; // Skip double slashes.
-
-                       // Replace all our characters in the array
-                       while(pos != std::string::npos)
-                       {
-                               ret = ret.substr(0, pos) + special[i].replace + ret.substr(pos + special[i].character.size());
-                               pos = ret.find(special[i].character, pos + special[i].replace.size());
-                       }
-               }
-
-               // Replace double slashes with a single slash before we return
-               std::string::size_type pos = ret.find("\\\\");
-               while(pos != std::string::npos)
-               {
-                       ret = ret.substr(0, pos) + "\\" + ret.substr(pos + 2);
-                       pos = ret.find("\\\\", pos + 1);
-               }
-               *it = ret;
-       }
-}
-
 bool ServerConfig::FileExists(const char* file)
 {
        struct stat sb;