rwaldhoff    01/08/08 09:51:05

  Modified:    httpclient/src/java/org/apache/commons/httpclient
                        Authenticator.java
               httpclient/src/test/org/apache/commons/httpclient
                        TestAuthenticator.java
  Log:
  Oops, that last one wasn't quite right.
  Basic authentication realms are passed as realm="<realm-name>", not just "realm".
  That's what I get for trying it from memory (and what we get for not having real 
authentication tests).
  
  Revision  Changes    Path
  1.4       +28 -21    
jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/Authenticator.java
  
  Index: Authenticator.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/Authenticator.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- Authenticator.java        2001/08/08 15:29:05     1.3
  +++ Authenticator.java        2001/08/08 16:51:05     1.4
  @@ -1,7 +1,7 @@
   /*
  - * $Header: 
/home/cvs/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/Authenticator.java,v
 1.3 2001/08/08 15:29:05 rwaldhoff Exp $
  - * $Revision: 1.3 $
  - * $Date: 2001/08/08 15:29:05 $
  + * $Header: 
/home/cvs/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/Authenticator.java,v
 1.4 2001/08/08 16:51:05 rwaldhoff Exp $
  + * $Revision: 1.4 $
  + * $Date: 2001/08/08 16:51:05 $
    *
    * ====================================================================
    *
  @@ -113,14 +113,14 @@
           if (space < 0)
               return null;
   
  -        String challengeName = challenge.substring(0, space);
  +        String authScheme = challenge.substring(0, space);
   
  -        if ("basic".equalsIgnoreCase(challengeName)) {
  +        if ("basic".equalsIgnoreCase(authScheme)) {
               return basic(state, credentials);
  -        } else if ("digest".equalsIgnoreCase(challengeName)) {
  +        } else if ("digest".equalsIgnoreCase(authScheme)) {
               throw new UnsupportedOperationException("Digest authentication is not 
supported.");
           } else {
  -            throw new UnsupportedOperationException("Authentication type \"" + 
challengeName + "\" is not recognized.");
  +            throw new UnsupportedOperationException("Authentication type \"" + 
authScheme + "\" is not recognized.");
           }
       }
   
  @@ -132,26 +132,33 @@
               return null;
           }
   
  -        StringTokenizer toker = new StringTokenizer(challenge);
  -        String challengeName = null;
  -        try {
  -            challengeName = toker.nextToken();
  -        } catch(NoSuchElementException e) {
  -            return null;
  +        int space = challenge.indexOf(' ');
  +        if(space < 0) {
  +            throw new HttpException("Unable to parse authentication challenge \"" + 
challenge + "\", expected space");
           }
  +        String authScheme = challenge.substring(0, space);
   
  -        if ("basic".equalsIgnoreCase(challengeName)) {
  -            String realm = null;
  -            try {
  -                realm = toker.nextToken();
  -            } catch(NoSuchElementException e) {
  -                throw new HttpException("Expected realm name in basic 
authentication challenge.");
  +        if ("basic".equalsIgnoreCase(authScheme)) {
  +            // parse the realm from the authentication challenge
  +            // XXX FIX ME XXX
  +            // Note that this won't work if there is more than one
  +            // realm within the challenge
  +            // We could probably make it a bit more flexiable in
  +            // parsing as well.
  +            if(challenge.length() < space + 1) {
  +                throw new HttpException("Unable to parse authentication challenge 
\"" + challenge + "\", expected realm");
               }
  +            String realmstr = challenge.substring(space+1,challenge.length());
  +            realmstr.trim();
  +            log.debug("Parsing realm from \"" + realmstr + "\".");
  +            String realm = 
realmstr.substring("realm=\"".length(),realmstr.length()-1);
  +            log.debug("Parsed realm \"" + realm + "\" from challenge \"" + 
challenge + "\".");
  +
               return basic(realm,state);
  -        } else if ("digest".equalsIgnoreCase(challengeName)) {
  +        } else if ("digest".equalsIgnoreCase(authScheme)) {
               throw new UnsupportedOperationException("Digest authentication is not 
supported.");
           } else {
  -            throw new UnsupportedOperationException("Authentication type \"" + 
challengeName + "\" is not recognized.");
  +            throw new UnsupportedOperationException("Authentication type \"" + 
authScheme + "\" is not recognized.");
           }
       }
   
  
  
  
  1.3       +9 -9      
jakarta-commons/httpclient/src/test/org/apache/commons/httpclient/TestAuthenticator.java
  
  Index: TestAuthenticator.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons/httpclient/src/test/org/apache/commons/httpclient/TestAuthenticator.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- TestAuthenticator.java    2001/08/08 15:29:05     1.2
  +++ TestAuthenticator.java    2001/08/08 16:51:05     1.3
  @@ -1,7 +1,7 @@
   /*
  - * $Header: 
/home/cvs/jakarta-commons/httpclient/src/test/org/apache/commons/httpclient/TestAuthenticator.java,v
 1.2 2001/08/08 15:29:05 rwaldhoff Exp $
  - * $Revision: 1.2 $
  - * $Date: 2001/08/08 15:29:05 $
  + * $Header: 
/home/cvs/jakarta-commons/httpclient/src/test/org/apache/commons/httpclient/TestAuthenticator.java,v
 1.3 2001/08/08 16:51:05 rwaldhoff Exp $
  + * $Revision: 1.3 $
  + * $Date: 2001/08/08 16:51:05 $
    * ====================================================================
    * Copyright (C) The Apache Software Foundation. All rights reserved.
    *
  @@ -18,7 +18,7 @@
    * Unit tests for {@link Authenticator}.
    *
    * @author Rodney Waldhoff
  - * @version $Id: TestAuthenticator.java,v 1.2 2001/08/08 15:29:05 rwaldhoff Exp $
  + * @version $Id: TestAuthenticator.java,v 1.3 2001/08/08 16:51:05 rwaldhoff Exp $
    */
   public class TestAuthenticator extends TestCase {
   
  @@ -43,7 +43,7 @@
   
       public void testBasicAuthenticationWithNoCreds() {
           State state = new State();
  -        state.setAuthenticateToken("Basic realm1");
  +        state.setAuthenticateToken("Basic realm=\"realm1\"");
           try {
               Authenticator.challengeResponse(state);
               fail("Should have thrown HttpException");
  @@ -79,7 +79,7 @@
   
       public void testBasicAuthenticationWithDefaultCreds() throws Exception {
           State state = new State();
  -        state.setAuthenticateToken("Basic realm1");
  +        state.setAuthenticateToken("Basic realm=\"realm1\"");
           state.setDefaultCredentials(new Credentials("username","password"));
           String response = Authenticator.challengeResponse(state);
           String expected = "Basic " + new 
String(Base64.encode("username:password".getBytes()));
  @@ -88,7 +88,7 @@
   
       public void testBasicAuthentication() throws Exception {
           State state = new State();
  -        state.setAuthenticateToken("Basic realm1");
  +        state.setAuthenticateToken("Basic realm=\"realm1\"");
           state.setCredentials("realm1",new Credentials("username","password"));
           String response = Authenticator.challengeResponse(state);
           String expected = "Basic " + new 
String(Base64.encode("username:password".getBytes()));
  @@ -100,13 +100,13 @@
           state.setCredentials("realm1",new Credentials("username","password"));
           state.setCredentials("realm2",new Credentials("uname2","password2"));
           {
  -            state.setAuthenticateToken("Basic realm1");
  +            state.setAuthenticateToken("Basic realm=\"realm1\"");
               String response = Authenticator.challengeResponse(state);
               String expected = "Basic " + new 
String(Base64.encode("username:password".getBytes()));
               assertEquals(expected,response);
           }
           {
  -            state.setAuthenticateToken("Basic realm2");
  +            state.setAuthenticateToken("Basic realm=\"realm2\"");
               String response = Authenticator.challengeResponse(state);
               String expected = "Basic " + new 
String(Base64.encode("uname2:password2".getBytes()));
               assertEquals(expected,response);
  
  
  

Reply via email to