mcconnell 2004/01/21 06:17:35
Modified:
merlin/activation/impl/src/java/org/apache/avalon/activation/appliance/impl
DefaultAppliance.java
Log:
Disable proxy creation is permissions do not allow it.
Revision Changes Path
1.25 +29 -6
avalon/merlin/activation/impl/src/java/org/apache/avalon/activation/appliance/impl/DefaultAppliance.java
Index: DefaultAppliance.java
===================================================================
RCS file:
/home/cvs/avalon/merlin/activation/impl/src/java/org/apache/avalon/activation/appliance/impl/DefaultAppliance.java,v
retrieving revision 1.24
retrieving revision 1.25
diff -u -r1.24 -r1.25
--- DefaultAppliance.java 21 Jan 2004 12:38:48 -0000 1.24
+++ DefaultAppliance.java 21 Jan 2004 14:17:35 -0000 1.25
@@ -55,11 +55,13 @@
import java.lang.reflect.UndeclaredThrowableException;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
+import java.security.AccessControlException;
import java.security.AccessControlContext;
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.security.PrivilegedActionException;
import java.security.PrivilegedExceptionAction;
+import java.security.Permission;
import java.util.Hashtable;
import java.util.ArrayList;
import java.util.Map;
@@ -102,6 +104,7 @@
import org.apache.avalon.lifecycle.Creator;
import org.apache.avalon.meta.info.InfoDescriptor;
import org.apache.avalon.meta.info.StageDescriptor;
+import org.apache.avalon.util.exception.ExceptionHelper;
/**
* DefaultAppliance is the default implementation of a local
@@ -1201,6 +1204,25 @@
classes,
handler );
}
+ catch( AccessControlException e )
+ {
+ Permission p = e.getPermission();
+ if( null != p )
+ {
+ final String warning =
+ "Proxy creation disabled due to insufficient permission: ["
+ + p.getName()
+ + "].";
+ getLogger().warn( warning );
+ }
+ else
+ {
+ final String warning =
+ "Proxy creation disabled due to access control restriction.";
+ getLogger().warn( warning );
+ }
+ return instance;
+ }
catch( Throwable e )
{
final String error =
@@ -1290,8 +1312,9 @@
m_destroyed = true;
}
- private Object secureInvocation( final Method method, final Object object,
final Object[] args )
- throws Exception
+ private Object secureInvocation(
+ final Method method, final Object object, final Object[] args )
+ throws Exception
{
if( ! m_secured )
{
@@ -1314,7 +1337,8 @@
private Throwable handleInvocationThrowable( Throwable e )
{
final String error =
- "Delegation error raised by component: " + m_model.getQualifiedName();
+ "Delegation error raised by component: "
+ + m_model.getQualifiedName();
while( true )
{
if( e instanceof UndeclaredThrowableException )
@@ -1408,10 +1432,9 @@
}
catch( Throwable e )
{
+ getLogger().error( e.getMessage() );
final String error =
- "Proxy establishment failure: "
- + e.getMessage();
- getLogger().error( error );
+ "Provider publication failure.";
throw new LifecycleException( error, e );
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]