Misagh Moayyed created SYNCOPE-1867: ---------------------------------------
Summary: Prevent NPE when fetching realm entitlements to enforce authorization Key: SYNCOPE-1867 URL: https://issues.apache.org/jira/browse/SYNCOPE-1867 Project: Syncope Issue Type: Bug Components: console, core Affects Versions: 4.0.0-M0, 3.0.10 Reporter: Misagh Moayyed Assignee: Misagh Moayyed Fix For: 3.0.11, 4.0.0 To reproduce: # Log in to Syncope console with a user that does not have the entitlement, `IdRepoEntitlement.REALM_SEARCH` # On the dashboard, attempt to browse to the list of users in the realm # See this error in the logs: {code:java} java.lang.NullPointerException: Cannot invoke "java.util.Set.stream()" because the return value of "java.util.Map.get(Object)" is null at org.apache.syncope.core.logic.RealmLogic.lambda$search$2(RealmLogic.java:135) ~[syncope-core-idrepo-logic-4.0.0-SNAPSHOT.jar:4.0.0-SNAPSHOT] at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) ~[?:?] at java.base/java.util.Iterator.forEachRemaining(Iterator.java:133) ~[?:?] at java.base/java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1939) ~[?:?] at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) ~[?:?] at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) ~[?:?] at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:575) ~[?:?] at java.base/java.util.stream.AbstractPipeline.evaluateToArrayNode(AbstractPipeline.java:260) ~[?:?] at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:616) ~[?:?] at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:622) ~[?:?] at java.base/java.util.stream.ReferencePipeline.toList(ReferencePipeline.java:627) ~[?:?] at org.apache.syncope.core.logic.RealmLogic.search(RealmLogic.java:138) ~[syncope-core-idrepo-logic-4.0.0-SNAPSHOT.jar:4.0.0-SNAPSHOT] at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[?:?] at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[?:?] at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:359) ~[spring-aop-6.2.3.jar:6.2.3] at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoi {code} The realm search functionality in `RealmLogic` is attempting to find the entitlement before executing the search. When not found, the result as null will present the error. This is the affected line: {code:java} AuthContextUtils.getAuthorizations().get(IdRepoEntitlement.REALM_SEARCH).stream(). {code} To fix, update the line to use a default empty set when the entitlement is not found: {code:java} AuthContextUtils.getAuthorizations().getOrDefault(IdRepoEntitlement.REALM_SEARCH, Set.of()); {code} Then, examine other Logic components to find similar matches and instances and fix, if any. -- This message was sent by Atlassian Jira (v8.20.10#820010)