[
https://issues.apache.org/jira/browse/JDO-555?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12613096#action_12613096
]
Craig Russell commented on JDO-555:
-----------------------------------
The nightly works for the access controls on JDOImplHelper all right.
There's a similar issue in the StateManager. The call replaceStateManager also
needs to be inside a doPrivileged block. Actually, any of the methods between
makePersistent and replaceStateManager can be called in doPrivileged and you'll
be ok. The closer to the checkPermission and the faster the security check is,
of course.
[java] NestedThrowablesStackTrace:
[java] java.security.AccessControlException: access denied
(javax.jdo.spi.JDOPermission setStateManager)
[java] at
java.security.AccessControlContext.checkPermission(AccessControlContext.java:264)
[java] at
java.security.AccessController.checkPermission(AccessController.java:427)
[java] at
java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
[java] at
org.apache.jdo.tck.pc.mylib.PCPoint.jdoReplaceStateManager(PCPoint.java)
[java] at
org.datanucleus.state.JDOStateManagerImpl.replaceStateManager(JDOStateManagerImpl.java:961)
[java] at
org.datanucleus.state.JDOStateManagerImpl.initialiseForPersistentNew(JDOStateManagerImpl.java:409)
[java] at
org.datanucleus.state.StateManagerFactory.newStateManagerForPersistentNew(StateManagerFactory.java:153)
[java] at
org.datanucleus.ObjectManagerImpl.persistObjectInternal(ObjectManagerImpl.java:1245)
[java] at
org.datanucleus.ObjectManagerImpl.persistObject(ObjectManagerImpl.java:1091)
[java] at
org.datanucleus.jdo.JDOPersistenceManager.jdoMakePersistent(JDOPersistenceManager.java:666)
[java] at
org.datanucleus.jdo.JDOPersistenceManager.makePersistent(JDOPersistenceManager.java:691)
private void replaceStateManager(StateManager sm)
Here's a patch to try:
945 {
946 try
947 {
AccessController.doPrivileged(
new PrivilegedAction () {
public Object run () {
948 myPC.jdoReplaceStateManager(sm);
return null;
}
}
);
949 }
950 catch (SecurityException e)
951 {
952 throw new JDOFatalUserException(LOCALISER.msg("026000"), e);
953 }
954 }
955
> All calls to Class.getMethod and Method.invoke (among others) need to be
> invoked inside a doPrivileged block.
> -------------------------------------------------------------------------------------------------------------
>
> Key: JDO-555
> URL: https://issues.apache.org/jira/browse/JDO-555
> Project: JDO
> Issue Type: Bug
> Components: api2, api2-legacy
> Affects Versions: JDO 2 maintenance release 1
> Reporter: Matthew T. Adams
> Assignee: Andy Jefferson
> Fix For: JDO 2 maintenance release 2
>
> Attachments: jdo-555.patch, jdo-555.patch, jdo-555.patch
>
>
> Discovered in review of patch to JDO-545.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.