]> granicus.if.org Git - icinga2/commitdiff
Fix variable scope for object rules
authorGunnar Beutner <gunnar@beutner.name>
Thu, 6 Nov 2014 18:26:44 +0000 (19:26 +0100)
committerGunnar Beutner <gunnar@beutner.name>
Thu, 6 Nov 2014 18:26:44 +0000 (19:26 +0100)
lib/config/objectrule.cpp
lib/icinga/hostgroup.cpp
lib/icinga/servicegroup.cpp
lib/icinga/usergroup.cpp

index 36525ff0b866a4b2afaca2c39f2fe0376034a241..de6247a4a25ed1fdba777b4f1e2f2b3be123766c 100644 (file)
@@ -65,10 +65,7 @@ void ObjectRule::AddRule(const String& sourceType, const String& name,
 
 bool ObjectRule::EvaluateFilter(const Dictionary::Ptr& scope) const
 {
-       scope->Set("__parent", m_Scope);
-       bool result = m_Filter->Evaluate(scope);
-       scope->Remove("__parent");
-       return result;
+       return m_Filter->Evaluate(scope);
 }
 
 void ObjectRule::EvaluateRules(bool clear)
index dc88c06be75ba99c30d66409c403f523171b8a06..312378df61bc63a299ae988392e2327a0497c06d 100644 (file)
@@ -46,6 +46,7 @@ bool HostGroup::EvaluateObjectRuleOne(const Host::Ptr& host, const ObjectRule& r
        CONTEXT(msgbuf.str());
 
        Dictionary::Ptr locals = make_shared<Dictionary>();
+       locals->Set("__parent", rule.GetScope());
        locals->Set("host", host);
 
        if (!rule.EvaluateFilter(locals))
index 1bb570fb3ce14e94e551bc5a755751e674c730d0..de084c5b790b8bee68095bb709c74a368e9c57ef 100644 (file)
@@ -48,6 +48,7 @@ bool ServiceGroup::EvaluateObjectRuleOne(const Service::Ptr& service, const Obje
        Host::Ptr host = service->GetHost();
 
        Dictionary::Ptr locals = make_shared<Dictionary>();
+       locals->Set("__parent", rule.GetScope());
        locals->Set("host", host);
        locals->Set("service", service);
 
index 53d0d476aaf13d2b5ebf1c31329291ba4fadf4c9..a8b56c8a3b684490c9cabe90b439ae6c4cf5959b 100644 (file)
@@ -46,6 +46,7 @@ bool UserGroup::EvaluateObjectRuleOne(const User::Ptr& user, const ObjectRule& r
        CONTEXT(msgbuf.str());
 
        Dictionary::Ptr locals = make_shared<Dictionary>();
+       locals->Set("__parent", rule.GetScope());
        locals->Set("user", user);
 
        if (!rule.EvaluateFilter(locals))