]> granicus.if.org Git - icinga2/commitdiff
Ensure that added group members are unique
authorMichael Friedrich <michael.friedrich@icinga.com>
Wed, 9 May 2018 15:15:44 +0000 (17:15 +0200)
committerMichael Friedrich <michael.friedrich@icinga.com>
Wed, 9 May 2018 15:26:07 +0000 (17:26 +0200)
refs #4732

lib/icinga/hostgroup.cpp
lib/icinga/servicegroup.cpp
lib/icinga/usergroup.cpp

index da0e7b9adae63b94c1a89b95298e9becb4289e36..d0ca7b3239da4bd6d8f4ac9250217acd93c069ce 100644 (file)
@@ -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;
 }
index 555113259569b5e3a3140fd0d58073babb981841..2b99f42145843b64d956920f0c9ebd2770c3d42f 100644 (file)
@@ -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;
 }
index db87067295d10a7cc696cbfd5ee8985ff602c66d..8f2a4e7fc17eaf3f287853a333ac5962230a8dda 100644 (file)
@@ -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;
 }