[MGNLDATA-47] JCRAdminTree throws NullPointerException when user has insufficient permissions on the types node Created: 24/Oct/08  Updated: 30/Jul/09  Resolved: 30/Jul/09

Status: Closed
Project: Magnolia Data Module (closed)
Component/s: None
Affects Version/s: 1.2.1
Fix Version/s: 1.3

Type: Improvement Priority: Major
Reporter: Edgar Vonk Assignee: Jan Haderka
Resolution: Obsolete Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Attachments: JPEG File screenshot-3.jpg    
Issue Links:
relation
is related to MGNLDATA-55 jcr browser displays duplicated items... Closed
Template:
Acceptance criteria:
Empty
Date of First Response:

 Description   

We have a dialog with an internal link field to the data module. This dialog is used by our editors which belong to our custom editors user role. We first had the problem that when these users try to create the link an error screen was shown (500 error) and the Tomcat localhost log showed:

Oct 23, 2008 2:37:23 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet default threw exception
java.lang.NullPointerException
	at info.magnolia.module.data.trees.JCRAdminTree$1.prepareTree(JCRAdminTree.java:87)
	at info.magnolia.module.admininterface.AdminTreeMVCHandler.renderTree(AdminTreeMVCHandler.java:787)
	at info.magnolia.module.admininterface.AdminTreeMVCHandler.renderHtml(AdminTreeMVCHandler.java:751)
	at info.magnolia.cms.servlets.MVCServlet.doPost(MVCServlet.java:125)
	at info.magnolia.cms.servlets.MVCServlet.doGet(MVCServlet.java:69)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at info.magnolia.cms.filters.ServletDispatchingFilter.doFilter(ServletDispatchingFilter.java:162)
	at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:71)
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:71)
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:73)
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:73)
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:73)
	at info.magnolia.cms.filters.CompositeFilter.doFilter(CompositeFilter.java:64)
	at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:71)
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:71)
	at info.magnolia.cms.filters.VirtualUriFilter.doFilter(VirtualUriFilter.java:115)
	at info.magnolia.cms.filters.OncePerRequestAbstractMgnlFilter.doFilter(OncePerRequestAbstractMgnlFilter.java:62)
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:71)
	at info.magnolia.cms.i18n.I18nContentSupportFilter.doFilter(I18nContentSupportFilter.java:75)
	at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:71)
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:71)
	at info.magnolia.module.cache.executor.Bypass.processCacheRequest(Bypass.java:57)
	at info.magnolia.module.cache.filter.CacheFilter.doFilter(CacheFilter.java:118)
	at info.magnolia.cms.filters.OncePerRequestAbstractMgnlFilter.doFilter(OncePerRequestAbstractMgnlFilter.java:62)
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:71)
	at info.magnolia.module.cache.filter.GZipFilter.doFilter(GZipFilter.java:84)
	at info.magnolia.cms.filters.OncePerRequestAbstractMgnlFilter.doFilter(OncePerRequestAbstractMgnlFilter.java:62)
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:71)
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:73)
	at info.magnolia.cms.filters.CosMultipartRequestFilter.doFilter(CosMultipartRequestFilter.java:84)
	at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:71)
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:71)
	at info.magnolia.cms.security.BaseSecurityFilter.doFilter(BaseSecurityFilter.java:61)
	at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:71)
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:71)
	at info.magnolia.cms.security.LogoutFilter.doFilter(LogoutFilter.java:81)
	at info.magnolia.cms.filters.OncePerRequestAbstractMgnlFilter.doFilter(OncePerRequestAbstractMgnlFilter.java:62)
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:71)
	at info.magnolia.cms.security.auth.login.LoginFilter.doFilter(LoginFilter.java:76)
	at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:71)
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:71)
	at info.magnolia.enterprise.registration.RegistrationFilter.doFilter(RegistrationFilter.java:50)
	at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:71)
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:71)
	at info.magnolia.cms.filters.ContentTypeFilter.doFilter(ContentTypeFilter.java:80)
	at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:71)
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:71)
	at info.magnolia.cms.filters.ContextFilter.doFilter(ContextFilter.java:72)
	at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:71)
	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:71)
	at info.magnolia.cms.filters.CompositeFilter.doFilter(CompositeFilter.java:64)
	at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:71)
	at info.magnolia.cms.filters.MgnlMainFilter.doFilter(MgnlMainFilter.java:97)
	at info.magnolia.cms.filters.MgnlMainFilter.doFilter(MgnlMainFilter.java:200)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
	at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:190)
	at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:283)
	at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:767)
	at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:697)
	at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:889)
	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:690)
	at java.lang.Thread.run(Thread.java:619)

The problem lies in this code in the JCRAdminTree class:

Content types = ContentUtil.getContent(ContentRepository.CONFIG, DataConsts.TYPES_NODE_PATH);
                for (Iterator iter = types.getChildren(ItemType.CONTENTNODE).iterator(); iter.hasNext();) {

When the user in question has no read access to the 'types' node the second line results in a nullpointer. It would be nice to log a more informative message when 'types' is null?

The solution was to provide read access to the types node in our editor role. See screenshot.



 Comments   
Comment by Jan Haderka [ 30/Jul/09 ]

Fixed by removing explicit type listing in MGNLDATA-55

Generated at Mon Feb 12 05:10:49 CET 2024 using Jira 9.4.2#940002-sha1:46d1a51de284217efdcb32434eab47a99af2938b.