mirror of
https://github.com/Icinga/icinga2.git
synced 2025-07-25 22:54:57 +02:00
Fix: ConfigWriter::EmitScope incorrectly quotes dictionary keys
fixes #12016
This commit is contained in:
parent
067cb8d283
commit
428850a6b3
@ -74,7 +74,8 @@ void ConfigWriter::EmitArrayItems(std::ostream& fp, int indentLevel, const Array
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ConfigWriter::EmitScope(std::ostream& fp, int indentLevel, const Dictionary::Ptr& val, const Array::Ptr& imports)
|
void ConfigWriter::EmitScope(std::ostream& fp, int indentLevel, const Dictionary::Ptr& val,
|
||||||
|
const Array::Ptr& imports, bool splitDot)
|
||||||
{
|
{
|
||||||
fp << "{";
|
fp << "{";
|
||||||
|
|
||||||
@ -94,18 +95,21 @@ void ConfigWriter::EmitScope(std::ostream& fp, int indentLevel, const Dictionary
|
|||||||
BOOST_FOREACH(const Dictionary::Pair& kv, val) {
|
BOOST_FOREACH(const Dictionary::Pair& kv, val) {
|
||||||
fp << "\n";
|
fp << "\n";
|
||||||
EmitIndent(fp, indentLevel);
|
EmitIndent(fp, indentLevel);
|
||||||
|
|
||||||
std::vector<String> tokens;
|
if (splitDot) {
|
||||||
boost::algorithm::split(tokens, kv.first, boost::is_any_of("."));
|
std::vector<String> tokens;
|
||||||
|
boost::algorithm::split(tokens, kv.first, boost::is_any_of("."));
|
||||||
EmitIdentifier(fp, tokens[0], true);
|
|
||||||
|
EmitIdentifier(fp, tokens[0], true);
|
||||||
for (std::vector<String>::size_type i = 1; i < tokens.size(); i++) {
|
|
||||||
fp << "[";
|
for (std::vector<String>::size_type i = 1; i < tokens.size(); i++) {
|
||||||
EmitString(fp, tokens[i]);
|
fp << "[";
|
||||||
fp << "]";
|
EmitString(fp, tokens[i]);
|
||||||
}
|
fp << "]";
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
EmitIdentifier(fp, kv.first, true);
|
||||||
|
|
||||||
fp << " = ";
|
fp << " = ";
|
||||||
EmitValue(fp, indentLevel + 1, kv.second);
|
EmitValue(fp, indentLevel + 1, kv.second);
|
||||||
}
|
}
|
||||||
@ -189,7 +193,7 @@ void ConfigWriter::EmitConfigItem(std::ostream& fp, const String& type, const St
|
|||||||
fp << " ignore_on_error";
|
fp << " ignore_on_error";
|
||||||
|
|
||||||
fp << " ";
|
fp << " ";
|
||||||
EmitScope(fp, 1, attrs, imports);
|
EmitScope(fp, 1, attrs, imports, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ConfigWriter::EmitComment(std::ostream& fp, const String& text)
|
void ConfigWriter::EmitComment(std::ostream& fp, const String& text)
|
||||||
|
@ -60,7 +60,8 @@ public:
|
|||||||
static void EmitEmpty(std::ostream& fp);
|
static void EmitEmpty(std::ostream& fp);
|
||||||
static void EmitArray(std::ostream& fp, int indentLevel, const Array::Ptr& val);
|
static void EmitArray(std::ostream& fp, int indentLevel, const Array::Ptr& val);
|
||||||
static void EmitArrayItems(std::ostream& fp, int indentLevel, const Array::Ptr& val);
|
static void EmitArrayItems(std::ostream& fp, int indentLevel, const Array::Ptr& val);
|
||||||
static void EmitScope(std::ostream& fp, int indentLevel, const Dictionary::Ptr& val, const Array::Ptr& imports = Array::Ptr());
|
static void EmitScope(std::ostream& fp, int indentLevel, const Dictionary::Ptr& val,
|
||||||
|
const Array::Ptr& imports = Array::Ptr(), bool splitDot = false);
|
||||||
static void EmitValue(std::ostream& fp, int indentLevel, const Value& val);
|
static void EmitValue(std::ostream& fp, int indentLevel, const Value& val);
|
||||||
static void EmitRaw(std::ostream& fp, const String& val);
|
static void EmitRaw(std::ostream& fp, const String& val);
|
||||||
static void EmitIndent(std::ostream& fp, int indentLevel);
|
static void EmitIndent(std::ostream& fp, int indentLevel);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user