[ http://issues.apache.org/jira/browse/DERBY-1758?page=all ]

A B updated DERBY-1758:
-----------------------

    Attachment: d1758_newSecMgr_doNotCommit.patch

While trying to add lang/XMLBindingTest.java to a JUnit suite so that it can 
run as part of suites.All, I ran into a problem where the test setup fails 
because the JAXP parser does not have permissions to read the DTD file that is 
used for inserting test data.

Note that this isn't a problem when running the test alone because when it runs 
standalone, the "setup" work happens *before* the security manager is 
installed.  When the test is run as part of a suite, though, a security manager 
is installed for any tests that run prior to XMLBindingTest, and that security 
manager is not "uninstalled" after those tests.  Then, since the lingering 
security manager does not give the necessary permissions to JAXP, the binding 
test fails during setup.

This security problem was also an issue for the old binding test, 
lang/xmlBinding.java.  In that case the problem was solved by creating a policy 
file with specific permissions to allow "everything" to read the DTD file.  
That permission was then automatically "merged" into the security manager's 
policy as part of the old harness setup, thereby allowing the test to run 
without error.

So I made some changes to the JUnit security manager setup to allow a test to 
append permissions to a policy file and to then install a security manager with 
those permissions.  However, when I try to run XMLBindingTest.java as part of a 
JUnit suite, the new permissions are never picked up.

I did some tracing in the JUnit setup classes and I can verify that the code to 
"uninstall" a security manager and install a new manager that uses the modified 
policy is in fact being executed.  However, it looks like the new 
SecurityManager() is never actually being enforced.  Or put another way, it 
looks like the security policy that takes effect is always the *first* one to 
be assigned in the JVM; subsequent attempts to set the System security manager 
to non-null values will *re-enable* the security manager, but will not alter 
its policy.

Note, though, that attempts to UN-install the security manager (by calling 
System.setSecurityManager(null)) *do* work.  But when we try try to call 
setSecurityManager() with a non-null value (namely, "new SecurityManager()"), 
the policy that it implements is always the first policy that was successfully 
applied for the JVM; if the "java.security.policy" property is pointing to some 
other (new) policy file, it is ignored.

At least, this is what I've come to conclude based on my understanding of the 
security manager setup code.

In order to get the binding test to work as part of a suite I can just 
uninstall the security manager altogether--that works fine. However, that seems 
a bit like cheating to me.  And to be honest, I think that we *should* be able 
to change the security manager to use a new policy--or at least, that has been 
my impression based on the code comments.

So my question, then, is this: does anyone know if I have to do something 
special to get the test to install a Security Manager that implements a 
different policy file than one that has previously been installed?  I've spent 
a lot of time on this but have come up empty-handed.

I'm attaching a patch, d1758_newSecMgr_doNotCommit.patch with the test setup 
changes that I've made.  If there are any problems (glaring or otherwise) with 
my approach that might be leading to this inability to alter security policy, I 
would be grateful to anyone who could point them out...  

Note the patch includes all of the changes that I've made to add 
XMLBindingTest.java to a new  XML JUnit suite.  I'm hoping anyone who looks at 
it can just ignore the test-specific changes and focus on the security-related 
ones...

> Enable xmlSuite to run as part of derbyall for JVMs that embed the required 
> external jars.
> ------------------------------------------------------------------------------------------
>
>                 Key: DERBY-1758
>                 URL: http://issues.apache.org/jira/browse/DERBY-1758
>             Project: Derby
>          Issue Type: Task
>          Components: Test
>    Affects Versions: 10.2.1.6, 10.3.0.0, 10.2.2.0
>            Reporter: A B
>         Assigned To: A B
>         Attachments: d1758_followup_v1.patch, d1758_newJUnitTests_v1.patch, 
> d1758_newJUnitTests_v1.stat, d1758_newJUnitTests_v2.patch, 
> d1758_newSecMgr_doNotCommit.patch, d1758_newXBindTest_v1.patch, 
> d1758_remove_xgen_v1.patch, d1758_remove_xgen_v1.stat
>
>
> Due to the fact the XML support in Derby has external dependencies on Apache 
> Xalan and a JAXP parser (such as, but not limited to, Apache Xerces), the 
> tests for XML, which are all included in "xmlSuite", are not currently run as 
> part of derbyall.
> Changes for DERBY-688 (and DERBY-567 indirectly) have now made it so that 
> JVMs which have Apache Xalan and a JAXP parser embedded in them can run the 
> XML tests without requiring additional jars, assuming that the embedded 
> version of Xalan is at least the minimum version required by Derby (which is 
> currently 2.5).
> So given that, the xmlSuite should be enabled as part of derbyall for any 
> JVMs that are capable of running them.  Currently, this appears to mean only 
> ibm142 and ibm15.
> Per comments in DERBY-688, enabling the XML suite could include the following 
> tasks:
>   1. Enable the suite to run as part of derbyall but ONLY for JVMs that
>      embed the required Xalan/JAXP classes.
>   2. Resolve the following diff in lang/xmlBinding.java that occurs on
>      some platforms (ex. Linux):
>     < Inserted roughly 40k of data.
>     10 del
>     < Inserted roughly 40k of data.
>     10a9,10
>     > Inserted roughly 39k of data.
>     > Inserted roughly 37k of data.
>     21 del
>     < 1, [ roughly 40k ]
>     22 del
>     < 2, [ roughly 40k ]
>     22a21,22
>     > 1, [ roughly 39k ]
>     > 2, [ roughly 37k ]
>   3. Add new tests to verify Derby behavior when XML classes are
>     not present.
> Note that #3 may turn out to be its own Jira issue; the first two, however, 
> should both be addressed as part of this issue since the xmlSuite will not 
> run (and pass) on all platforms if either 1 or 2 is not addressed.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to