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;