From a79ea88fffc39a489368a1e0687479efd2fbdaa2 Mon Sep 17 00:00:00 2001 From: Michael Friedrich Date: Wed, 24 Feb 2016 11:00:44 +0100 Subject: [PATCH 1/3] Fix permissions for temporary files fixes #11212 fixes #11211 --- lib/base/configobject.cpp | 2 +- lib/base/scriptglobal.cpp | 2 +- lib/base/utility.cpp | 21 +++++++++++++++------ lib/base/utility.hpp | 4 ++-- lib/cli/apisetuputility.cpp | 2 +- lib/cli/nodesetupcommand.cpp | 4 ++-- lib/cli/nodeupdateconfigcommand.cpp | 2 +- lib/cli/nodeutility.cpp | 12 ++++++------ lib/cli/nodewizardcommand.cpp | 4 ++-- lib/cli/repositoryutility.cpp | 4 ++-- lib/compat/statusdatawriter.cpp | 4 ++-- lib/config/configcompilercontext.cpp | 2 +- lib/icinga/clusterevents.cpp | 2 +- lib/icinga/icingaapplication.cpp | 2 +- 14 files changed, 38 insertions(+), 29 deletions(-) diff --git a/lib/base/configobject.cpp b/lib/base/configobject.cpp index 214b78c2f..cfb099480 100644 --- a/lib/base/configobject.cpp +++ b/lib/base/configobject.cpp @@ -483,7 +483,7 @@ void ConfigObject::DumpObjects(const String& filename, int attributeTypes) << "Dumping program state to file '" << filename << "'"; std::fstream fp; - String tempFilename = Utility::CreateTempFile(filename + ".XXXXXX", fp); + String tempFilename = Utility::CreateTempFile(filename + ".XXXXXX", 0600, fp); if (!fp) BOOST_THROW_EXCEPTION(std::runtime_error("Could not open '" + tempFilename + "' file")); diff --git a/lib/base/scriptglobal.cpp b/lib/base/scriptglobal.cpp index a80484cb6..b5b599000 100644 --- a/lib/base/scriptglobal.cpp +++ b/lib/base/scriptglobal.cpp @@ -66,7 +66,7 @@ void ScriptGlobal::WriteToFile(const String& filename) << "Dumping variables to file '" << filename << "'"; std::fstream fp; - String tempFilename = Utility::CreateTempFile(filename + ".XXXXXX", fp); + String tempFilename = Utility::CreateTempFile(filename + ".XXXXXX", 0600, fp); if (!fp) BOOST_THROW_EXCEPTION(std::runtime_error("Could not open '" + tempFilename + "' file")); diff --git a/lib/base/utility.cpp b/lib/base/utility.cpp index 4a11b9c31..da21d7480 100644 --- a/lib/base/utility.cpp +++ b/lib/base/utility.cpp @@ -700,10 +700,10 @@ bool Utility::GlobRecursive(const String& path, const String& pattern, const boo } -void Utility::MkDir(const String& path, int flags) +void Utility::MkDir(const String& path, int mode) { #ifndef _WIN32 - if (mkdir(path.CStr(), flags) < 0 && errno != EEXIST) { + if (mkdir(path.CStr(), mode) < 0 && errno != EEXIST) { #else /*_ WIN32 */ if (mkdir(path.CStr()) < 0 && errno != EEXIST) { #endif /* _WIN32 */ @@ -1327,10 +1327,10 @@ Value Utility::LoadJsonFile(const String& path) return JsonDecode(json); } -void Utility::SaveJsonFile(const String& path, const Value& value) +void Utility::SaveJsonFile(const String& path, int mode, const Value& value) { std::fstream fp; - String tempFilename = Utility::CreateTempFile(path + ".XXXXXX", fp); + String tempFilename = Utility::CreateTempFile(path + ".XXXXXX", mode, fp); fp.exceptions(std::ofstream::failbit | std::ofstream::badbit); fp << JsonEncode(value); @@ -1706,7 +1706,7 @@ String Utility::ValidateUTF8(const String& input) return output; } -String Utility::CreateTempFile(const String& path, std::fstream& fp) +String Utility::CreateTempFile(const String& path, int mode, std::fstream& fp) { std::vector targetPath(path.Begin(), path.End()); targetPath.push_back('\0'); @@ -1734,7 +1734,16 @@ String Utility::CreateTempFile(const String& path, std::fstream& fp) close(fd); - return String(targetPath.begin(), targetPath.end() - 1); + String resultPath = String(targetPath.begin(), targetPath.end() - 1); + + if (chmod(resultPath.CStr(), mode) < 0) { + BOOST_THROW_EXCEPTION(posix_error() + << boost::errinfo_api_function("chmod") + << boost::errinfo_errno(errno) + << boost::errinfo_file_name(resultPath)); + } + + return resultPath; } #ifdef _WIN32 diff --git a/lib/base/utility.hpp b/lib/base/utility.hpp index b27ac7612..d244086f3 100644 --- a/lib/base/utility.hpp +++ b/lib/base/utility.hpp @@ -131,7 +131,7 @@ public: static void CopyFile(const String& source, const String& target); static Value LoadJsonFile(const String& path); - static void SaveJsonFile(const String& path, const Value& value); + static void SaveJsonFile(const String& path, int mode, const Value& value); static String GetPlatformKernel(void); static String GetPlatformKernelVersion(void); @@ -141,7 +141,7 @@ public: static String ValidateUTF8(const String& input); - static String CreateTempFile(const String& path, std::fstream& fp); + static String CreateTempFile(const String& path, int mode, std::fstream& fp); private: Utility(void); diff --git a/lib/cli/apisetuputility.cpp b/lib/cli/apisetuputility.cpp index abe7c38d6..56011ca57 100644 --- a/lib/cli/apisetuputility.cpp +++ b/lib/cli/apisetuputility.cpp @@ -171,7 +171,7 @@ bool ApiSetupUtility::SetupMasterApiUser(void) NodeUtility::CreateBackupFile(apiUsersPath); std::fstream fp; - String tempFilename = Utility::CreateTempFile(apiUsersPath + ".XXXXXX", fp); + String tempFilename = Utility::CreateTempFile(apiUsersPath + ".XXXXXX", 0640, fp); fp << "/**\n" << " * The APIUser objects are used for authentication against the API.\n" diff --git a/lib/cli/nodesetupcommand.cpp b/lib/cli/nodesetupcommand.cpp index a86d02293..0eb34b3b7 100644 --- a/lib/cli/nodesetupcommand.cpp +++ b/lib/cli/nodesetupcommand.cpp @@ -170,7 +170,7 @@ int NodeSetupCommand::SetupMaster(const boost::program_options::variables_map& v NodeUtility::CreateBackupFile(apipath); std::fstream fp; - String tempApiPath = Utility::CreateTempFile(apipath + ".XXXXXX", fp); + String tempApiPath = Utility::CreateTempFile(apipath + ".XXXXXX", 0640, fp); fp << "/**\n" << " * The API listener is used for distributed monitoring setups.\n" @@ -375,7 +375,7 @@ int NodeSetupCommand::SetupNode(const boost::program_options::variables_map& vm, NodeUtility::CreateBackupFile(apipath); std::fstream fp; - String tempApiPath = Utility::CreateTempFile(apipath + ".XXXXXX", fp); + String tempApiPath = Utility::CreateTempFile(apipath + ".XXXXXX", 0640, fp); fp << "/**\n" << " * The API listener is used for distributed monitoring setups.\n" diff --git a/lib/cli/nodeupdateconfigcommand.cpp b/lib/cli/nodeupdateconfigcommand.cpp index 8714f3b9b..4af4a5563 100644 --- a/lib/cli/nodeupdateconfigcommand.cpp +++ b/lib/cli/nodeupdateconfigcommand.cpp @@ -415,7 +415,7 @@ int NodeUpdateConfigCommand::Run(const boost::program_options::variables_map& vm /* store the new inventory for next run */ NodeUtility::CreateRepositoryPath(); - Utility::SaveJsonFile(inventory_path, inventory); + Utility::SaveJsonFile(inventory_path, 0600, inventory); std::cout << "Make sure to reload Icinga 2 for these changes to take effect." << std::endl; diff --git a/lib/cli/nodeutility.cpp b/lib/cli/nodeutility.cpp index 3d46c66ba..49741fe85 100644 --- a/lib/cli/nodeutility.cpp +++ b/lib/cli/nodeutility.cpp @@ -166,7 +166,7 @@ void NodeUtility::AddNode(const String& name) node->Set("repository", Empty); CreateRepositoryPath(); - Utility::SaveJsonFile(path, node); + Utility::SaveJsonFile(path, 0600, node); } void NodeUtility::AddNodeSettings(const String& name, const String& host, @@ -179,7 +179,7 @@ void NodeUtility::AddNodeSettings(const String& name, const String& host, settings->Set("log_duration", log_duration); CreateRepositoryPath(); - Utility::SaveJsonFile(GetNodeSettingsFile(name), settings); + Utility::SaveJsonFile(GetNodeSettingsFile(name), 0600, settings); } void NodeUtility::RemoveNode(const String& name) @@ -386,7 +386,7 @@ bool NodeUtility::WriteNodeConfigObjects(const String& filename, const Array::Pt } std::fstream fp; - String tempFilename = Utility::CreateTempFile(filename + ".XXXXXX", fp); + String tempFilename = Utility::CreateTempFile(filename + ".XXXXXX", 0640, fp); fp << "/*\n"; fp << " * Generated by Icinga 2 node setup commands\n"; @@ -470,7 +470,7 @@ int NodeUtility::UpdateBlackAndWhiteList(const String& type, const String& zone_ String list_path = GetBlackAndWhiteListPath(type); CreateRepositoryPath(); - Utility::SaveJsonFile(list_path, lists); + Utility::SaveJsonFile(list_path, 0600, lists); return 0; } @@ -515,7 +515,7 @@ int NodeUtility::RemoveBlackAndWhiteList(const String& type, const String& zone_ String list_path = GetBlackAndWhiteListPath(type); CreateRepositoryPath(); - Utility::SaveJsonFile(list_path, lists); + Utility::SaveJsonFile(list_path, 0600, lists); return 0; } @@ -640,7 +640,7 @@ void NodeUtility::UpdateConstant(const String& name, const String& value) std::ifstream ifp(constantsFile.CStr()); std::fstream ofp; - String tempFile = Utility::CreateTempFile(constantsFile + ".XXXXXX", ofp); + String tempFile = Utility::CreateTempFile(constantsFile + ".XXXXXX", 0640, ofp); bool found = false; diff --git a/lib/cli/nodewizardcommand.cpp b/lib/cli/nodewizardcommand.cpp index 079bb5a13..87aeb4763 100644 --- a/lib/cli/nodewizardcommand.cpp +++ b/lib/cli/nodewizardcommand.cpp @@ -413,7 +413,7 @@ wizard_ticket: NodeUtility::CreateBackupFile(apipath); std::fstream fp; - String tempApiPath = Utility::CreateTempFile(apipath + ".XXXXXX", fp); + String tempApiPath = Utility::CreateTempFile(apipath + ".XXXXXX", 0640, fp); fp << "/**\n" << " * The API listener is used for distributed monitoring setups.\n" @@ -538,7 +538,7 @@ wizard_ticket: std::fstream fp; - String tempApiPath = Utility::CreateTempFile(apipath + ".XXXXXX", fp); + String tempApiPath = Utility::CreateTempFile(apipath + ".XXXXXX", 0640, fp); fp << "/**\n" << " * The API listener is used for distributed monitoring setups.\n" diff --git a/lib/cli/repositoryutility.cpp b/lib/cli/repositoryutility.cpp index 157c371fb..a4d43938e 100644 --- a/lib/cli/repositoryutility.cpp +++ b/lib/cli/repositoryutility.cpp @@ -357,7 +357,7 @@ bool RepositoryUtility::WriteObjectToRepositoryChangeLog(const String& path, con CreateRepositoryPath(Utility::DirName(path)); std::fstream fp; - String tempFilename = Utility::CreateTempFile(path + ".XXXXXX", fp); + String tempFilename = Utility::CreateTempFile(path + ".XXXXXX", 0600, fp); fp << JsonEncode(item); fp.close(); @@ -497,7 +497,7 @@ bool RepositoryUtility::WriteObjectToRepository(const String& path, const String CreateRepositoryPath(Utility::DirName(path)); std::fstream fp; - String tempFilename = Utility::CreateTempFile(path + ".XXXXXX", fp); + String tempFilename = Utility::CreateTempFile(path + ".XXXXXX", 0640, fp); SerializeObject(fp, name, type, item); fp << std::endl; diff --git a/lib/compat/statusdatawriter.cpp b/lib/compat/statusdatawriter.cpp index bfd90bb47..0986fdfdf 100644 --- a/lib/compat/statusdatawriter.cpp +++ b/lib/compat/statusdatawriter.cpp @@ -539,7 +539,7 @@ void StatusDataWriter::UpdateObjectsCache(void) String objectsPath = GetObjectsPath(); std::fstream objectfp; - String tempObjectsPath = Utility::CreateTempFile(objectsPath + ".XXXXXX", objectfp); + String tempObjectsPath = Utility::CreateTempFile(objectsPath + ".XXXXXX", 0640, objectfp); objectfp << std::fixed; @@ -785,7 +785,7 @@ void StatusDataWriter::StatusTimerHandler(void) String statusPath = GetStatusPath(); std::fstream statusfp; - String tempStatusPath = Utility::CreateTempFile(statusPath + ".XXXXXX", statusfp); + String tempStatusPath = Utility::CreateTempFile(statusPath + ".XXXXXX", 0640, statusfp); statusfp << std::fixed; diff --git a/lib/config/configcompilercontext.cpp b/lib/config/configcompilercontext.cpp index 917ee9e9f..901e00d41 100644 --- a/lib/config/configcompilercontext.cpp +++ b/lib/config/configcompilercontext.cpp @@ -37,7 +37,7 @@ void ConfigCompilerContext::OpenObjectsFile(const String& filename) m_ObjectsPath = filename; std::fstream *fp = new std::fstream(); - m_ObjectsTempFile = Utility::CreateTempFile(filename + ".XXXXXX", *fp); + m_ObjectsTempFile = Utility::CreateTempFile(filename + ".XXXXXX", 0600, *fp); if (!*fp) BOOST_THROW_EXCEPTION(std::runtime_error("Could not open '" + m_ObjectsTempFile + "' file")); diff --git a/lib/icinga/clusterevents.cpp b/lib/icinga/clusterevents.cpp index 4e712cf82..eaf2e62ad 100644 --- a/lib/icinga/clusterevents.cpp +++ b/lib/icinga/clusterevents.cpp @@ -724,7 +724,7 @@ Value ClusterEvents::UpdateRepositoryAPIHandler(const MessageOrigin::Ptr& origin String repositoryFile = GetRepositoryDir() + SHA256(params->Get("endpoint")) + ".repo"; std::fstream fp; - String tempRepositoryFile = Utility::CreateTempFile(repositoryFile + ".XXXXXX", fp); + String tempRepositoryFile = Utility::CreateTempFile(repositoryFile + ".XXXXXX", 0640, fp); fp << JsonEncode(params); fp.close(); diff --git a/lib/icinga/icingaapplication.cpp b/lib/icinga/icingaapplication.cpp index 2825030d1..9bbd81583 100644 --- a/lib/icinga/icingaapplication.cpp +++ b/lib/icinga/icingaapplication.cpp @@ -175,7 +175,7 @@ void IcingaApplication::DumpModifiedAttributes(void) String path = GetModAttrPath(); std::fstream fp; - String tempFilename = Utility::CreateTempFile(path + ".XXXXXX", fp); + String tempFilename = Utility::CreateTempFile(path + ".XXXXXX", 0640, fp); ConfigObject::Ptr previousObject; ConfigObject::DumpModifiedAttributes(boost::bind(&PersistModAttrHelper, boost::ref(fp), boost::ref(previousObject), _1, _2, _3)); From e4b99ca87e41ef78a844569a89510523e3c22f47 Mon Sep 17 00:00:00 2001 From: Michael Friedrich Date: Wed, 24 Feb 2016 13:55:25 +0100 Subject: [PATCH 2/3] Ensure that config files are readable by the daemon refs #11212 refs #11211 --- lib/cli/apisetuputility.cpp | 2 +- lib/cli/nodesetupcommand.cpp | 4 ++-- lib/cli/nodeutility.cpp | 4 ++-- lib/cli/nodewizardcommand.cpp | 4 ++-- lib/cli/repositoryutility.cpp | 2 +- lib/compat/statusdatawriter.cpp | 4 ++-- lib/icinga/clusterevents.cpp | 2 +- lib/icinga/icingaapplication.cpp | 2 +- 8 files changed, 12 insertions(+), 12 deletions(-) diff --git a/lib/cli/apisetuputility.cpp b/lib/cli/apisetuputility.cpp index 56011ca57..3af432356 100644 --- a/lib/cli/apisetuputility.cpp +++ b/lib/cli/apisetuputility.cpp @@ -171,7 +171,7 @@ bool ApiSetupUtility::SetupMasterApiUser(void) NodeUtility::CreateBackupFile(apiUsersPath); std::fstream fp; - String tempFilename = Utility::CreateTempFile(apiUsersPath + ".XXXXXX", 0640, fp); + String tempFilename = Utility::CreateTempFile(apiUsersPath + ".XXXXXX", 0644, fp); fp << "/**\n" << " * The APIUser objects are used for authentication against the API.\n" diff --git a/lib/cli/nodesetupcommand.cpp b/lib/cli/nodesetupcommand.cpp index 0eb34b3b7..ed0126ce8 100644 --- a/lib/cli/nodesetupcommand.cpp +++ b/lib/cli/nodesetupcommand.cpp @@ -170,7 +170,7 @@ int NodeSetupCommand::SetupMaster(const boost::program_options::variables_map& v NodeUtility::CreateBackupFile(apipath); std::fstream fp; - String tempApiPath = Utility::CreateTempFile(apipath + ".XXXXXX", 0640, fp); + String tempApiPath = Utility::CreateTempFile(apipath + ".XXXXXX", 0644, fp); fp << "/**\n" << " * The API listener is used for distributed monitoring setups.\n" @@ -375,7 +375,7 @@ int NodeSetupCommand::SetupNode(const boost::program_options::variables_map& vm, NodeUtility::CreateBackupFile(apipath); std::fstream fp; - String tempApiPath = Utility::CreateTempFile(apipath + ".XXXXXX", 0640, fp); + String tempApiPath = Utility::CreateTempFile(apipath + ".XXXXXX", 0644, fp); fp << "/**\n" << " * The API listener is used for distributed monitoring setups.\n" diff --git a/lib/cli/nodeutility.cpp b/lib/cli/nodeutility.cpp index 49741fe85..b096b2490 100644 --- a/lib/cli/nodeutility.cpp +++ b/lib/cli/nodeutility.cpp @@ -386,7 +386,7 @@ bool NodeUtility::WriteNodeConfigObjects(const String& filename, const Array::Pt } std::fstream fp; - String tempFilename = Utility::CreateTempFile(filename + ".XXXXXX", 0640, fp); + String tempFilename = Utility::CreateTempFile(filename + ".XXXXXX", 0644, fp); fp << "/*\n"; fp << " * Generated by Icinga 2 node setup commands\n"; @@ -640,7 +640,7 @@ void NodeUtility::UpdateConstant(const String& name, const String& value) std::ifstream ifp(constantsFile.CStr()); std::fstream ofp; - String tempFile = Utility::CreateTempFile(constantsFile + ".XXXXXX", 0640, ofp); + String tempFile = Utility::CreateTempFile(constantsFile + ".XXXXXX", 0644, ofp); bool found = false; diff --git a/lib/cli/nodewizardcommand.cpp b/lib/cli/nodewizardcommand.cpp index 87aeb4763..9c89196d0 100644 --- a/lib/cli/nodewizardcommand.cpp +++ b/lib/cli/nodewizardcommand.cpp @@ -413,7 +413,7 @@ wizard_ticket: NodeUtility::CreateBackupFile(apipath); std::fstream fp; - String tempApiPath = Utility::CreateTempFile(apipath + ".XXXXXX", 0640, fp); + String tempApiPath = Utility::CreateTempFile(apipath + ".XXXXXX", 0644, fp); fp << "/**\n" << " * The API listener is used for distributed monitoring setups.\n" @@ -538,7 +538,7 @@ wizard_ticket: std::fstream fp; - String tempApiPath = Utility::CreateTempFile(apipath + ".XXXXXX", 0640, fp); + String tempApiPath = Utility::CreateTempFile(apipath + ".XXXXXX", 0644, fp); fp << "/**\n" << " * The API listener is used for distributed monitoring setups.\n" diff --git a/lib/cli/repositoryutility.cpp b/lib/cli/repositoryutility.cpp index a4d43938e..f2dc51063 100644 --- a/lib/cli/repositoryutility.cpp +++ b/lib/cli/repositoryutility.cpp @@ -497,7 +497,7 @@ bool RepositoryUtility::WriteObjectToRepository(const String& path, const String CreateRepositoryPath(Utility::DirName(path)); std::fstream fp; - String tempFilename = Utility::CreateTempFile(path + ".XXXXXX", 0640, fp); + String tempFilename = Utility::CreateTempFile(path + ".XXXXXX", 0644, fp); SerializeObject(fp, name, type, item); fp << std::endl; diff --git a/lib/compat/statusdatawriter.cpp b/lib/compat/statusdatawriter.cpp index 0986fdfdf..134174f70 100644 --- a/lib/compat/statusdatawriter.cpp +++ b/lib/compat/statusdatawriter.cpp @@ -539,7 +539,7 @@ void StatusDataWriter::UpdateObjectsCache(void) String objectsPath = GetObjectsPath(); std::fstream objectfp; - String tempObjectsPath = Utility::CreateTempFile(objectsPath + ".XXXXXX", 0640, objectfp); + String tempObjectsPath = Utility::CreateTempFile(objectsPath + ".XXXXXX", 0644, objectfp); objectfp << std::fixed; @@ -785,7 +785,7 @@ void StatusDataWriter::StatusTimerHandler(void) String statusPath = GetStatusPath(); std::fstream statusfp; - String tempStatusPath = Utility::CreateTempFile(statusPath + ".XXXXXX", 0640, statusfp); + String tempStatusPath = Utility::CreateTempFile(statusPath + ".XXXXXX", 0644, statusfp); statusfp << std::fixed; diff --git a/lib/icinga/clusterevents.cpp b/lib/icinga/clusterevents.cpp index eaf2e62ad..34ff84042 100644 --- a/lib/icinga/clusterevents.cpp +++ b/lib/icinga/clusterevents.cpp @@ -724,7 +724,7 @@ Value ClusterEvents::UpdateRepositoryAPIHandler(const MessageOrigin::Ptr& origin String repositoryFile = GetRepositoryDir() + SHA256(params->Get("endpoint")) + ".repo"; std::fstream fp; - String tempRepositoryFile = Utility::CreateTempFile(repositoryFile + ".XXXXXX", 0640, fp); + String tempRepositoryFile = Utility::CreateTempFile(repositoryFile + ".XXXXXX", 0644, fp); fp << JsonEncode(params); fp.close(); diff --git a/lib/icinga/icingaapplication.cpp b/lib/icinga/icingaapplication.cpp index 9bbd81583..26f41d0b2 100644 --- a/lib/icinga/icingaapplication.cpp +++ b/lib/icinga/icingaapplication.cpp @@ -175,7 +175,7 @@ void IcingaApplication::DumpModifiedAttributes(void) String path = GetModAttrPath(); std::fstream fp; - String tempFilename = Utility::CreateTempFile(path + ".XXXXXX", 0640, fp); + String tempFilename = Utility::CreateTempFile(path + ".XXXXXX", 0644, fp); ConfigObject::Ptr previousObject; ConfigObject::DumpModifiedAttributes(boost::bind(&PersistModAttrHelper, boost::ref(fp), boost::ref(previousObject), _1, _2, _3)); From 071c43c4da358a2c8187150677938c14dfa8c91d Mon Sep 17 00:00:00 2001 From: Michael Friedrich Date: Wed, 24 Feb 2016 14:26:37 +0100 Subject: [PATCH 3/3] Release version v2.4.3 --- ChangeLog | 7 +++++++ doc/1-about.md | 19 +++++++++++++------ icinga2.nuspec | 4 ++-- icinga2.spec | 2 +- tools/chocolateyInstall.ps1 | 2 +- 5 files changed, 24 insertions(+), 10 deletions(-) diff --git a/ChangeLog b/ChangeLog index a2815e2c3..2257e0e6f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -4,6 +4,13 @@ Please check [doc/1-about.md]. ## What's New +### What's New in Version 2.4.3 + +#### Bugfixes + +* Bug 11211: Permission problem after running icinga2 node wizard +* Bug 11212: Wrong permissions for files in /var/cache/icinga2/* + ### What's New in Version 2.4.2 #### Changes diff --git a/doc/1-about.md b/doc/1-about.md index 7f437b82a..794e6c293 100644 --- a/doc/1-about.md +++ b/doc/1-about.md @@ -54,18 +54,25 @@ More details in the [Icinga FAQ](https://www.icinga.org/icinga/faq/). ## What's New +### What's New in Version 2.4.3 + +#### Bugfixes + +* Bug [11211](https://dev.icinga.org/issues/11211 "Bug 11211"): Permission problem after running icinga2 node wizard +* Bug [11212](https://dev.icinga.org/issues/11212 "Bug 11212"): Wrong permissions for files in /var/cache/icinga2/* + ### What's New in Version 2.4.2 #### Changes * ITL - Additional arguments for check_disk - Fix incorrect path for the check_hpasm plugin - New command: check_iostat - Fix incorrect variable names for the check_impi plugin + * Additional arguments for check_disk + * Fix incorrect path for the check_hpasm plugin + * New command: check_iostat + * Fix incorrect variable names for the check_impi plugin * Cluster - Improve cluster performance - Fix connection handling problems (multiple connections for the same endpoint) + * Improve cluster performance + * Fix connection handling problems (multiple connections for the same endpoint) * Performance improvements for the DB IDO modules * Lots and lots of various other bugfixes * Documentation updates diff --git a/icinga2.nuspec b/icinga2.nuspec index 2b8c1eb4b..831bb6693 100755 --- a/icinga2.nuspec +++ b/icinga2.nuspec @@ -6,8 +6,8 @@ icinga2 Icinga2 - 2.4.2 - 2015 - The Icinga Project + 2.4.3 + 2016 - The Icinga Project Icinga Development Team icinga2 - Monitoring Agent for Windows Icinga 2 is an open source monitoring platform which notifies users about host and service outages. diff --git a/icinga2.spec b/icinga2.spec index 595938003..d6faba6f7 100644 --- a/icinga2.spec +++ b/icinga2.spec @@ -66,7 +66,7 @@ Summary: Network monitoring application Name: icinga2 -Version: 2.4.2 +Version: 2.4.3 Release: %{revision}%{?dist} License: GPL-2.0+ Group: Applications/System diff --git a/tools/chocolateyInstall.ps1 b/tools/chocolateyInstall.ps1 index eae5f295b..67ac51192 100755 --- a/tools/chocolateyInstall.ps1 +++ b/tools/chocolateyInstall.ps1 @@ -1,6 +1,6 @@ $packageName = 'icinga2' $installerType = 'exe' -$url = 'http://packages.icinga.org/windows/Icinga2-v2.4.2.exe' +$url = 'http://packages.icinga.org/windows/Icinga2-v2.4.3.exe' $silentArgs = '/S' $validExitCodes = @(0)