diff options
-rw-r--r-- | include/configreader.h | 4 | ||||
-rw-r--r-- | src/configreader.cpp | 26 | ||||
-rw-r--r-- | src/inspircd.cpp | 6 |
3 files changed, 30 insertions, 6 deletions
diff --git a/include/configreader.h b/include/configreader.h index a903bd5d6..eed74f10a 100644 --- a/include/configreader.h +++ b/include/configreader.h @@ -242,9 +242,9 @@ class CoreExport ServerConfig : public Extensible */ bool CheckOnce(char* tag); + public: + std::map<std::string, std::istream*> IncludedFiles; - - public: size_t TotalDownloaded; size_t FileErrors; diff --git a/src/configreader.cpp b/src/configreader.cpp index e9301d70a..13ef5ddad 100644 --- a/src/configreader.cpp +++ b/src/configreader.cpp @@ -1268,7 +1268,7 @@ void ServerConfig::StartDownloads() ServerInstance->Log(DEBUG,"Begin download for %s", file.c_str()); if ((file[0] == '/') || (file.substr(0, 7) == "file://")) { - ServerInstance->Log(DEBUG,"Core-handled schema for %s %s", file.c_str(), file.substr(0,7).c_str()); + ServerInstance->Log(DEBUG,"Core-handled schema for %s", file.c_str()); /* For file:// schema files, we use std::ifstream which is a derivative of std::istream. * For all other file schemas, we use a std::stringstream. */ @@ -1282,7 +1282,11 @@ void ServerConfig::StartDownloads() x->second = conf; } else + { + delete x->second; + x->second = NULL; FileErrors++; + } TotalDownloaded++; } @@ -1290,6 +1294,12 @@ void ServerConfig::StartDownloads() { /* Modules handle these */ ServerInstance->Log(DEBUG,"Module-handled schema for %s", x->first.c_str()); + + /* For now, error it */ + FileErrors++; + TotalDownloaded++; + delete x->second; + x->second = NULL; } } } @@ -1321,8 +1331,8 @@ bool ServerConfig::LoadConf(ConfigDataHash &target, const char* filename, std::o } else { - /* Check if the file open failed first */ - if (IncludedFiles.find(filename) == IncludedFiles.end()) + std::map<std::string, std::istream*>::iterator x = IncludedFiles.find(filename); + if (x == IncludedFiles.end()) { if (pass == 0) { @@ -1340,7 +1350,15 @@ bool ServerConfig::LoadConf(ConfigDataHash &target, const char* filename, std::o } } else - conf = IncludedFiles.find(filename)->second; + { + if (x->second) + conf = IncludedFiles.find(filename)->second; + else + { + errorstream << "File " << filename << " could not be opened." << std::endl; + return false; + } + } } /* Start reading characters... */ diff --git a/src/inspircd.cpp b/src/inspircd.cpp index 87af7b06e..e8a7d85dc 100644 --- a/src/inspircd.cpp +++ b/src/inspircd.cpp @@ -515,6 +515,12 @@ InspIRCd::InspIRCd(int argc, char** argv) /* One or more file download/access errors, do not * proceed to second pass */ + for (std::map<std::string, std::istream*>::iterator x = Config->IncludedFiles.begin(); x != Config->IncludedFiles.end(); ++x) + { + if (!x->second) + printf("ERROR: Failed to access the file: %s.\n", x->first.c_str()); + } + printf("Initialisation of configuration failed.\n"); Exit(EXIT_STATUS_CONFIG); } |