]> granicus.if.org Git - icinga2/commitdiff
Fix: ConfigWriter::EmitScope incorrectly quotes dictionary keys
authorGunnar Beutner <gunnar.beutner@netways.de>
Wed, 22 Jun 2016 10:34:11 +0000 (12:34 +0200)
committerGunnar Beutner <gunnar.beutner@netways.de>
Wed, 22 Jun 2016 10:35:47 +0000 (12:35 +0200)
fixes #12016

lib/base/configwriter.cpp
lib/base/configwriter.hpp

index d0f8533e4aac7ecfe38cb16532987bee03c457ab..33be46e278f7a3a0a0e3ee88c182384f4737f56a 100644 (file)
@@ -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 << "{";
 
@@ -94,18 +95,21 @@ void ConfigWriter::EmitScope(std::ostream& fp, int indentLevel, const Dictionary
                BOOST_FOREACH(const Dictionary::Pair& kv, val) {
                        fp << "\n";
                        EmitIndent(fp, indentLevel);
-                       
-                       std::vector<String> tokens;
-                       boost::algorithm::split(tokens, kv.first, boost::is_any_of("."));
-                       
-                       EmitIdentifier(fp, tokens[0], true);
-                       
-                       for (std::vector<String>::size_type i = 1; i < tokens.size(); i++) {
-                               fp << "[";
-                               EmitString(fp, tokens[i]);
-                               fp << "]";
-                       }
-                       
+
+                       if (splitDot) {
+                               std::vector<String> tokens;
+                               boost::algorithm::split(tokens, kv.first, boost::is_any_of("."));
+
+                               EmitIdentifier(fp, tokens[0], true);
+
+                               for (std::vector<String>::size_type i = 1; i < tokens.size(); i++) {
+                                       fp << "[";
+                                       EmitString(fp, tokens[i]);
+                                       fp << "]";
+                               }
+                       } else
+                               EmitIdentifier(fp, kv.first, true);
+
                        fp << " = ";
                        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 << " ";
-       EmitScope(fp, 1, attrs, imports);
+       EmitScope(fp, 1, attrs, imports, true);
 }
 
 void ConfigWriter::EmitComment(std::ostream& fp, const String& text)
index f7d535667429c6192545e9060cd8a1defe3bc933..a32f286b1ab95738f75d9a3f234715c2530b8ea2 100644 (file)
@@ -60,7 +60,8 @@ public:
        static void EmitEmpty(std::ostream& fp);
        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 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 EmitRaw(std::ostream& fp, const String& val);
        static void EmitIndent(std::ostream& fp, int indentLevel);