Uploaded image for project: 'aaa'
  1. aaa
  2. AAA-224

NullpointerException for MDSALDynamicAuthorizationFilter

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Unresolved
    • Icon: Medium Medium
    • None
    • 0.14.7
    • General
    • we are currently running a phosphorus-SR1. But the code is the same in master branch

      Scenario:

      we have set the aaa-app-config.xml with the following rule:

      <urls>
              <pair-key>/rests/**</pair-key>
              <pair-value>authcBearer, dynamicAuthorization</pair-value>
      </urls> 

      and put into the /rests/data/aaa:http-authorization

      {
          "aaa:http-authorization": {
              "policies": {
                  "policies": [
                      {
                          "resource": "/rests/**/network-topology:network-topology/topology=topology-netconf/node=CommScope-DAS-01/yang-ext:mount/**",
                          "permissions": [
                              {
                                  "role": "microwave-supervision",
                                  "actions": [
                                      "get"
                                  ]
                              },
                              {
                                  "role": "microwave-provision",
                                  "actions": [
                                      "post",
                                      "get",
                                      "patch",
                                      "put",
                                      "delete"
                                  ]
                              },
                              {
                                  "role": "microwave-administration",
                                  "actions": [
                                      "post",
                                      "get",
                                      "patch",
                                      "put",
                                      "delete"
                                  ]
                              },
                              {
                                  "role": "supervision",
                                  "actions": [
                                      "get"
                                  ]
                              },
                              {
                                  "role": "provision",
                                  "actions": [
                                      "post",
                                      "get",
                                      "patch",
                                      "put",
                                      "delete"
                                  ]
                              },
                              {
                                  "role": "administration",
                                  "actions": [
                                      "post",
                                      "get",
                                      "patch",
                                      "put",
                                      "delete"
                                  ]
                              }
                          ],
                          "index": 0
                      },
                      {
                          "resource": "/rests/**/network-topology:network-topology/topology=topology-netconf/node=OPENROADM-01/yang-ext:mount/**",
                          "permissions": [
                              {
                                  "role": "optical-supervision",
                                  "actions": [
                                      "get"
                                  ]
                              },
                              {
                                  "role": "optical-provision",
                                  "actions": [
                                      "post",
                                      "get",
                                      "patch",
                                      "put",
                                      "delete"
                                  ]
                              },
                              {
                                  "role": "optical-administration",
                                  "actions": [
                                      "post",
                                      "get",
                                      "patch",
                                      "put",
                                      "delete"
                                  ]
                              },
                              {
                                  "role": "supervision",
                                  "actions": [
                                      "get"
                                  ]
                              },
                              {
                                  "role": "provision",
                                  "actions": [
                                      "post",
                                      "get",
                                      "patch",
                                      "put",
                                      "delete"
                                  ]
                              },
                              {
                                  "role": "administration",
                                  "actions": [
                                      "post",
                                      "get",
                                      "patch",
                                      "put",
                                      "delete"
                                  ]
                              }
                          ],
                          "index": 1
                      },
                      {
                          "resource": "/rests/**/network-topology:network-topology/topology=topology-netconf/node=O-RAN-RU-FH-0/yang-ext:mount/**",
                          "permissions": [
                              {
                                  "role": "supervision",
                                  "actions": [
                                      "get"
                                  ]
                              },
                              {
                                  "role": "provision",
                                  "actions": [
                                      "post",
                                      "get",
                                      "patch",
                                      "put",
                                      "delete"
                                  ]
                              },
                              {
                                  "role": "administration",
                                  "actions": [
                                      "post",
                                      "get",
                                      "patch",
                                      "put",
                                      "delete"
                                  ]
                              }
                          ],
                          "index": 2
                      },
                      {
                          "resource": "/rests/**/network-topology:network-topology/topology=topology-netconf/node=DU-airspan-1-1/yang-ext:mount/**",
                          "permissions": [
                              {
                                  "role": "supervision",
                                  "actions": [
                                      "get"
                                  ]
                              },
                              {
                                  "role": "provision",
                                  "actions": [
                                      "post",
                                      "get",
                                      "patch",
                                      "put",
                                      "delete"
                                  ]
                              },
                              {
                                  "role": "administration",
                                  "actions": [
                                      "post",
                                      "get",
                                      "patch",
                                      "put",
                                      "delete"
                                  ]
                              }
                          ],
                          "index": 3
                      },
                      {
                          "resource": "/rests/**/network-topology:network-topology/topology=topology-netconf/node=**/yang-ext:mount/**",
                          "index": 4
                      }
                  ]
              }
          }
      }

      The thing why we put the last rule inside of this is the default return value in the isAccessAllowed function. So to have this to return false we have to have a rule without any permissions which catches all other node-id access which we have not defined.

      So solution is quite simple. Just the list getter has to be ckecked before iterating.

      Stacktrace:

      2022-06-10T07:48:49,280 | WARN  | qtp652423308-625 | HttpChannel                      | 162 - org.eclipse.jetty.util - 9.4.43.v20210629 | /rests/data/network-topology:network-topology/topology=topology-netconf/node=test/yang-ext:mount/ietf-yang-library:yang-library
      javax.servlet.ServletException: javax.servlet.ServletException: java.lang.NullPointerException
          at org.ops4j.pax.web.service.jetty.internal.JettyServerHandlerCollection.handle(JettyServerHandlerCollection.java:90) ~[?:?]
          at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) ~[bundleFile:9.4.43.v20210629]
          at org.eclipse.jetty.server.Server.handle(Server.java:516) ~[bundleFile:9.4.43.v20210629]
          at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:388) ~[bundleFile:9.4.43.v20210629]
          at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:633) ~[bundleFile:9.4.43.v20210629]
          at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:380) [bundleFile:9.4.43.v20210629]
          at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277) [bundleFile:9.4.43.v20210629]
          at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311) [bundleFile:9.4.43.v20210629]
          at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105) [bundleFile:9.4.43.v20210629]
          at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104) [bundleFile:9.4.43.v20210629]
          at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338) [bundleFile:9.4.43.v20210629]
          at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315) [bundleFile:9.4.43.v20210629]
          at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173) [bundleFile:9.4.43.v20210629]
          at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131) [bundleFile:9.4.43.v20210629]
          at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:386) [bundleFile:9.4.43.v20210629]
          at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883) [bundleFile:9.4.43.v20210629]
          at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034) [bundleFile:9.4.43.v20210629]
          at java.lang.Thread.run(Unknown Source) [?:?]
      Caused by: javax.servlet.ServletException: java.lang.NullPointerException
          at org.apache.shiro.web.servlet.AdviceFilter.cleanup(AdviceFilter.java:196) ~[?:?]
          at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:148) ~[?:?]
          at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) ~[?:?]
          at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66) ~[?:?]
          at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108) ~[?:?]
          at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137) ~[?:?]
          at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) ~[?:?]
          at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66) ~[?:?]
          at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108) ~[?:?]
          at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137) ~[?:?]
          at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) ~[?:?]
          at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66) ~[?:?]
          at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:450) ~[?:?]
          at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365) ~[?:?]
          at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90) ~[?:?]
          at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83) ~[?:?]
          at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387) ~[?:?]
          at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362) ~[?:?]
          at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) ~[?:?]
          at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) ~[?:?]
          at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) ~[?:?]
          at org.eclipse.jetty.websocket.server.WebSocketUpgradeFilter.doFilter(WebSocketUpgradeFilter.java:228) ~[?:?]
          at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) ~[?:?]
          at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) ~[?:?]
          at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:548) ~[?:?]
          at org.ops4j.pax.web.service.jetty.internal.HttpServiceServletHandler.doHandle(HttpServiceServletHandler.java:71) ~[?:?]
          at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) ~[?:?]
          at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:602) ~[?:?]
          at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) ~[bundleFile:9.4.43.v20210629]
          at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235) ~[?:?]
          at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624) ~[?:?]
          at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233) ~[?:?]
          at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1434) ~[?:?]
          at org.ops4j.pax.web.service.jetty.internal.HttpServiceContext.doHandle(HttpServiceContext.java:294) ~[?:?]
          at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188) ~[?:?]
          at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:501) ~[?:?]
          at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594) ~[?:?]
          at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186) ~[?:?]
          at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1349) ~[?:?]
          at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) ~[?:?]
          at org.ops4j.pax.web.service.jetty.internal.JettyServerHandlerCollection.handle(JettyServerHandlerCollection.java:82) ~[?:?]
          ... 17 more
      Caused by: java.lang.NullPointerException
          at org.opendaylight.aaa.shiro.realm.MDSALDynamicAuthorizationFilter.isAccessAllowed(MDSALDynamicAuthorizationFilter.java:140) ~[?:?]
          at org.apache.shiro.web.filter.AccessControlFilter.onPreHandle(AccessControlFilter.java:162) ~[?:?]
          at org.apache.shiro.web.filter.PathMatchingFilter.isFilterChainContinued(PathMatchingFilter.java:223) ~[?:?]
          at org.apache.shiro.web.filter.PathMatchingFilter.preHandle(PathMatchingFilter.java:198) ~[?:?]
          at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:131) ~[?:?]
          at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) ~[?:?]
          at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66) ~[?:?]
          at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108) ~[?:?]
          at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137) ~[?:?]
          at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) ~[?:?]
          at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66) ~[?:?]
          at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108) ~[?:?]
          at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137) ~[?:?]
          at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) ~[?:?]
          at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66) ~[?:?]
          at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:450) ~[?:?]
          at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365) ~[?:?]
          at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90) ~[?:?]
          at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83) ~[?:?]
          at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387) ~[?:?]
          at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362) ~[?:?]
          at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) ~[?:?]
          at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) ~[?:?]
          at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) ~[?:?]
          at org.eclipse.jetty.websocket.server.WebSocketUpgradeFilter.doFilter(WebSocketUpgradeFilter.java:228) ~[?:?]
          at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) ~[?:?]
          at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1601) ~[?:?]
          at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:548) ~[?:?]
          at org.ops4j.pax.web.service.jetty.internal.HttpServiceServletHandler.doHandle(HttpServiceServletHandler.java:71) ~[?:?]
          at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) ~[?:?]
          at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:602) ~[?:?]
          at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) ~[bundleFile:9.4.43.v20210629]
          at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235) ~[?:?]
          at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624) ~[?:?]
          at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233) ~[?:?]
          at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1434) ~[?:?]
          at org.ops4j.pax.web.service.jetty.internal.HttpServiceContext.doHandle(HttpServiceContext.java:294) ~[?:?]
          at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188) ~[?:?]
          at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:501) ~[?:?]
          at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594) ~[?:?]
          at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186) ~[?:?]
          at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1349) ~[?:?]
          at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) ~[?:?]
          at org.ops4j.pax.web.service.jetty.internal.JettyServerHandlerCollection.handle(JettyServerHandlerCollection.java:82) ~[?:?]
          ... 17 more 

            Unassigned Unassigned
            metaljackL Michael Dürre
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated: