[
https://issues.apache.org/jira/browse/JCR-3120?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
angela resolved JCR-3120.
-------------------------
Resolution: Fixed
Fix Version/s: 2.4
i rearranged the code in UserManager impl in order to have the log output be
more
specific. in addition i increased the log level to warn and error respectively.
regarding throwing an exception: i decided not to do so for consistency with the
overall behavior of the user manager that is defined to return 'null' if no
valid
user/group can be retrieved and only throws an exception if an unexpected error
occurs (retrieving path from node or node type name fails).
> Change log level in UserManagerImpl#getAuthorizable(NodeImpl) and
> UserImporter#handlePropInfo
> ---------------------------------------------------------------------------------------------
>
> Key: JCR-3120
> URL: https://issues.apache.org/jira/browse/JCR-3120
> Project: Jackrabbit Content Repository
> Issue Type: Improvement
> Components: jackrabbit-core, security
> Affects Versions: 2.0, 2.1, 2.2, 2.3, 2.3.1
> Reporter: Miroslav Smiljanic
> Assignee: angela
> Priority: Minor
> Labels: jackrabbit-core,
> Fix For: 2.4
>
>
> This is current implementation:
> Authorizable getAuthorizable(NodeImpl n) throws RepositoryException {
> Authorizable authorz = null;
> if (n != null) {
> String path = n.getPath();
> if (n.isNodeType(NT_REP_USER) && Text.isDescendant(usersPath,
> path)) {
> authorz = createUser(n);
> } else if (n.isNodeType(NT_REP_GROUP) &&
> Text.isDescendant(groupsPath, path)) {
> authorz = createGroup(n);
> } else {
> /* else some other node type or outside of the valid
> user/group
> hierarchy -> return null. */
> log.debug("Unexpected user nodetype " +
> n.getPrimaryNodeType().getName());
> }
> } /* else no matching node -> return null */
> return authorz;
> }
> It seems that 'else' branch can be improved, at least by increasing log
> level. But I think, that best way is to throw exception.
> Current message can also be misleading, in case when user type is correct but
> check Text.isDescendant fails.
> Above method is called from within UserImporter#handlePropInfo
> ...
> Authorizable a = userManager.getAuthorizable(parent);
> if (a == null) {
> log.debug("Cannot handle protected PropInfo " + protectedPropInfo + ".
> Node " + parent + " doesn't represent a valid Authorizable.");
> return false;
> }
> ....
> Here again log level is debug. Because at this point we have return
> statement, property 'principalName' is not set, and if we try to save session
> following exception will be thrown:
> javax.jcr.nodetype.ConstraintViolationException: /home/public/users/b/bb2:
> mandatory property {internal}password does not exist
> at
> org.apache.jackrabbit.core.ItemSaveOperation.validateTransientItems(ItemSaveOperation.java:537)
> at
> org.apache.jackrabbit.core.ItemSaveOperation.perform(ItemSaveOperation.java:216)
> at
> org.apache.jackrabbit.core.session.SessionState.perform(SessionState.java:200)
> at org.apache.jackrabbit.core.ItemImpl.perform(ItemImpl.java:91)
> at org.apache.jackrabbit.core.ItemImpl.save(ItemImpl.java:329)
> ...
>
> So if the log level is not set to 'debug' it is not obvious why mentioned
> property is missing. Use case and root cause is that 'path'
> (/home/public/users/b/bb2) is not descendant of 'usersPath' (/home/users).
> Regards,
> Miroslav
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira