X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fconfigreader.cpp;h=3f99a52e21791197ad55dbc0bc947ea56f1fb7cc;hb=5e854d57e3ef1b315e754a38c5f0a1287559cc7e;hp=20c360303ada9564896f7c11d0e8a8afb072967c;hpb=2fe61d7d9519056705f1eeb2842a2a0042010172;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/configreader.cpp b/src/configreader.cpp index 20c360303..3f99a52e2 100644 --- a/src/configreader.cpp +++ b/src/configreader.cpp @@ -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: value is greater than 31 or less than 0, set to 20."); + conf->GetInstance()->Logs->Log("CONFIG",DEFAULT,"WARNING: 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: 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: 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: value may be higher than the system-defined SOMAXCONN value!"); + conf->GetInstance()->Logs->Log("CONFIG",DEFAULT,"WARNING: value may be higher than the system-defined SOMAXCONN value!"); return true; } @@ -344,7 +344,8 @@ bool ValidateServerName(ServerConfig* conf, const char*, const char*, ValueItem std::string moo = std::string(data.GetString()).append("."); data.Set(moo.c_str()); } - return ValidateHostname(conf, "server", "name", data); + conf->ValidateHostname(data.GetString(), "server", "name"); + return true; } bool ValidateNetBufferSize(ServerConfig* conf, const char*, const char*, ValueItem &data) @@ -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," size out of range, setting to default of 128."); + conf->GetInstance()->Logs->Log("CONFIG",DEFAULT," size out of range, setting to default of 128."); data.Set(128); } return true; @@ -1332,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 @@ -1649,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; @@ -1661,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) { @@ -1883,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"); @@ -1914,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); @@ -1959,7 +1963,7 @@ bool ServerConfig::DirValid(const char* dirandfile) { #ifdef WINDOWS return true; -#endif +#else char work[1024]; char buffer[1024]; @@ -2010,6 +2014,7 @@ bool ServerConfig::DirValid(const char* dirandfile) { return false; } +#endif } std::string ServerConfig::GetFullProgDir()