From: Michael Friedrich Date: Wed, 9 May 2018 15:15:44 +0000 (+0200) Subject: Ensure that added group members are unique X-Git-Tag: v2.9.0~62^2~1 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=88d99094bf1bee60183e0d24e8ea89f530e1a534;p=icinga2 Ensure that added group members are unique refs #4732 --- diff --git a/lib/icinga/hostgroup.cpp b/lib/icinga/hostgroup.cpp index da0e7b9ad..d0ca7b323 100644 --- a/lib/icinga/hostgroup.cpp +++ b/lib/icinga/hostgroup.cpp @@ -37,9 +37,9 @@ INITIALIZE_ONCE([]() { bool HostGroup::EvaluateObjectRule(const Host::Ptr& host, const ConfigItem::Ptr& group) { - String group_name = group->GetName(); + String groupName = group->GetName(); - CONTEXT("Evaluating rule for group '" + group_name + "'"); + CONTEXT("Evaluating rule for group '" + groupName + "'"); ScriptFrame frame(true); if (group->GetScope()) @@ -50,10 +50,12 @@ bool HostGroup::EvaluateObjectRule(const Host::Ptr& host, const ConfigItem::Ptr& return false; Log(LogDebug, "HostGroup") - << "Assigning membership for group '" << group_name << "' to host '" << host->GetName() << "'"; + << "Assigning membership for group '" << groupName << "' to host '" << host->GetName() << "'"; Array::Ptr groups = host->GetGroups(); - groups->Add(group_name); + + if (groups && !groups->Contains(groupName)) + groups->Add(groupName); return true; } diff --git a/lib/icinga/servicegroup.cpp b/lib/icinga/servicegroup.cpp index 555113259..2b99f4214 100644 --- a/lib/icinga/servicegroup.cpp +++ b/lib/icinga/servicegroup.cpp @@ -37,9 +37,9 @@ INITIALIZE_ONCE([]() { bool ServiceGroup::EvaluateObjectRule(const Service::Ptr& service, const ConfigItem::Ptr& group) { - String group_name = group->GetName(); + String groupName = group->GetName(); - CONTEXT("Evaluating rule for group '" + group_name + "'"); + CONTEXT("Evaluating rule for group '" + groupName + "'"); Host::Ptr host = service->GetHost(); @@ -53,10 +53,12 @@ bool ServiceGroup::EvaluateObjectRule(const Service::Ptr& service, const ConfigI return false; Log(LogDebug, "ServiceGroup") - << "Assigning membership for group '" << group_name << "' to service '" << service->GetName() << "'"; + << "Assigning membership for group '" << groupName << "' to service '" << service->GetName() << "'"; Array::Ptr groups = service->GetGroups(); - groups->Add(group_name); + + if (groups && !groups->Contains(groupName)) + groups->Add(groupName); return true; } diff --git a/lib/icinga/usergroup.cpp b/lib/icinga/usergroup.cpp index db8706729..8f2a4e7fc 100644 --- a/lib/icinga/usergroup.cpp +++ b/lib/icinga/usergroup.cpp @@ -37,9 +37,9 @@ INITIALIZE_ONCE([]() { bool UserGroup::EvaluateObjectRule(const User::Ptr& user, const ConfigItem::Ptr& group) { - String group_name = group->GetName(); + String groupName = group->GetName(); - CONTEXT("Evaluating rule for group '" + group_name + "'"); + CONTEXT("Evaluating rule for group '" + groupName + "'"); ScriptFrame frame(true); if (group->GetScope()) @@ -50,10 +50,12 @@ bool UserGroup::EvaluateObjectRule(const User::Ptr& user, const ConfigItem::Ptr& return false; Log(LogDebug, "UserGroup") - << "Assigning membership for group '" << group_name << "' to user '" << user->GetName() << "'"; + << "Assigning membership for group '" << groupName << "' to user '" << user->GetName() << "'"; Array::Ptr groups = user->GetGroups(); - groups->Add(group_name); + + if (groups && !groups->Contains(groupName)) + groups->Add(groupName); return true; }