Angela Schreiber created SLING-9970:
---------------------------------------

             Summary: SystemUser.getPath doesn't reflect the repository path
                 Key: SLING-9970
                 URL: https://issues.apache.org/jira/browse/SLING-9970
             Project: Sling
          Issue Type: Bug
          Components: Content-Package to Feature Model Converter
            Reporter: Angela Schreiber


I tried to find out why {{AccessControlEntry}} is constructed with 2 different 
{{RepoPath}}s one reflecting the path as obtained from the parser and one 
containing the path converted to 'repository path' using 
{{PlatformNameFormat.getRepositoryPath(resourcePath)}}.

from what i see the 'repository' path contained in the entry is later used to 
create the hierarchy down to access controlled nodes that hold the 
resource-based access control policy with the entries.

but looking at the usages of the 'path' field i found that it is only used in 
https://github.com/apache/sling-org-apache-sling-feature-cpconverter/blob/master/src/main/java/org/apache/sling/feature/cpconverter/accesscontrol/DefaultAclManager.java#L152
 (see also SLING-9953)

{code}
 // clean the unneeded ACLs, see SLING-8561
        if (authorizations != null) {
            Iterator<AccessControlEntry> authorizationsIterator = 
authorizations.iterator();
            while (authorizationsIterator.hasNext()) {
                AccessControlEntry acl = authorizationsIterator.next();

                if (acl.getPath().startsWith(systemUser.getPath())) {
                    authorizationsIterator.remove();
                }
            }
        }
{code}

this finding lead me to the conclusion that the {{SystemUser}} object is in 
fact created with a path that doesn't actually represent the JCR path as found 
in the repository.

so, all usages of {{SystemUser.getPath}} used to create the system user will 
potentially use the 'wrong' path. for example:

https://github.com/apache/sling-org-apache-sling-feature-cpconverter/blob/master/src/main/java/org/apache/sling/feature/cpconverter/accesscontrol/DefaultAclManager.java#L105

{code}
     // TODO does it harm?!?
     addSystemUserPath(formatter, systemUser.getPath());
{code}

which the issues the following repo-init statement

{code}
formatter.format("create path (rep:AuthorizableFolder) %s%n", path);
{code}

and

https://github.com/apache/sling-org-apache-sling-feature-cpconverter/blob/master/src/main/java/org/apache/sling/feature/cpconverter/accesscontrol/DefaultAclManager.java#L109

{code}
formatter.format("create service user %s with path %s%n", systemUser.getId(), 
systemUser.getPath());
{code}

upon a quick (but maybe incomplete) search I didn't find any usage of 
{{SystemUser.getPath()}} that would require it to reflect the path as extracted 
from the content package.... if that was true, the method should be renamed to 
'getRepositoryPath' and should return the converted  path (see above).

Having this addressed would IMO subsequently allow to drop the duplicated path 
argument from the {{AccessControlEntry}} and drop the {{getPath}} method 
altogether. which anyway seems a bit confusing to have. let me know if i should 
create a separate issue for this follow up clean up.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to