[ 
https://issues.apache.org/jira/browse/HADOOP-5731?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12701959#action_12701959
 ] 

Steve Loughran commented on HADOOP-5731:
----------------------------------------

catching and logging the setAccessible operation allows the method call to 
proceed, but other problems surface

1. I get some access control problems
{code}
[sf-startdaemon-debug] java.io.IOException: 
java.security.AccessControlException: access denied 
(javax.security.auth.AuthPermission getSubject)
[sf-startdaemon-debug]  at 
java.security.AccessControlContext.checkPermission(AccessControlContext.java:323)
[sf-startdaemon-debug]  at 
java.security.AccessController.checkPermission(AccessController.java:546)
[sf-startdaemon-debug]  at 
java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
[sf-startdaemon-debug]  at 
javax.security.auth.Subject.getSubject(Subject.java:268)
[sf-startdaemon-debug]  at 
org.apache.hadoop.security.UserGroupInformation.getCurrentUser(UserGroupInformation.java:84)
[sf-startdaemon-debug]  at 
org.apache.hadoop.security.UserGroupInformation.getCurrentUGI(UserGroupInformation.java:44)
[sf-startdaemon-debug]  at 
org.apache.hadoop.hdfs.server.namenode.NameNode.mkdirs(NameNode.java:642)
[sf-startdaemon-debug]  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native 
Method)
[sf-startdaemon-debug]  at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
[sf-startdaemon-debug]  at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
[sf-startdaemon-debug]  at java.lang.reflect.Method.invoke(Method.java:597)
[sf-startdaemon-debug]  at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:516)
[sf-startdaemon-debug]  at 
org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:959)
[sf-startdaemon-debug]  at 
org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:955)
[sf-startdaemon-debug]  at javax.security.auth.Subject.doAs(Subject.java:396)
[sf-startdaemon-debug]  at 
org.apache.hadoop.ipc.Server$Handler.run(Server.java:953)
{code}

2. RMI stops working
{code}
java.lang.SecurityException: attempt to add a Permission to a readonly 
Permissions object
at java.security.Permissions.add(Permissions.java:110)
at java.security.Policy$UnsupportedEmptyCollection.add(Policy.java:790)
at 
sun.rmi.server.LoaderHandler.getLoaderAccessControlContext(LoaderHandler.java:985)
at sun.rmi.server.LoaderHandler.lookupLoader(LoaderHandler.java:861)
at sun.rmi.server.LoaderHandler.loadClass(LoaderHandler.java:385)
at sun.rmi.server.LoaderHandler.loadClass(LoaderHandler.java:165)
at java.rmi.server.RMIClassLoader$2.loadClass(RMIClassLoader.java:620)
at 
org.smartfrog.sfcore.security.SFRMIClassLoaderSpi.loadClass(SFRMIClassLoaderSpi.java:90)
at java.rmi.server.RMIClassLoader.loadClass(RMIClassLoader.java:247)
at sun.rmi.server.MarshalInputStream.resolveClass(MarshalInputStream.java:197)
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1575)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1496)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1732)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
at sun.rmi.server.UnicastRef.unmarshalValue(UnicastRef.java:306)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:290)
at sun.rmi.transport.Transport$1.run(Transport.java:159)
at sun.rmi.transport.Transport.serviceCall(Transport.java:155)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)
at 
sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
at 
sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
at 
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
at java.lang.Thread.run(Thread.java:619)
at 
sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:255)
at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:233)
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:142)
{code}

Now, this could be my fault for using RMI, but I think a trigger for a lot of 
this trouble is line 959 of hadoop.ipc.Server, which invokes things as the user 
who made the remote call. And that somehow switching to a new user for the call 
is causing problems when running under a security manager, because the user 
making the call isnt trusted enough.

> IPC call can raise security exceptions when the remote node is running under 
> a security manager
> -----------------------------------------------------------------------------------------------
>
>                 Key: HADOOP-5731
>                 URL: https://issues.apache.org/jira/browse/HADOOP-5731
>             Project: Hadoop Core
>          Issue Type: Bug
>          Components: ipc
>    Affects Versions: 0.21.0
>            Reporter: Steve Loughran
>            Assignee: Steve Loughran
>            Priority: Minor
>
> I'm getting a security exception (java.lang.reflect.ReflectPermission 
> suppressAccessChecks) in RPC.Server.call(), when calling a datanode brought 
> up under a security manager, in method.setAccessible(true)

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to