summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/configparser.h3
-rw-r--r--src/configparser.cpp34
2 files changed, 6 insertions, 31 deletions
diff --git a/include/configparser.h b/include/configparser.h
index 8292fdda5..f46d143ae 100644
--- a/include/configparser.h
+++ b/include/configparser.h
@@ -53,8 +53,7 @@ struct ParseStack
vars["quot"] = "\"";
vars["newline"] = vars["nl"] = "\n";
}
- bool ParseFile(const std::string& name, int flags, const std::string& mandatory_tag = "");
- bool ParseExec(const std::string& name, int flags, const std::string& mandatory_tag = "");
+ bool ParseFile(const std::string& name, int flags, const std::string& mandatory_tag = std::string(), bool isexec = false);
void DoInclude(ConfigTag* includeTag, int flags);
void DoReadFile(const std::string& key, const std::string& file, int flags, bool exec);
};
diff --git a/src/configparser.cpp b/src/configparser.cpp
index 2f3fbb5b4..51b248133 100644
--- a/src/configparser.cpp
+++ b/src/configparser.cpp
@@ -331,7 +331,7 @@ void ParseStack::DoInclude(ConfigTag* tag, int flags)
flags |= FLAG_NO_INC;
if (tag->getBool("noexec", true))
flags |= FLAG_NO_EXEC;
- if (!ParseExec(name, flags, mandatorytag))
+ if (!ParseFile(name, flags, mandatorytag, true))
throw CoreException("Included");
}
}
@@ -364,20 +364,20 @@ void ParseStack::DoReadFile(const std::string& key, const std::string& name, int
}
}
-bool ParseStack::ParseFile(const std::string& path, int flags, const std::string& mandatory_tag)
+bool ParseStack::ParseFile(const std::string& path, int flags, const std::string& mandatory_tag, bool isexec)
{
- ServerInstance->Logs->Log("CONFIG", LOG_DEBUG, "Reading file %s", path.c_str());
+ ServerInstance->Logs->Log("CONFIG", LOG_DEBUG, "Reading (isexec=%d) %s", isexec, path.c_str());
for (unsigned int t = 0; t < reading.size(); t++)
{
if (path == reading[t])
{
- throw CoreException("File " + path + " is included recursively (looped inclusion)");
+ throw CoreException((isexec ? "Executable " : "File ") + path + " is included recursively (looped inclusion)");
}
}
/* It's not already included, add it to the list of files we've loaded */
- FileWrapper file(fopen(path.c_str(), "r"));
+ FileWrapper file((isexec ? popen(path.c_str(), "r") : fopen(path.c_str(), "r")), isexec);
if (!file)
throw CoreException("Could not read \"" + path + "\" for include");
@@ -388,30 +388,6 @@ bool ParseStack::ParseFile(const std::string& path, int flags, const std::string
return ok;
}
-bool ParseStack::ParseExec(const std::string& name, int flags, const std::string& mandatory_tag)
-{
- ServerInstance->Logs->Log("CONFIG", LOG_DEBUG, "Reading executable %s", name.c_str());
- for (unsigned int t = 0; t < reading.size(); t++)
- {
- if (std::string(name) == reading[t])
- {
- throw CoreException("Executable " + name + " is included recursively (looped inclusion)");
- }
- }
-
- /* It's not already included, add it to the list of files we've loaded */
-
- FileWrapper file(popen(name.c_str(), "r"), true);
- if (!file)
- throw CoreException("Could not open executable \"" + name + "\" for include");
-
- reading.push_back(name);
- Parser p(*this, flags, file, name, mandatory_tag);
- bool ok = p.outer_parse();
- reading.pop_back();
- return ok;
-}
-
bool ConfigTag::readString(const std::string& key, std::string& value, bool allow_lf)
{
if (!this)