]> granicus.if.org Git - icinga2/commitdiff
* use dedicated permissions namespace for scriptframe in filterutility to allow prope...
authorElias Ohm <eohm@novomind.com>
Fri, 12 Apr 2019 06:10:57 +0000 (08:10 +0200)
committerMichael Friedrich <michael.friedrich@icinga.com>
Thu, 16 May 2019 14:12:21 +0000 (16:12 +0200)
  * fixes issue https://github.com/Icinga/icinga2/issues/6785 where permission checks get wrong result because permissions checks are done within a shared namespaces without using only unique keys
  * mitigates issue https://github.com/Icinga/icinga2/issues/6874 where segmentation faults occur because of concurrent access to non threadsafe parts of namespace (a fix for thread safety of namespaces which would be an alternative approach to get rid of these segfaults is out of scope of this fix as 6785 needs to be fixed anyway and this is the straight-forwards) way to fix that
* do the same for eventqueue (not certain whether events can be processed in parallel but I expect it is the case)

(cherry picked from commit 1e7cd4afc821a0592b535e4270ebb2fdc387a207)

lib/remote/eventqueue.cpp
lib/remote/filterutility.cpp

index d724517711aeb7091f57812f653c34db0a80363d..436bd7dbf565e08ab5df80f414a969ad720207ed 100644 (file)
@@ -37,7 +37,8 @@ bool EventQueue::CanProcessEvent(const String& type) const
 
 void EventQueue::ProcessEvent(const Dictionary::Ptr& event)
 {
-       ScriptFrame frame(true);
+       Namespace::Ptr frameNS = new Namespace();
+       ScriptFrame frame(true, frameNS);
        frame.Sandboxed = true;
 
        try {
index cf6cb9ed4bf43599f1435ff7ba905db093425fd5..8bcebfafb0c9451786fe468072dc65cc884e3bc9 100644 (file)
@@ -205,7 +205,8 @@ std::vector<Value> FilterUtility::GetFilterTargets(const QueryDescription& qd, c
        Expression *permissionFilter;
        CheckPermission(user, qd.Permission, &permissionFilter);
 
-       ScriptFrame permissionFrame(true);
+       Namespace::Ptr permissionFrameNS = new Namespace();
+       ScriptFrame permissionFrame(true, permissionFrameNS);
 
        for (const String& type : qd.Types) {
                String attr = type;