]> granicus.if.org Git - icinga2/commitdiff
Fix "assign where" for nested groups
authorGunnar Beutner <gunnar@beutner.name>
Tue, 28 Oct 2014 17:58:22 +0000 (18:58 +0100)
committerGunnar Beutner <gunnar@beutner.name>
Tue, 28 Oct 2014 17:58:22 +0000 (18:58 +0100)
fixes #7475

lib/icinga/host.cpp
lib/icinga/hostgroup.cpp
lib/icinga/service.cpp
lib/icinga/servicegroup.cpp
lib/icinga/user.cpp
lib/icinga/usergroup.cpp

index b21cc3f4df017f490677bdfd9c92b0263520f6de..8e39405199f435a62084c9a8219e770f01c20eab 100644 (file)
@@ -41,6 +41,8 @@ void Host::OnConfigLoaded(void)
        Array::Ptr groups = GetGroups();
 
        if (groups) {
+               groups = groups->ShallowClone();
+
                ObjectLock olock(groups);
 
                BOOST_FOREACH(const String& name, groups) {
index 8bf54905c110f1e95573afec646497a9b3c3e7e6..dc88c06be75ba99c30d66409c403f523171b8a06 100644 (file)
@@ -66,9 +66,6 @@ bool HostGroup::EvaluateObjectRuleOne(const Host::Ptr& host, const ObjectRule& r
        /* assign host group membership */
        group->ResolveGroupMembership(host, true);
 
-       /* update groups attribute for apply */
-       host->AddGroup(group_name);
-
        return true;
 }
 
@@ -100,6 +97,8 @@ std::set<Host::Ptr> HostGroup::GetMembers(void) const
 
 void HostGroup::AddMember(const Host::Ptr& host)
 {
+       host->AddGroup(GetName());
+
        boost::mutex::scoped_lock lock(m_HostGroupMutex);
        m_Members.insert(host);
 }
index 3d14fcc6cb6cb489b8fa485c6c4ddce6dc9be552..ca498f0bf3f13dcdb94c2c09de9569dc10e03b94 100644 (file)
@@ -42,6 +42,8 @@ void Service::OnConfigLoaded(void)
        Array::Ptr groups = GetGroups();
 
        if (groups) {
+               groups = groups->ShallowClone();
+
                ObjectLock olock(groups);
 
                BOOST_FOREACH(const String& name, groups) {
index 2aa28c63d34606e713b4fa80118dba8614b905ba..1bb570fb3ce14e94e551bc5a755751e674c730d0 100644 (file)
@@ -69,9 +69,6 @@ bool ServiceGroup::EvaluateObjectRuleOne(const Service::Ptr& service, const Obje
        /* assign service group membership */
        group->ResolveGroupMembership(service, true);
 
-       /* update groups attribute for apply */
-       service->AddGroup(group_name);
-
        return true;
 }
 
@@ -103,6 +100,8 @@ std::set<Service::Ptr> ServiceGroup::GetMembers(void) const
 
 void ServiceGroup::AddMember(const Service::Ptr& service)
 {
+       service->AddGroup(GetName());
+
        boost::mutex::scoped_lock lock(m_ServiceGroupMutex);
        m_Members.insert(service);
 }
index 543016eac791816a46a6f6f3b5746812108d07ff..6649bef4813c558f7fbe76cd3eefa2d98d1b4acf 100644 (file)
@@ -40,6 +40,8 @@ void User::OnConfigLoaded(void)
        Array::Ptr groups = GetGroups();
 
        if (groups) {
+               groups = groups->ShallowClone();
+
                ObjectLock olock(groups);
 
                BOOST_FOREACH(const String& name, groups) {
index 2f2cb27e1e0a1b298927282de8bf392a484f6d62..53d0d476aaf13d2b5ebf1c31329291ba4fadf4c9 100644 (file)
@@ -66,9 +66,6 @@ bool UserGroup::EvaluateObjectRuleOne(const User::Ptr& user, const ObjectRule& r
        /* assign user group membership */
        group->ResolveGroupMembership(user, true);
 
-       /* update groups attribute for apply */
-       user->AddGroup(group_name);
-
        return true;
 }
 
@@ -100,6 +97,8 @@ std::set<User::Ptr> UserGroup::GetMembers(void) const
 
 void UserGroup::AddMember(const User::Ptr& user)
 {
+       user->AddGroup(GetName());
+
        boost::mutex::scoped_lock lock(m_UserGroupMutex);
        m_Members.insert(user);
 }