From bf27aad234e2f1f0c09c454a701d21117d9f9fe5 Mon Sep 17 00:00:00 2001 From: Gunnar Beutner Date: Tue, 19 Mar 2013 15:15:57 +0100 Subject: [PATCH] Fix cloning attributes for service notifications. --- lib/icinga/service-notification.cpp | 46 +++++++++++++++++++++-------- 1 file changed, 33 insertions(+), 13 deletions(-) diff --git a/lib/icinga/service-notification.cpp b/lib/icinga/service-notification.cpp index a790edd54..c7f0d49a7 100644 --- a/lib/icinga/service-notification.cpp +++ b/lib/icinga/service-notification.cpp @@ -170,13 +170,23 @@ std::set Service::GetNotifications(void) const void Service::UpdateSlaveNotifications(void) { Dictionary::Ptr oldNotifications; - std::vector notificationDescsList; - ConfigItem::Ptr item; + ConfigItem::Ptr serviceItem, hostItem; - item = ConfigItem::GetObject("Service", GetName()); + serviceItem = ConfigItem::GetObject("Service", GetName()); /* Don't create slave notifications unless we own this object */ - if (!item) + if (!serviceItem) + return; + + Host::Ptr host = GetHost(); + + if (!host) + return; + + hostItem = ConfigItem::GetObject("Host", host->GetName()); + + /* Don't create slave notifications unless we own the host */ + if (!hostItem) return; { @@ -184,27 +194,37 @@ void Service::UpdateSlaveNotifications(void) oldNotifications = m_SlaveNotifications; } - notificationDescsList.push_back(Get("notifications")); + std::vector descLists; + + descLists.push_back(Get("notifications")); Dictionary::Ptr newNotifications; newNotifications = boost::make_shared(); - Host::Ptr host = GetHost(); + descLists.push_back(host->Get("notifications")); - if (!host) - return; + for (int i = 0; i < 2; i++) { + Dictionary::Ptr descs; + ConfigItem::Ptr item; - notificationDescsList.push_back(host->Get("notifications")); + if (i == 0) { + /* Host notification descs */ + descs = host->Get("notifications"); + item = hostItem; + } else { + /* Service notification descs */ + descs = Get("notifications"); + item = serviceItem; + } - BOOST_FOREACH(const Dictionary::Ptr& notificationDescs, notificationDescsList) { - if (!notificationDescs) + if (!descs) continue; - ObjectLock olock(notificationDescs); + ObjectLock olock(descs); String nfcname; Value nfcdesc; - BOOST_FOREACH(boost::tie(nfcname, nfcdesc), notificationDescs) { + BOOST_FOREACH(boost::tie(nfcname, nfcdesc), descs) { std::ostringstream namebuf; namebuf << GetName() << "-" << nfcname; String name = namebuf.str(); -- 2.40.0