]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/configreader.cpp
Check for windows drive letters on the start of paths and treat them the same as...
[user/henk/code/inspircd.git] / src / configreader.cpp
index 81ae1e6c0b1a83a795273859525303214df0395e..3f99a52e21791197ad55dbc0bc947ea56f1fb7cc 100644 (file)
@@ -36,7 +36,7 @@ bool DoneELine(ServerConfig* conf, const char* tag);
 ServerConfig::ServerConfig(InspIRCd* Instance) : ServerInstance(Instance)
 {
        this->ClearStack();
-       *ServerName = *Network = *ServerDesc = *AdminName = '\0';
+       *sid = *ServerName = *Network = *ServerDesc = *AdminName = '\0';
        *HideWhoisServer = *AdminEmail = *AdminNick = *diepass = *restartpass = *FixedQuit = *HideKillsServer = '\0';
        *DefaultModes = *CustomVersion = *motd = *rules = *PrefixQuit = *DieValue = *DNSServer = '\0';
        *UserStats = *ModPath = *MyExecutable = *DisabledCommands = *PID = *SuffixQuit = '\0';
@@ -252,7 +252,7 @@ bool ValidateMaxTargets(ServerConfig* conf, const char*, const char*, ValueItem
 {
        if ((data.GetInteger() < 0) || (data.GetInteger() > 31))
        {
-               conf->GetInstance()->Logs->Log("CONFIG",DEFAULT,"WARNING: <options:maxtargets> value is greater than 31 or less than 0, set to 20.");
+               conf->GetInstance()->Logs->Log("CONFIG",DEFAULT,"WARNING: <security:maxtargets> value is greater than 31 or less than 0, set to 20.");
                data.Set(20);
        }
        return true;
@@ -262,7 +262,7 @@ bool ValidateSoftLimit(ServerConfig* conf, const char*, const char*, ValueItem &
 {
        if ((data.GetInteger() < 1) || (data.GetInteger() > conf->GetInstance()->SE->GetMaxFds()))
        {
-               conf->GetInstance()->Logs->Log("CONFIG",DEFAULT,"WARNING: <options:softlimit> value is greater than %d or less than 0, set to %d.",conf->GetInstance()->SE->GetMaxFds(),conf->GetInstance()->SE->GetMaxFds());
+               conf->GetInstance()->Logs->Log("CONFIG",DEFAULT,"WARNING: <performance:softlimit> value is greater than %d or less than 0, set to %d.",conf->GetInstance()->SE->GetMaxFds(),conf->GetInstance()->SE->GetMaxFds());
                data.Set(conf->GetInstance()->SE->GetMaxFds());
        }
        return true;
@@ -271,7 +271,7 @@ bool ValidateSoftLimit(ServerConfig* conf, const char*, const char*, ValueItem &
 bool ValidateMaxConn(ServerConfig* conf, const char*, const char*, ValueItem &data)
 {
        if (data.GetInteger() > SOMAXCONN)
-               conf->GetInstance()->Logs->Log("CONFIG",DEFAULT,"WARNING: <options:somaxconn> value may be higher than the system-defined SOMAXCONN value!");
+               conf->GetInstance()->Logs->Log("CONFIG",DEFAULT,"WARNING: <performance:somaxconn> value may be higher than the system-defined SOMAXCONN value!");
        return true;
 }
 
@@ -344,6 +344,7 @@ bool ValidateServerName(ServerConfig* conf, const char*, const char*, ValueItem
                std::string moo = std::string(data.GetString()).append(".");
                data.Set(moo.c_str());
        }
+       conf->ValidateHostname(data.GetString(), "server", "name");
        return true;
 }
 
@@ -361,7 +362,7 @@ bool ValidateMaxWho(ServerConfig* conf, const char*, const char*, ValueItem &dat
 {
        if ((data.GetInteger() > 65535) || (data.GetInteger() < 1))
        {
-               conf->GetInstance()->Logs->Log("CONFIG",DEFAULT,"<options:maxwhoresults> size out of range, setting to default of 128.");
+               conf->GetInstance()->Logs->Log("CONFIG",DEFAULT,"<performance:maxwho> size out of range, setting to default of 128.");
                data.Set(128);
        }
        return true;
@@ -762,11 +763,25 @@ void ServerConfig::Read(bool bail, User* user)
        static const char* Once[] = { "server", "admin", "files", "power", "options", NULL };
 
        Deprecated ChangedConfig[] = {
-               {"options",     "hidelinks",    "has been moved to <security:hidelinks> as of 1.2a3"},
-               {"options",     "hidewhois",    "has been moved to <security:hidewhois> as of 1.2a3"},
-               {"options",     "nouserdns",    "has been moved to <performance:nouserdns> as of 1.2a3"},
-               {"options",     "maxwho",       "has been moved to <performance:maxwho> as of 1.2a3"},
-               {NULL,          NULL,           NULL}
+               {"options",     "hidelinks",            "has been moved to <security:hidelinks> as of 1.2a3"},
+               {"options",     "hidewhois",            "has been moved to <security:hidewhois> as of 1.2a3"},
+               {"options",     "userstats",            "has been moved to <security:userstats> as of 1.2a3"},
+               {"options",     "customversion",        "has been moved to <security:customversion> as of 1.2a3"},
+               {"options",     "hidesplits",           "has been moved to <security:hidesplits> as of 1.2a3"},
+               {"options",     "hidebans",             "has been moved to <security:hidebans> as of 1.2a3"},
+               {"options",     "hidekills",            "has been moved to <security:hidekills> as of 1.2a3"},
+               {"options",     "operspywhois",         "has been moved to <security:operspywhois> as of 1.2a3"},
+               {"options",     "announceinvites",      "has been moved to <security:announceinvites> as of 1.2a3"},
+               {"options",     "hidemodes",            "has been moved to <security:hidemodes> as of 1.2a3"},
+               {"options",     "maxtargets",           "has been moved to <security:maxtargets> as of 1.2a3"},
+               {"options",     "nouserdns",            "has been moved to <performance:nouserdns> as of 1.2a3"},
+               {"options",     "maxwho",               "has been moved to <performance:maxwho> as of 1.2a3"},
+               {"options",     "softlimit",            "has been moved to <performance:softlimit> as of 1.2a3"},
+               {"options",     "somaxconn",            "has been moved to <performance:somaxconn> as of 1.2a3"},
+               {"options",     "netbuffersize",        "has been moved to <performance:netbuffersize> as of 1.2a3"},
+               {"options",     "maxwho",               "has been moved to <performance:maxwho> as of 1.2a3"},
+               {"options",     "loglevel",             "1.2 does not use the loglevel value. Please define <log> tags instead."},
+               {NULL,          NULL,                   NULL}
        };
 
        /* These tags can occur ONCE or not at all */
@@ -1318,9 +1333,8 @@ bool ServerConfig::LoadConf(ConfigDataHash &target, FILE* &conf, const char* fil
        include_stack.push_back(filename);
 
        /* Start reading characters... */
-       while (!feof(conf))
+       while ((ch = fgetc(conf)) != EOF)
        {
-               ch = fgetc(conf);
                /*
                 * Fix for moronic windows issue spotted by Adremelech.
                 * Some windows editors save text files as utf-16, which is
@@ -1635,6 +1649,11 @@ bool ServerConfig::DoPipe(ConfigDataHash &target, const std::string &file, std::
        return ret;
 }
 
+bool ServerConfig::StartsWithWindowsDriveLetter(const std::string &path)
+{
+       return (path.length() > 2 && isalpha(path[0]) && path[1] == ':');
+}
+
 bool ServerConfig::DoInclude(ConfigDataHash &target, const std::string &file, std::ostringstream &errorstream)
 {
        std::string confpath;
@@ -1647,7 +1666,7 @@ bool ServerConfig::DoInclude(ConfigDataHash &target, const std::string &file, st
        std::replace(newfile.begin(),newfile.end(),'\\','/');
        std::replace(confpath.begin(),confpath.end(),'\\','/');
 
-       if ((newfile[0] != '/') && (newfile.find("://") == std::string::npos))
+       if ((newfile[0] != '/') && (!StartsWithWindowsDriveLetter(newfile)))
        {
                if((pos = confpath.rfind("/")) != std::string::npos)
                {
@@ -1869,17 +1888,19 @@ bool ServerConfig::ReadFile(file_cache &F, const char* fname)
 
        F.clear();
 
-       if ((*fname != '/') && (*fname != '\\'))
+       if ((*fname != '/') && (*fname != '\\') && (!StartsWithWindowsDriveLetter(fname)))
        {
                std::string::size_type pos;
                std::string confpath = ServerInstance->ConfigFileName;
                std::string newfile = fname;
 
-               if ((pos = confpath.rfind("/")) != std::string::npos)
+               if (((pos = confpath.rfind("/"))) != std::string::npos)
                        newfile = confpath.substr(0, pos) + std::string("/") + fname;
-               else if ((pos = confpath.rfind("\\")) != std::string::npos)
+               else if (((pos = confpath.rfind("\\"))) != std::string::npos)
                        newfile = confpath.substr(0, pos) + std::string("\\") + fname;
 
+               ServerInstance->Logs->Log("config", DEBUG, "Filename: %s", newfile.c_str());
+
                if (!FileExists(newfile.c_str()))
                        return false;
                file =  fopen(newfile.c_str(), "r");
@@ -1900,10 +1921,7 @@ bool ServerConfig::ReadFile(file_cache &F, const char* fname)
                        else
                                *linebuf = 0;
 
-                       if (!feof(file))
-                       {
-                               F.push_back(*linebuf ? linebuf : " ");
-                       }
+                       F.push_back(*linebuf ? linebuf : " ");
                }
 
                fclose(file);
@@ -1945,7 +1963,7 @@ bool ServerConfig::DirValid(const char* dirandfile)
 {
 #ifdef WINDOWS
        return true;
-#endif
+#else
 
        char work[1024];
        char buffer[1024];
@@ -1996,6 +2014,7 @@ bool ServerConfig::DirValid(const char* dirandfile)
        {
                return false;
        }
+#endif
 }
 
 std::string ServerConfig::GetFullProgDir()