]> granicus.if.org Git - icinga2/commitdiff
compat: Escape new-lines in commands.
authorGunnar Beutner <gunnar.beutner@netways.de>
Tue, 2 Jul 2013 07:16:06 +0000 (09:16 +0200)
committerGunnar Beutner <gunnar.beutner@netways.de>
Tue, 2 Jul 2013 07:16:06 +0000 (09:16 +0200)
components/compat/compatcomponent.cpp
components/compat/compatcomponent.h

index ba108d589073966f6adfc5ecc092b05b38d03af7..6cf8bb04423fc264a3ebbd466bb655a0ddf711a2 100644 (file)
@@ -266,10 +266,10 @@ void CompatComponent::DumpCommand(std::ostream& fp, const Command::Ptr& command)
                String arg;
                BOOST_FOREACH(arg, args) {
                        // This is obviously incorrect for non-trivial cases.
-                       fp << " \"" << arg << "\"";
+                       fp << " \"" << EscapeString(arg) << "\"";
                }
        } else if (!commandLine.IsEmpty()) {
-               fp << Convert::ToString(commandLine);
+               fp << EscapeString(Convert::ToString(commandLine));
        } else {
                fp << "<internal>";
        }
@@ -391,6 +391,13 @@ void CompatComponent::DumpHostObject(std::ostream& fp, const Host::Ptr& host)
           << "\n";
 }
 
+String CompatComponent::EscapeString(const String& str)
+{
+       String result = str;
+       boost::algorithm::replace_all(result, "\n", "\\n");
+       return result;
+}
+
 void CompatComponent::DumpServiceStatusAttrs(std::ostream& fp, const Service::Ptr& service, CompatObjectType type)
 {
        ASSERT(service->OwnsLock());
@@ -428,7 +435,7 @@ void CompatComponent::DumpServiceStatusAttrs(std::ostream& fp, const Service::Pt
 
                if (line_end > 0 && line_end != String::NPos) {
                        long_output = raw_output.SubStr(line_end+1, raw_output.GetLength());
-                       boost::algorithm::replace_all(long_output, "\n", "\\n");
+                       long_output = EscapeString(long_output);
                }
 
                boost::algorithm::replace_all(output, "\n", "\\n");
index 39afaa4c640bcad69edb1a809eed2441e9ce7e5e..e36ec079b850ea469d502ca002a81f2c9cdbee89 100644 (file)
@@ -112,6 +112,8 @@ private:
        void DumpCustomAttributes(std::ostream& fp, const DynamicObject::Ptr& object);
 
        void StatusTimerHandler(void);
+
+       static String EscapeString(const String& str);
 };
 
 }