You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by da...@apache.org on 2012/10/18 17:35:04 UTC
svn commit: r1399698 - in
/aries/trunk/spi-fly/spi-fly-core/src/main/java/org/apache/aries/spifly:
ProviderBundleTrackerCustomizer.java Util.java
Author: davidb
Date: Thu Oct 18 15:35:04 2012
New Revision: 1399698
URL: http://svn.apache.org/viewvc?rev=1399698&view=rev
Log:
Implement the security requirements of the ServiceLoader Mediator spec implementation in SPI Fly.
Modified:
aries/trunk/spi-fly/spi-fly-core/src/main/java/org/apache/aries/spifly/ProviderBundleTrackerCustomizer.java
aries/trunk/spi-fly/spi-fly-core/src/main/java/org/apache/aries/spifly/Util.java
Modified: aries/trunk/spi-fly/spi-fly-core/src/main/java/org/apache/aries/spifly/ProviderBundleTrackerCustomizer.java
URL: http://svn.apache.org/viewvc/aries/trunk/spi-fly/spi-fly-core/src/main/java/org/apache/aries/spifly/ProviderBundleTrackerCustomizer.java?rev=1399698&r1=1399697&r2=1399698&view=diff
==============================================================================
--- aries/trunk/spi-fly/spi-fly-core/src/main/java/org/apache/aries/spifly/ProviderBundleTrackerCustomizer.java (original)
+++ aries/trunk/spi-fly/spi-fly-core/src/main/java/org/apache/aries/spifly/ProviderBundleTrackerCustomizer.java Thu Oct 18 15:35:04 2012
@@ -177,11 +177,9 @@ public class ProviderBundleTrackerCustom
SecurityManager sm = System.getSecurityManager();
if (sm != null) {
if (bundle.hasPermission(new ServicePermission(registrationClassName, ServicePermission.REGISTER))) {
- System.err.println("*** Found security manager and bundle has permission to register: " + bundle);
reg = bundle.getBundleContext().registerService(
registrationClassName, new ProviderServiceFactory(cls), properties);
} else {
- System.err.println("*** Found security manager and bundle has NO permission to register: " + bundle);
log(LogService.LOG_INFO, "Bundle " + bundle + " does not have the permission to register services of type: " + registrationClassName);
}
} else {
Modified: aries/trunk/spi-fly/spi-fly-core/src/main/java/org/apache/aries/spifly/Util.java
URL: http://svn.apache.org/viewvc/aries/trunk/spi-fly/spi-fly-core/src/main/java/org/apache/aries/spifly/Util.java?rev=1399698&r1=1399697&r2=1399698&view=diff
==============================================================================
--- aries/trunk/spi-fly/spi-fly-core/src/main/java/org/apache/aries/spifly/Util.java (original)
+++ aries/trunk/spi-fly/spi-fly-core/src/main/java/org/apache/aries/spifly/Util.java Thu Oct 18 15:35:04 2012
@@ -22,6 +22,8 @@ import java.io.IOException;
import java.lang.reflect.Method;
import java.net.URL;
import java.security.AccessControlException;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Enumeration;
@@ -48,13 +50,25 @@ public class Util {
// Provided as static method to make it easier to call from ASM-modified code
public static void storeContextClassloader() {
- storedClassLoaders.set(Thread.currentThread().getContextClassLoader());
+ AccessController.doPrivileged(new PrivilegedAction<Void>() {
+ @Override
+ public Void run() {
+ storedClassLoaders.set(Thread.currentThread().getContextClassLoader());
+ return null;
+ }
+ });
}
// Provided as static method to make it easier to call from ASM-modified code
public static void restoreContextClassloader() {
- Thread.currentThread().setContextClassLoader(storedClassLoaders.get());
- storedClassLoaders.set(null);
+ AccessController.doPrivileged(new PrivilegedAction<Void>() {
+ @Override
+ public Void run() {
+ Thread.currentThread().setContextClassLoader(storedClassLoaders.get());
+ storedClassLoaders.set(null);
+ return null;
+ }
+ });
}
public static void fixContextClassloader(String cls, String method, Class<?> clsArg, ClassLoader bundleLoader) {
@@ -65,10 +79,16 @@ public class Util {
BundleReference br = ((BundleReference) bundleLoader);
- ClassLoader cl = findContextClassloader(br.getBundle(), cls, method, clsArg);
+ final ClassLoader cl = findContextClassloader(br.getBundle(), cls, method, clsArg);
if (cl != null) {
BaseActivator.activator.log(LogService.LOG_INFO, "Temporarily setting Thread Context Classloader to: " + cl);
- Thread.currentThread().setContextClassLoader(cl);
+ AccessController.doPrivileged(new PrivilegedAction<Void>() {
+ @Override
+ public Void run() {
+ Thread.currentThread().setContextClassLoader(cl);
+ return null;
+ }
+ });
} else {
BaseActivator.activator.log(LogService.LOG_WARNING, "No classloader found for " + cls + ":" + method + "(" + clsArg + ")");
}
@@ -127,8 +147,17 @@ public class Util {
}
}
+ private static ClassLoader getBundleClassLoader(final Bundle b) {
+ return AccessController.doPrivileged(new PrivilegedAction<ClassLoader>() {
+ @Override
+ public ClassLoader run() {
+ return getBundleClassLoaderPrivileged(b);
+ }
+ });
+ }
+
@SuppressWarnings("unchecked")
- private static ClassLoader getBundleClassLoader(Bundle b) {
+ private static ClassLoader getBundleClassLoaderPrivileged(Bundle b) {
// In 4.3 this can be done much easier by using the BundleWiring, but we want this code to
// be 4.2 compliant.
// Here we're just finding any class in the bundle, load that and then use its classloader.