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; }