[ 
https://issues.apache.org/jira/browse/DERBY-6717?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Knut Anders Hatlen updated DERBY-6717:
--------------------------------------

    Attachment: d6717-1a.diff

It turns out returning null from newPermissionCollection() isn't a complete 
solution. It does seem to fix the problem seen in DERBY-6648, but in some other 
cases it works in a suboptimal way.

For example:

{code}
Permissions perms = new Permissions();
perms.add(new SystemPermission("engine", "monitor"));
perms.add(new SystemPermission("engine", "shutdown"));
{code}

Given this collection, one would expect {{perms.implies(new 
SystemPermission("engine", "monitor,shutdown"))}} to return {{true}}. However, 
it returns {{false}} because none of the individual permissions implies 
SystemPermission("engine", "monitor,shutdown"). A custom PermissionCollection 
class seems to be needed to handle this case correctly.

The attached patch [^d6717-1a.diff] adds a custom PermissionCollection 
implementation, and returns an instance of it from 
SystemPermission.newPermissionCollection(). It also adds unit tests to verify 
that it works correctly, including negative test cases that verify that 
collections read from a corrupted serialization stream cannot end up with 
illegal permissions.

I'm running the full regression test suite on the patch.

> Policies with multiple SystemPermissions are not handled well
> -------------------------------------------------------------
>
>                 Key: DERBY-6717
>                 URL: https://issues.apache.org/jira/browse/DERBY-6717
>             Project: Derby
>          Issue Type: Bug
>          Components: Services
>    Affects Versions: 10.11.1.1
>            Reporter: Knut Anders Hatlen
>            Assignee: Knut Anders Hatlen
>         Attachments: d6717-1a.diff
>
>
> Rick noted in DERBY-6648 that if you wanted to grant both 
> SystemPermission("engine", "monitor") and SystemPermission("engine", 
> "usederbyinternals") to a code base, the following would work:
> permission org.apache.derby.security.SystemPermission "engine", 
> "monitor,usederbyinternals";
> However, the following does not work:
> permission org.apache.derby.security.SystemPermission "engine", 
> "usederbyinternals";
> permission org.apache.derby.security.SystemPermission "engine", "monitor";



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to