You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by pa...@apache.org on 2009/11/25 22:03:32 UTC
svn commit: r884272 - in
/felix/trunk/framework/src/main/java/org/apache/felix/framework: Felix.java
ServiceRegistrationImpl.java util/SecureAction.java util/Util.java
Author: pauls
Date: Wed Nov 25 21:03:31 2009
New Revision: 884272
URL: http://svn.apache.org/viewvc?rev=884272&view=rev
Log:
Make sure we do a doPriv when we call getClassLoader inside Util (FELIX-1101).
Modified:
felix/trunk/framework/src/main/java/org/apache/felix/framework/Felix.java
felix/trunk/framework/src/main/java/org/apache/felix/framework/ServiceRegistrationImpl.java
felix/trunk/framework/src/main/java/org/apache/felix/framework/util/SecureAction.java
felix/trunk/framework/src/main/java/org/apache/felix/framework/util/Util.java
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=884272&r1=884271&r2=884272&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 Wed Nov 25 21:03:31 2009
@@ -2693,7 +2693,7 @@
{
for (int i = 0; i < classNames.length; i++)
{
- Class clazz = Util.loadClassUsingClass(svcObj.getClass(), classNames[i]);
+ Class clazz = Util.loadClassUsingClass(svcObj.getClass(), classNames[i], m_secureAction);
if (clazz == null)
{
throw new IllegalArgumentException(
Modified: felix/trunk/framework/src/main/java/org/apache/felix/framework/ServiceRegistrationImpl.java
URL: http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/ServiceRegistrationImpl.java?rev=884272&r1=884271&r2=884272&view=diff
==============================================================================
--- felix/trunk/framework/src/main/java/org/apache/felix/framework/ServiceRegistrationImpl.java (original)
+++ felix/trunk/framework/src/main/java/org/apache/felix/framework/ServiceRegistrationImpl.java Wed Nov 25 21:03:31 2009
@@ -171,7 +171,7 @@
// Case 1.
Class sourceClass = (m_factory != null) ? m_factory.getClass() : m_svcObj.getClass();
- return Util.loadClassUsingClass(sourceClass, clazz.getName()) == clazz;
+ return Util.loadClassUsingClass(sourceClass, clazz.getName(), Felix.m_secureAction) == clazz;
}
Object getProperty(String key)
@@ -315,7 +315,7 @@
{
for (int i = 0; i < m_classes.length; i++)
{
- Class clazz = Util.loadClassUsingClass(svcObj.getClass(), m_classes[i]);
+ Class clazz = Util.loadClassUsingClass(svcObj.getClass(), m_classes[i], Felix.m_secureAction);
if ((clazz == null) || !clazz.isAssignableFrom(svcObj.getClass()))
{
if (clazz == null)
Modified: felix/trunk/framework/src/main/java/org/apache/felix/framework/util/SecureAction.java
URL: http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/util/SecureAction.java?rev=884272&r1=884271&r2=884272&view=diff
==============================================================================
--- felix/trunk/framework/src/main/java/org/apache/felix/framework/util/SecureAction.java (original)
+++ felix/trunk/framework/src/main/java/org/apache/felix/framework/util/SecureAction.java Wed Nov 25 21:03:31 2009
@@ -137,6 +137,27 @@
return ClassLoader.getSystemClassLoader();
}
}
+
+ public ClassLoader getClassLoader(Class clazz)
+ {
+ if (System.getSecurityManager() != null)
+ {
+ try
+ {
+ Actions actions = (Actions) m_actions.get();
+ actions.set(Actions.GET_CLASS_LOADER_ACTION, clazz);
+ return (ClassLoader) AccessController.doPrivileged(actions, m_acc);
+ }
+ catch (PrivilegedActionException ex)
+ {
+ throw (RuntimeException) ex.getException();
+ }
+ }
+ else
+ {
+ return clazz.getClassLoader();
+ }
+ }
public Class forName(String name) throws ClassNotFoundException
{
@@ -1094,6 +1115,7 @@
public static final int SWAP_FIELD_ACTION = 38;
public static final int SYSTEM_EXIT_ACTION = 39;
public static final int FLUSH_FIELD_ACTION = 40;
+ public static final int GET_CLASS_LOADER_ACTION = 41;
private int m_action = -1;
private Object m_arg1 = null;
@@ -1340,6 +1362,10 @@
{
_flush(((Class) arg1), arg2);
}
+ else if (action == GET_CLASS_LOADER_ACTION)
+ {
+ return ((Class) arg1).getClassLoader();
+ }
return null;
}
Modified: felix/trunk/framework/src/main/java/org/apache/felix/framework/util/Util.java
URL: http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/util/Util.java?rev=884272&r1=884271&r2=884272&view=diff
==============================================================================
--- felix/trunk/framework/src/main/java/org/apache/felix/framework/util/Util.java (original)
+++ felix/trunk/framework/src/main/java/org/apache/felix/framework/util/Util.java Wed Nov 25 21:03:31 2009
@@ -158,16 +158,16 @@
* @return the loaded class or <tt>null</tt> if it could not be
* loaded.
**/
- public static Class loadClassUsingClass(Class clazz, String name)
+ public static Class loadClassUsingClass(Class clazz, String name, SecureAction action)
{
Class loadedClass = null;
while (clazz != null)
{
// Get the class loader of the current class object.
- ClassLoader loader = clazz.getClassLoader();
+ ClassLoader loader = action.getClassLoader(clazz);
// A null class loader represents the system class loader.
- loader = (loader == null) ? ClassLoader.getSystemClassLoader() : loader;
+ loader = (loader == null) ? action.getSystemClassLoader() : loader;
try
{
return loader.loadClass(name);
@@ -183,7 +183,7 @@
Class[] ifcs = clazz.getInterfaces();
for (int i = 0; i < ifcs.length; i++)
{
- loadedClass = loadClassUsingClass(ifcs[i], name);
+ loadedClass = loadClassUsingClass(ifcs[i], name, action);
if (loadedClass != null)
{
return loadedClass;