From 61c91d1b7941b60657c2f6a5f299c8c84ef8208d Mon Sep 17 00:00:00 2001 From: Ray Krueger Date: Fri, 18 Jan 2008 16:09:31 +0000 Subject: [PATCH] SEC-633: Handle null credentials in AbstractAuthenticationToken.equals Also added a test for the OpenIDAuthenticationToken to reproduce the original error. --- .../AbstractAuthenticationToken.java | 28 +++++++++++-------- .../OpenIdAuthenticationTokenTests.java | 25 +++++++++++++++++ 2 files changed, 42 insertions(+), 11 deletions(-) create mode 100644 sandbox/openid/src/test/java/org/springframework/security/providers/openid/OpenIdAuthenticationTokenTests.java diff --git a/core/src/main/java/org/springframework/security/providers/AbstractAuthenticationToken.java b/core/src/main/java/org/springframework/security/providers/AbstractAuthenticationToken.java index c41c0fc0c9..2aff8afd5b 100644 --- a/core/src/main/java/org/springframework/security/providers/AbstractAuthenticationToken.java +++ b/core/src/main/java/org/springframework/security/providers/AbstractAuthenticationToken.java @@ -17,9 +17,7 @@ package org.springframework.security.providers; import org.springframework.security.Authentication; import org.springframework.security.GrantedAuthority; - import org.springframework.security.userdetails.UserDetails; - import org.springframework.util.Assert; @@ -47,23 +45,24 @@ public abstract class AbstractAuthenticationToken implements Authentication { * @deprecated in favour of the constructor which takes a * GrantedAuthority[] argument. */ - public AbstractAuthenticationToken() {} + public AbstractAuthenticationToken() { + } /** * Creates a token with the supplied array of authorities. * * @param authorities the list of GrantedAuthoritys for the - * principal represented by this authentication object. A - * null value indicates that no authorities have been - * granted (pursuant to the interface contract specified by {@link - * Authentication#getAuthorities()}null should only be - * presented if the principal has not been authenticated). + * principal represented by this authentication object. A + * null value indicates that no authorities have been + * granted (pursuant to the interface contract specified by {@link + * Authentication#getAuthorities()}null should only be + * presented if the principal has not been authenticated). */ public AbstractAuthenticationToken(GrantedAuthority[] authorities) { if (authorities != null) { for (int i = 0; i < authorities.length; i++) { Assert.notNull(authorities[i], - "Granted authority element " + i + " is null - GrantedAuthority[] cannot contain any null elements"); + "Granted authority element " + i + " is null - GrantedAuthority[] cannot contain any null elements"); } } @@ -104,9 +103,16 @@ public abstract class AbstractAuthenticationToken implements Authentication { return false; } + if ((this.getCredentials() == null) && (test.getCredentials() != null)) { + return false; + } + + if ((this.getCredentials() != null) && !this.getCredentials().equals(test.getCredentials())) { + return false; + } + return (this.getPrincipal().equals(test.getPrincipal()) - && this.getCredentials().equals(test.getCredentials()) - && (this.isAuthenticated() == test.isAuthenticated())); + && (this.isAuthenticated() == test.isAuthenticated())); } return false; diff --git a/sandbox/openid/src/test/java/org/springframework/security/providers/openid/OpenIdAuthenticationTokenTests.java b/sandbox/openid/src/test/java/org/springframework/security/providers/openid/OpenIdAuthenticationTokenTests.java new file mode 100644 index 0000000000..4ac050c5d2 --- /dev/null +++ b/sandbox/openid/src/test/java/org/springframework/security/providers/openid/OpenIdAuthenticationTokenTests.java @@ -0,0 +1,25 @@ +package org.springframework.security.providers.openid; + +import junit.framework.TestCase; + +/** + * DOCUMENT ME! + * + * @author Ray Krueger + */ +public class OpenIdAuthenticationTokenTests extends TestCase { + + public void test() throws Exception { + OpenIDAuthenticationToken token = newToken(); + assertEquals(token, newToken()); + } + + private OpenIDAuthenticationToken newToken() { + return new OpenIDAuthenticationToken( + OpenIDAuthenticationStatus.SUCCESS, + "http://raykrueger.blogspot.com/", + "what is this for anyway?"); + } + + +}