]> granicus.if.org Git - icinga2/commitdiff
Remove temporary icinga2.debug file in case the config validation fails
authorGunnar Beutner <gunnar.beutner@netways.de>
Fri, 5 Aug 2016 07:09:20 +0000 (09:09 +0200)
committerGunnar Beutner <gunnar.beutner@netways.de>
Fri, 5 Aug 2016 07:15:17 +0000 (09:15 +0200)
fixes #12318

lib/cli/daemonutility.cpp
lib/config/configcompilercontext.cpp
lib/config/configcompilercontext.hpp

index a6fe4555fd3c7833605af31f9f85d8c363525b7a..4d45ce6f1fd196004409168c7af9f0bd8215fb5e 100644 (file)
@@ -162,14 +162,18 @@ bool DaemonUtility::LoadConfigFiles(const std::vector<std::string>& configs,
 {
        ActivationScope ascope;
 
-       if (!DaemonUtility::ValidateConfigFiles(configs, objectsFile))
+       if (!DaemonUtility::ValidateConfigFiles(configs, objectsFile)) {
+               ConfigCompilerContext::GetInstance()->CancelObjectsFile();
                return false;
+       }
 
        WorkQueue upq(25000, Application::GetConcurrency());
        bool result = ConfigItem::CommitItems(ascope.GetContext(), upq, newItems);
 
-       if (!result)
+       if (!result) {
+               ConfigCompilerContext::GetInstance()->CancelObjectsFile();
                return false;
+       }
 
        ConfigCompilerContext::GetInstance()->FinishObjectsFile();
        ScriptGlobal::WriteToFile(varsfile);
index 901e00d41a723a665dd469dd6ae9bac1943b699b..c006dcef13bf680ed4cf825249ad1604b021cd61 100644 (file)
@@ -58,6 +58,18 @@ void ConfigCompilerContext::WriteObject(const Dictionary::Ptr& object)
        }
 }
 
+void ConfigCompilerContext::CancelObjectsFile(void)
+{
+       m_ObjectsFP->Close();
+       m_ObjectsFP.reset();
+
+#ifdef _WIN32
+       _unlink(m_ObjectsTempFile.CStr());
+#else /* _WIN32 */
+       unlink(m_ObjectsTempFile.CStr());
+#endif /* _WIN32 */
+}
+
 void ConfigCompilerContext::FinishObjectsFile(void)
 {
        m_ObjectsFP->Close();
index cd4f2b006e7f6bc2905945bb754c3990cf780552..1e4721112d15639ee4cfd7719925a1027049854c 100644 (file)
@@ -36,6 +36,7 @@ class I2_CONFIG_API ConfigCompilerContext
 public:
        void OpenObjectsFile(const String& filename);
        void WriteObject(const Dictionary::Ptr& object);
+       void CancelObjectsFile(void);
        void FinishObjectsFile(void);
 
        static ConfigCompilerContext *GetInstance(void);