Author: rgodfrey
Date: Mon Feb 20 16:01:01 2012
New Revision: 1291330

URL: http://svn.apache.org/viewvc?rev=1291330&view=rev
Log:
QPID-1505 : PlainSaslServer throws and immediately catches and wraps Sasl 
Exception

Modified:
    
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/sasl/plain/PlainSaslServer.java
    
qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/security/auth/sasl/SaslServerTestCase.java

Modified: 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/sasl/plain/PlainSaslServer.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/sasl/plain/PlainSaslServer.java?rev=1291330&r1=1291329&r2=1291330&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/sasl/plain/PlainSaslServer.java
 (original)
+++ 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/security/auth/sasl/plain/PlainSaslServer.java
 Mon Feb 20 16:01:01 2012
@@ -51,56 +51,65 @@ public class PlainSaslServer implements 
 
     public byte[] evaluateResponse(byte[] response) throws SaslException
     {
-        try
+        int authzidNullPosition = findNullPosition(response, 0);
+        if (authzidNullPosition < 0)
         {
-            int authzidNullPosition = findNullPosition(response, 0);
-            if (authzidNullPosition < 0)
-            {
-                throw new SaslException("Invalid PLAIN encoding, authzid null 
terminator not found");
-            }
-            int authcidNullPosition = findNullPosition(response, 
authzidNullPosition + 1);
-            if (authcidNullPosition < 0)
-            {
-                throw new SaslException("Invalid PLAIN encoding, authcid null 
terminator not found");
-            }
+            throw new SaslException("Invalid PLAIN encoding, authzid null 
terminator not found");
+        }
+        int authcidNullPosition = findNullPosition(response, 
authzidNullPosition + 1);
+        if (authcidNullPosition < 0)
+        {
+            throw new SaslException("Invalid PLAIN encoding, authcid null 
terminator not found");
+        }
+
+        PlainPasswordCallback passwordCb;
+        AuthorizeCallback authzCb;
 
+        try
+        {
             // we do not currently support authcid in any meaningful way
             String authzid = new String(response, authzidNullPosition + 1, 
authcidNullPosition - authzidNullPosition - 1, "utf8");
 
             // TODO: should not get pwd as a String but as a char array...
             int passwordLen = response.length - authcidNullPosition - 1;
             String pwd = new String(response, authcidNullPosition + 1, 
passwordLen, "utf8");
-            
+
             // we do not care about the prompt but it throws if null
             NameCallback nameCb = new NameCallback("prompt", authzid);
-            PlainPasswordCallback passwordCb = new 
PlainPasswordCallback("prompt", false, pwd);
-            AuthorizeCallback authzCb = new AuthorizeCallback(authzid, 
authzid);
+            passwordCb = new PlainPasswordCallback("prompt", false, pwd);
+            authzCb = new AuthorizeCallback(authzid, authzid);
 
             Callback[] callbacks = new Callback[]{nameCb, passwordCb, authzCb};
             _cbh.handle(callbacks);
 
-            if (passwordCb.isAuthenticated())
-            {
-                _complete = true;
-            }
-            if (authzCb.isAuthorized() && _complete)
-            {
-                _authorizationId = authzCb.getAuthenticationID();
-                return null;
-            }
-            else
-            {
-                throw new SaslException("Authentication failed");
-            }
         }
         catch (IOException e)
         {
+            if(e instanceof SaslException)
+            {
+                throw (SaslException) e;
+            }
             throw new SaslException("Error processing data: " + e, e);
         }
         catch (UnsupportedCallbackException e)
         {
             throw new SaslException("Unable to obtain data from callback 
handler: " + e, e);
         }
+
+        if (passwordCb.isAuthenticated())
+        {
+            _complete = true;
+        }
+
+        if (authzCb.isAuthorized() && _complete)
+        {
+            _authorizationId = authzCb.getAuthenticationID();
+            return null;
+        }
+        else
+        {
+            throw new SaslException("Authentication failed");
+        }
     }
 
 

Modified: 
qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/security/auth/sasl/SaslServerTestCase.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/security/auth/sasl/SaslServerTestCase.java?rev=1291330&r1=1291329&r2=1291330&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/security/auth/sasl/SaslServerTestCase.java
 (original)
+++ 
qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/security/auth/sasl/SaslServerTestCase.java
 Mon Feb 20 16:01:01 2012
@@ -54,7 +54,7 @@ public abstract class SaslServerTestCase
         }
         catch (SaslException e)
         {
-            assertEquals("Authentication failed", e.getCause().getMessage());
+            assertTrue(e.getMessage().contains("Authentication failed"));
             exceptionCaught = true;
         }
         if (!exceptionCaught)



---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:commits-subscr...@qpid.apache.org

Reply via email to