[java-identity-provider] branch main updated: IDP-1908 - IdP mishandles "empty" RequestedPrincipalContext
Scott Cantor
cantor.2 at osu.edu
Fri Feb 25 14:35:25 UTC 2022
This is an automated email from the git hooks/post-receive script.
scantor pushed a commit to branch main
in repository java-identity-provider.
View the commit online:
http://git.shibboleth.net/view/?p=java-identity-provider.git;a=commit;h=6a79a42aee6d7775b1f80c940fcbe7c9e5bd405c
The following commit(s) were added to refs/heads/main by this push:
new 6a79a42ae IDP-1908 - IdP mishandles "empty" RequestedPrincipalContext
6a79a42ae is described below
commit 6a79a42aee6d7775b1f80c940fcbe7c9e5bd405c
Author: Scott Cantor <cantor.2 at osu.edu>
AuthorDate: Fri Feb 25 09:35:18 2022 -0500
IDP-1908 - IdP mishandles "empty" RequestedPrincipalContext
https://shibboleth.atlassian.net/browse/IDP-1908
---
.../idp/authn/context/RequestedPrincipalContext.java | 9 ++++++---
.../shibboleth/idp/authn/impl/FinalizeAuthentication.java | 2 +-
.../idp/authn/impl/FinalizeAuthenticationTest.java | 13 ++++++++++++-
3 files changed, 19 insertions(+), 5 deletions(-)
diff --git a/idp-authn-api/src/main/java/net/shibboleth/idp/authn/context/RequestedPrincipalContext.java b/idp-authn-api/src/main/java/net/shibboleth/idp/authn/context/RequestedPrincipalContext.java
index f9c61587b..e256d1acb 100644
--- a/idp-authn-api/src/main/java/net/shibboleth/idp/authn/context/RequestedPrincipalContext.java
+++ b/idp-authn-api/src/main/java/net/shibboleth/idp/authn/context/RequestedPrincipalContext.java
@@ -112,7 +112,7 @@ public final class RequestedPrincipalContext extends BaseContext {
*
* @return comparison operator
*/
- @Nonnull @NotEmpty public String getOperator() {
+ @Nullable @NotEmpty public String getOperator() {
return operatorString;
}
@@ -183,8 +183,11 @@ public final class RequestedPrincipalContext extends BaseContext {
*/
@Nullable public PrincipalEvalPredicate getPredicate(@Nonnull final Principal principal) {
- final PrincipalEvalPredicateFactory factory = evalRegistry.lookup(principal.getClass(), operatorString);
- return factory != null ? factory.getPredicate(principal) : null;
+ if (operatorString != null) {
+ final PrincipalEvalPredicateFactory factory = evalRegistry.lookup(principal.getClass(), operatorString);
+ return factory != null ? factory.getPredicate(principal) : null;
+ }
+ return null;
}
/**
diff --git a/idp-authn-impl/src/main/java/net/shibboleth/idp/authn/impl/FinalizeAuthentication.java b/idp-authn-impl/src/main/java/net/shibboleth/idp/authn/impl/FinalizeAuthentication.java
index 96e1f9e31..89fc53388 100644
--- a/idp-authn-impl/src/main/java/net/shibboleth/idp/authn/impl/FinalizeAuthentication.java
+++ b/idp-authn-impl/src/main/java/net/shibboleth/idp/authn/impl/FinalizeAuthentication.java
@@ -144,7 +144,7 @@ public class FinalizeAuthentication extends AbstractAuthenticationAction {
// and the actual result produced may be a subset (and therefore could be an inadequate subset).
final RequestedPrincipalContext requestedPrincipalCtx =
authenticationContext.getSubcontext(RequestedPrincipalContext.class);
- if (requestedPrincipalCtx != null) {
+ if (requestedPrincipalCtx != null && requestedPrincipalCtx.getOperator() != null) {
// If a matching principal is set, re-verify it. Normally this will work.
final Principal match = requestedPrincipalCtx.getMatchingPrincipal();
diff --git a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/FinalizeAuthenticationTest.java b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/FinalizeAuthenticationTest.java
index 570d262d9..a715f36ea 100644
--- a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/FinalizeAuthenticationTest.java
+++ b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/FinalizeAuthenticationTest.java
@@ -146,13 +146,24 @@ public class FinalizeAuthenticationTest extends BaseAuthenticationContextTest {
authCtx.setAuthenticationResult(active);
prc.getSubcontext(SubjectCanonicalizationContext.class, true).setPrincipalName("foo");
- final Event event = action.execute(src);
+ Event event = action.execute(src);
ActionTestingSupport.assertProceedEvent(event);
SubjectContext sc = prc.getSubcontext(SubjectContext.class);
Assert.assertNotNull(sc);
Assert.assertEquals(sc.getPrincipalName(), "foo");
Assert.assertEquals(sc.getAuthenticationResults().size(), 1);
+
+ prc.removeSubcontext(SubjectContext.class);
+ authCtx.getSubcontext(RequestedPrincipalContext.class, true);
+
+ event = action.execute(src);
+
+ ActionTestingSupport.assertProceedEvent(event);
+ sc = prc.getSubcontext(SubjectContext.class);
+ Assert.assertNotNull(sc);
+ Assert.assertEquals(sc.getPrincipalName(), "foo");
+ Assert.assertEquals(sc.getAuthenticationResults().size(), 1);
}
@Test public void testMultipleActive() {
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the commits
mailing list