FELIX-4963 : Eventadmin leaks caller's security context downstream. Apply patch from Ray Auge
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1691981 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/eventadmin/impl/src/main/java/org/apache/felix/eventadmin/impl/Configuration.java b/eventadmin/impl/src/main/java/org/apache/felix/eventadmin/impl/Configuration.java
index fd97f9d..fc51f5c 100644
--- a/eventadmin/impl/src/main/java/org/apache/felix/eventadmin/impl/Configuration.java
+++ b/eventadmin/impl/src/main/java/org/apache/felix/eventadmin/impl/Configuration.java
@@ -18,6 +18,9 @@
*/
package org.apache.felix.eventadmin.impl;
+import java.security.AccessControlContext;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
import java.util.Dictionary;
import java.util.Hashtable;
@@ -172,9 +175,13 @@
private ServiceRegistration m_managedServiceReg;
+ // the access control context
+ private final AccessControlContext acc;
+
public Configuration( BundleContext bundleContext )
{
m_bundleContext = bundleContext;
+ this.acc = AccessController.getContext();
// default configuration
configure( null );
@@ -219,10 +226,24 @@
@Override
public void run()
{
- synchronized ( Configuration.this )
+ if (System.getSecurityManager() != null)
{
- Configuration.this.configure( config );
- Configuration.this.startOrUpdate();
+ AccessController.doPrivileged(
+ new PrivilegedAction<Void>() {
+
+ @Override
+ public Void run() {
+ updateFromConfigAdmin0( config );
+ return null;
+ }
+
+ },
+ acc
+ );
+ }
+ else
+ {
+ updateFromConfigAdmin0( config );
}
}
@@ -230,6 +251,14 @@
}
+ void updateFromConfigAdmin0(final Dictionary<String, ?> config) {
+ synchronized ( Configuration.this )
+ {
+ Configuration.this.configure( config );
+ Configuration.this.startOrUpdate();
+ }
+ }
+
/**
* Configures this instance.
*/