You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by gn...@apache.org on 2016/10/20 11:45:13 UTC

svn commit: r1765806 - in /felix/trunk/framework/src: main/java/org/apache/felix/framework/ main/java/org/apache/felix/framework/util/ test/java/org/apache/felix/framework/ test/java/org/apache/felix/framework/util/

Author: gnodet
Date: Thu Oct 20 11:45:13 2016
New Revision: 1765806

URL: http://svn.apache.org/viewvc?rev=1765806&view=rev
Log:
[FELIX-5384] EventDispatcher#createWhitelistFromHooks fails under security

Added:
    felix/trunk/framework/src/main/java/org/apache/felix/framework/EventDispatcher.java
      - copied, changed from r1765805, felix/trunk/framework/src/main/java/org/apache/felix/framework/util/EventDispatcher.java
    felix/trunk/framework/src/test/java/org/apache/felix/framework/EventDispatcherTest.java
      - copied, changed from r1765805, felix/trunk/framework/src/test/java/org/apache/felix/framework/util/EventDispatcherTest.java
Removed:
    felix/trunk/framework/src/main/java/org/apache/felix/framework/util/EventDispatcher.java
    felix/trunk/framework/src/test/java/org/apache/felix/framework/util/EventDispatcherTest.java
Modified:
    felix/trunk/framework/src/main/java/org/apache/felix/framework/DTOFactory.java
    felix/trunk/framework/src/main/java/org/apache/felix/framework/Felix.java

Modified: felix/trunk/framework/src/main/java/org/apache/felix/framework/DTOFactory.java
URL: http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/DTOFactory.java?rev=1765806&r1=1765805&r2=1765806&view=diff
==============================================================================
--- felix/trunk/framework/src/main/java/org/apache/felix/framework/DTOFactory.java (original)
+++ felix/trunk/framework/src/main/java/org/apache/felix/framework/DTOFactory.java Thu Oct 20 11:45:13 2016
@@ -365,7 +365,7 @@ public class DTOFactory
         dto.properties = convertAttrsToDTO(framework.getConfig());
 
         dto.bundles = new ArrayList<BundleDTO>();
-        for (Bundle b : framework.getBundleContext().getBundles())
+        for (Bundle b : framework._getBundleContext().getBundles())
         {
             dto.bundles.add(DTOFactory.createDTO(b, BundleDTO.class));
         }
@@ -375,7 +375,7 @@ public class DTOFactory
         ServiceReference<?>[] refs = null;
         try
         {
-            refs = framework.getBundleContext().getAllServiceReferences(null, null);
+            refs = framework._getBundleContext().getAllServiceReferences(null, null);
         }
         catch (InvalidSyntaxException e)
         {

Copied: felix/trunk/framework/src/main/java/org/apache/felix/framework/EventDispatcher.java (from r1765805, felix/trunk/framework/src/main/java/org/apache/felix/framework/util/EventDispatcher.java)
URL: http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/EventDispatcher.java?p2=felix/trunk/framework/src/main/java/org/apache/felix/framework/EventDispatcher.java&p1=felix/trunk/framework/src/main/java/org/apache/felix/framework/util/EventDispatcher.java&r1=1765805&r2=1765806&rev=1765806&view=diff
==============================================================================
--- felix/trunk/framework/src/main/java/org/apache/felix/framework/util/EventDispatcher.java (original)
+++ felix/trunk/framework/src/main/java/org/apache/felix/framework/EventDispatcher.java Thu Oct 20 11:45:13 2016
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.felix.framework.util;
+package org.apache.felix.framework;
 
 import java.security.AccessController;
 import java.security.PrivilegedAction;
@@ -33,8 +33,7 @@ import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
 
-import org.apache.felix.framework.Logger;
-import org.apache.felix.framework.ServiceRegistry;
+import org.apache.felix.framework.util.*;
 import org.osgi.framework.AllServiceListener;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
@@ -470,7 +469,7 @@ public class EventDispatcher
         fireEventAsynchronously(this, Request.FRAMEWORK_EVENT, listeners, event);
     }
 
-    public void fireBundleEvent(BundleEvent event, Framework felix)
+    public void fireBundleEvent(BundleEvent event, Felix felix)
     {
         // Take a snapshot of the listener array.
         Map<BundleContext, List<ListenerInfo>> listeners = null;
@@ -530,7 +529,7 @@ public class EventDispatcher
     }
 
     public void fireServiceEvent(
-        final ServiceEvent event, final Dictionary oldProps, final Framework felix)
+        final ServiceEvent event, final Dictionary oldProps, final Felix felix)
     {
         // Take a snapshot of the listener array.
         Map<BundleContext, List<ListenerInfo>> listeners = null;
@@ -549,7 +548,7 @@ public class EventDispatcher
 
 // TODO: OSGi R4.3 - This is ugly and inefficient.
     private Map<BundleContext, List<ListenerInfo>> filterListenersUsingHooks(
-        ServiceEvent event, Framework felix, Map<BundleContext, List<ListenerInfo>> listeners)
+        ServiceEvent event, Felix felix, Map<BundleContext, List<ListenerInfo>> listeners)
     {
         Set<ServiceReference<org.osgi.framework.hooks.service.EventHook>> ehs =
             m_registry.getHookRegistry().getHooks(org.osgi.framework.hooks.service.EventHook.class);
@@ -602,7 +601,7 @@ public class EventDispatcher
 
                 // Keep a copy of the System Bundle Listeners, as they might be removed by the hooks, but we
                 // actually need to keep them in the end.
-                if (bc == felix.getBundleContext())
+                if (bc == felix._getBundleContext())
                     systemBundleListeners = new ArrayList<ListenerInfo>(entry.getValue());
             }
             shrinkableMap =
@@ -661,7 +660,7 @@ public class EventDispatcher
             // Put the system bundle listeners back, because they really need to be called
             // regardless whether they were removed by the hooks or not.
             if (systemBundleListeners != null)
-                newMap.put(felix.getBundleContext(), systemBundleListeners);
+                newMap.put(felix._getBundleContext(), systemBundleListeners);
 
             listeners = newMap;
         }
@@ -670,7 +669,7 @@ public class EventDispatcher
     }
 
     private <T> Set<BundleContext> createWhitelistFromHooks(
-        EventObject event, Framework felix,
+        EventObject event, Felix felix,
         Map<BundleContext, List<ListenerInfo>> listeners1,
         Map<BundleContext, List<ListenerInfo>> listeners2,
         Class<T> hookClass)
@@ -681,7 +680,7 @@ public class EventDispatcher
         if (!hooks.isEmpty())
         {
             boolean systemBundleListener = false;
-            BundleContext systemBundleContext = felix.getBundleContext();
+            BundleContext systemBundleContext = felix._getBundleContext();
 
             whitelist = new HashSet<BundleContext>();
             for (Entry<BundleContext, List<ListenerInfo>> entry : listeners1.entrySet())

Modified: felix/trunk/framework/src/main/java/org/apache/felix/framework/Felix.java
URL: http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/Felix.java?rev=1765806&r1=1765805&r2=1765806&view=diff
==============================================================================
--- felix/trunk/framework/src/main/java/org/apache/felix/framework/Felix.java (original)
+++ felix/trunk/framework/src/main/java/org/apache/felix/framework/Felix.java Thu Oct 20 11:45:13 2016
@@ -57,7 +57,6 @@ import org.apache.felix.framework.cache.
 import org.apache.felix.framework.capabilityset.CapabilitySet;
 import org.apache.felix.framework.capabilityset.SimpleFilter;
 import org.apache.felix.framework.ext.SecurityProvider;
-import org.apache.felix.framework.util.EventDispatcher;
 import org.apache.felix.framework.util.FelixConstants;
 import org.apache.felix.framework.util.ListenerInfo;
 import org.apache.felix.framework.util.MapToDictionary;

Copied: felix/trunk/framework/src/test/java/org/apache/felix/framework/EventDispatcherTest.java (from r1765805, felix/trunk/framework/src/test/java/org/apache/felix/framework/util/EventDispatcherTest.java)
URL: http://svn.apache.org/viewvc/felix/trunk/framework/src/test/java/org/apache/felix/framework/EventDispatcherTest.java?p2=felix/trunk/framework/src/test/java/org/apache/felix/framework/EventDispatcherTest.java&p1=felix/trunk/framework/src/test/java/org/apache/felix/framework/util/EventDispatcherTest.java&r1=1765805&r2=1765806&rev=1765806&view=diff
==============================================================================
--- felix/trunk/framework/src/test/java/org/apache/felix/framework/util/EventDispatcherTest.java (original)
+++ felix/trunk/framework/src/test/java/org/apache/felix/framework/EventDispatcherTest.java Thu Oct 20 11:45:13 2016
@@ -16,21 +16,12 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.felix.framework.util;
+package org.apache.felix.framework;
 
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Hashtable;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
+import java.util.*;
 
 import junit.framework.TestCase;
 
-import org.apache.felix.framework.Logger;
-import org.apache.felix.framework.ServiceRegistry;
 import org.easymock.EasyMock;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
@@ -39,7 +30,6 @@ import org.osgi.framework.ServiceEvent;
 import org.osgi.framework.ServiceListener;
 import org.osgi.framework.ServiceReference;
 import org.osgi.framework.hooks.service.EventHook;
-import org.osgi.framework.launch.Framework;
 
 public class EventDispatcherTest extends TestCase
 {
@@ -136,11 +126,7 @@ public class EventDispatcherTest extends
 
         assertEquals("Precondition failed", 0, fired.size());
 
-        Framework framework = EasyMock.createNiceMock(Framework.class);
-        EasyMock.replay(new Object[]
-            {
-                framework
-            });
+        Felix framework = new Felix(new HashMap());
 
         ed.fireServiceEvent(event, null, framework);
         assertEquals(1, fired.size());