From 4c7e2994a7a93cc975df46f63e8506f466d9b99a Mon Sep 17 00:00:00 2001 From: Gunnar Beutner Date: Tue, 9 Aug 2016 10:59:08 +0200 Subject: [PATCH] Handle I/O errors while writing the Icinga state file more gracefully fixes #12334 --- lib/base/configobject.cpp | 1 + lib/icinga/icingaapplication.cpp | 1 + 2 files changed, 2 insertions(+) diff --git a/lib/base/configobject.cpp b/lib/base/configobject.cpp index 7db364fba..26cefeca1 100644 --- a/lib/base/configobject.cpp +++ b/lib/base/configobject.cpp @@ -487,6 +487,7 @@ void ConfigObject::DumpObjects(const String& filename, int attributeTypes) std::fstream fp; String tempFilename = Utility::CreateTempFile(filename + ".XXXXXX", 0600, fp); + fp.exceptions(std::ofstream::failbit | std::ofstream::badbit); if (!fp) BOOST_THROW_EXCEPTION(std::runtime_error("Could not open '" + tempFilename + "' file")); diff --git a/lib/icinga/icingaapplication.cpp b/lib/icinga/icingaapplication.cpp index 46a403493..1b7e99c6d 100644 --- a/lib/icinga/icingaapplication.cpp +++ b/lib/icinga/icingaapplication.cpp @@ -176,6 +176,7 @@ void IcingaApplication::DumpModifiedAttributes(void) std::fstream fp; String tempFilename = Utility::CreateTempFile(path + ".XXXXXX", 0644, fp); + fp.exceptions(std::ofstream::failbit | std::ofstream::badbit); ConfigObject::Ptr previousObject; ConfigObject::DumpModifiedAttributes(boost::bind(&PersistModAttrHelper, boost::ref(fp), boost::ref(previousObject), _1, _2, _3)); -- 2.50.1