Author: markt
Date: Wed Mar 20 10:38:43 2013
New Revision: 1458738
URL: http://svn.apache.org/r1458738
Log:
Replace Tomcat's own base64 encoder with the one from the JRE.
Modified:
tomcat/trunk/java/org/apache/catalina/ant/AbstractCatalinaTask.java
tomcat/trunk/java/org/apache/catalina/authenticator/SpnegoAuthenticator.java
tomcat/trunk/java/org/apache/catalina/realm/JNDIRealm.java
tomcat/trunk/java/org/apache/catalina/util/Base64.java
tomcat/trunk/test/org/apache/catalina/authenticator/TestNonLoginAndBasicAuthenticator.java
tomcat/trunk/test/org/apache/catalina/authenticator/TestSSOnonLoginAndBasicAuthenticator.java
Modified: tomcat/trunk/java/org/apache/catalina/ant/AbstractCatalinaTask.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/ant/AbstractCatalinaTask.java?rev=1458738&r1=1458737&r2=1458738&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/ant/AbstractCatalinaTask.java
(original)
+++ tomcat/trunk/java/org/apache/catalina/ant/AbstractCatalinaTask.java Wed Mar
20 10:38:43 2013
@@ -27,7 +27,8 @@ import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
-import org.apache.catalina.util.Base64;
+import javax.xml.bind.DatatypeConverter;
+
import org.apache.tomcat.util.buf.B2CConverter;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project;
@@ -201,8 +202,8 @@ public abstract class AbstractCatalinaTa
// Set up an authorization header with our credentials
String input = username + ":" + password;
- String output =
- Base64.encode(input.getBytes(B2CConverter.ISO_8859_1));
+ String output = DatatypeConverter.printBase64Binary(
+ input.getBytes(B2CConverter.ISO_8859_1));
hconn.setRequestProperty("Authorization",
"Basic " + output);
Modified:
tomcat/trunk/java/org/apache/catalina/authenticator/SpnegoAuthenticator.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/authenticator/SpnegoAuthenticator.java?rev=1458738&r1=1458737&r2=1458738&view=diff
==============================================================================
---
tomcat/trunk/java/org/apache/catalina/authenticator/SpnegoAuthenticator.java
(original)
+++
tomcat/trunk/java/org/apache/catalina/authenticator/SpnegoAuthenticator.java
Wed Mar 20 10:38:43 2013
@@ -27,6 +27,7 @@ import javax.security.auth.Subject;
import javax.security.auth.login.LoginContext;
import javax.security.auth.login.LoginException;
import javax.servlet.http.HttpServletResponse;
+import javax.xml.bind.DatatypeConverter;
import org.apache.catalina.LifecycleException;
import org.apache.catalina.connector.Request;
@@ -279,7 +280,7 @@ public class SpnegoAuthenticator extends
// Send response token on success and failure
response.setHeader("WWW-Authenticate", "Negotiate "
- + Base64.encode(outToken));
+ + DatatypeConverter.printBase64Binary(outToken));
if (principal != null) {
register(request, response, principal, Constants.SPNEGO_METHOD,
Modified: tomcat/trunk/java/org/apache/catalina/realm/JNDIRealm.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/realm/JNDIRealm.java?rev=1458738&r1=1458737&r2=1458738&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/realm/JNDIRealm.java (original)
+++ tomcat/trunk/java/org/apache/catalina/realm/JNDIRealm.java Wed Mar 20
10:38:43 2013
@@ -51,6 +51,7 @@ import javax.naming.directory.DirContext
import javax.naming.directory.InitialDirContext;
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;
+import javax.xml.bind.DatatypeConverter;
import org.apache.catalina.LifecycleException;
import org.apache.catalina.util.Base64;
@@ -1556,7 +1557,8 @@ public class JNDIRealm extends RealmBase
password = password.substring(5);
md.reset();
md.update(credentials.getBytes(B2CConverter.ISO_8859_1));
- String digestedPassword = Base64.encode(md.digest());
+ String digestedPassword =
+ DatatypeConverter.printBase64Binary(md.digest());
validated = password.equals(digestedPassword);
}
} else if (password.startsWith("{SSHA}")) {
Modified: tomcat/trunk/java/org/apache/catalina/util/Base64.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/util/Base64.java?rev=1458738&r1=1458737&r2=1458738&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/util/Base64.java (original)
+++ tomcat/trunk/java/org/apache/catalina/util/Base64.java Wed Mar 20 10:38:43
2013
@@ -17,7 +17,8 @@
package org.apache.catalina.util;
-import org.apache.tomcat.util.buf.B2CConverter;
+import javax.xml.bind.DatatypeConverter;
+
import org.apache.tomcat.util.buf.ByteChunk;
import org.apache.tomcat.util.buf.CharChunk;
@@ -35,11 +36,7 @@ public final class Base64
{
private static final int BASELENGTH = 255;
private static final int LOOKUPLENGTH = 64;
- private static final int TWENTYFOURBITGROUP = 24;
- private static final int EIGHTBIT = 8;
- private static final int SIXTEENBIT = 16;
private static final int FOURBYTE = 4;
- private static final int SIGN = -128;
private static final byte PAD = (byte) '=';
private static final byte [] base64Alphabet = new byte[BASELENGTH];
private static final byte [] lookUpBase64Alphabet = new byte[LOOKUPLENGTH];
@@ -84,93 +81,12 @@ public final class Base64
*
* @param binaryData Array containing binary data to encode.
* @return Base64-encoded data.
+ *
+ * @deprecated Use {@link DatatypeConverter#printBase64Binary(byte[])}
*/
+ @Deprecated
public static String encode(byte[] binaryData) {
- int lengthDataBits = binaryData.length*EIGHTBIT;
- int fewerThan24bits = lengthDataBits%TWENTYFOURBITGROUP;
- int numberTriplets = lengthDataBits/TWENTYFOURBITGROUP;
- byte encodedData[] = null;
-
-
- if (fewerThan24bits != 0)
- {
- //data not divisible by 24 bit
- encodedData = new byte[ (numberTriplets + 1 ) * 4 ];
- }
- else
- {
- // 16 or 8 bit
- encodedData = new byte[ numberTriplets * 4 ];
- }
-
- byte k = 0, l = 0, b1 = 0, b2 = 0, b3 = 0;
-
- int encodedIndex = 0;
- int dataIndex = 0;
- int i = 0;
- //log.debug("number of triplets = " + numberTriplets);
- for ( i = 0; i<numberTriplets; i++ )
- {
- dataIndex = i*3;
- b1 = binaryData[dataIndex];
- b2 = binaryData[dataIndex + 1];
- b3 = binaryData[dataIndex + 2];
-
- //log.debug("b1= " + b1 +", b2= " + b2 + ", b3= " + b3);
-
- l = (byte)(b2 & 0x0f);
- k = (byte)(b1 & 0x03);
-
- encodedIndex = i * 4;
- byte val1 = ((b1 & SIGN)==0)?(byte)(b1>>2):(byte)((b1)>>2^0xc0);
- byte val2 = ((b2 & SIGN)==0)?(byte)(b2>>4):(byte)((b2)>>4^0xf0);
- byte val3 = ((b3 & SIGN)==0)?(byte)(b3>>6):(byte)((b3)>>6^0xfc);
-
- encodedData[encodedIndex] = lookUpBase64Alphabet[ val1 ];
- //log.debug( "val2 = " + val2 );
- //log.debug( "k4 = " + (k<<4) );
- //log.debug( "vak = " + (val2 | (k<<4)) );
- encodedData[encodedIndex+1] =
- lookUpBase64Alphabet[ val2 | ( k<<4 )];
- encodedData[encodedIndex+2] =
- lookUpBase64Alphabet[ (l <<2 ) | val3 ];
- encodedData[encodedIndex+3] = lookUpBase64Alphabet[ b3 & 0x3f ];
- }
-
- // form integral number of 6-bit groups
- dataIndex = i*3;
- encodedIndex = i*4;
- if (fewerThan24bits == EIGHTBIT )
- {
- b1 = binaryData[dataIndex];
- k = (byte) ( b1 &0x03 );
- //log.debug("b1=" + b1);
- //log.debug("b1<<2 = " + (b1>>2) );
- byte val1 = ((b1 & SIGN)==0)?(byte)(b1>>2):(byte)((b1)>>2^0xc0);
- encodedData[encodedIndex] = lookUpBase64Alphabet[ val1 ];
- encodedData[encodedIndex + 1] = lookUpBase64Alphabet[ k<<4 ];
- encodedData[encodedIndex + 2] = PAD;
- encodedData[encodedIndex + 3] = PAD;
- }
- else if (fewerThan24bits == SIXTEENBIT)
- {
-
- b1 = binaryData[dataIndex];
- b2 = binaryData[dataIndex +1 ];
- l = (byte) (b2 & 0x0f);
- k = (byte) (b1 & 0x03);
-
- byte val1 = ((b1 & SIGN) == 0)?(byte)(b1>>2):(byte)((b1)>>2^0xc0);
- byte val2 = ((b2 & SIGN) == 0)?(byte)(b2>>4):(byte)((b2)>>4^0xf0);
-
- encodedData[encodedIndex] = lookUpBase64Alphabet[ val1 ];
- encodedData[encodedIndex + 1] =
- lookUpBase64Alphabet[ val2 | ( k<<4 )];
- encodedData[encodedIndex + 2] = lookUpBase64Alphabet[ l<<2 ];
- encodedData[encodedIndex + 3] = PAD;
- }
-
- return new String(encodedData, B2CConverter.ISO_8859_1);
+ return DatatypeConverter.printBase64Binary(binaryData);
}
/**
Modified:
tomcat/trunk/test/org/apache/catalina/authenticator/TestNonLoginAndBasicAuthenticator.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/authenticator/TestNonLoginAndBasicAuthenticator.java?rev=1458738&r1=1458737&r2=1458738&view=diff
==============================================================================
---
tomcat/trunk/test/org/apache/catalina/authenticator/TestNonLoginAndBasicAuthenticator.java
(original)
+++
tomcat/trunk/test/org/apache/catalina/authenticator/TestNonLoginAndBasicAuthenticator.java
Wed Mar 20 10:38:43 2013
@@ -22,6 +22,7 @@ import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletResponse;
+import javax.xml.bind.DatatypeConverter;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
@@ -36,7 +37,6 @@ import org.apache.catalina.session.Manag
import org.apache.catalina.startup.TesterServlet;
import org.apache.catalina.startup.Tomcat;
import org.apache.catalina.startup.TomcatBaseTest;
-import org.apache.catalina.util.Base64;
import org.apache.tomcat.util.buf.ByteChunk;
/**
@@ -608,7 +608,8 @@ public class TestNonLoginAndBasicAuthent
password = aPassword;
String userCredentials = username + ":" + password;
byte[] credentialsBytes =
ByteChunk.convertToBytes(userCredentials);
- String base64auth = Base64.encode(credentialsBytes);
+ String base64auth =
+ DatatypeConverter.printBase64Binary(credentialsBytes);
credentials= method + " " + base64auth;
}
Modified:
tomcat/trunk/test/org/apache/catalina/authenticator/TestSSOnonLoginAndBasicAuthenticator.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/authenticator/TestSSOnonLoginAndBasicAuthenticator.java?rev=1458738&r1=1458737&r2=1458738&view=diff
==============================================================================
---
tomcat/trunk/test/org/apache/catalina/authenticator/TestSSOnonLoginAndBasicAuthenticator.java
(original)
+++
tomcat/trunk/test/org/apache/catalina/authenticator/TestSSOnonLoginAndBasicAuthenticator.java
Wed Mar 20 10:38:43 2013
@@ -21,6 +21,8 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import javax.xml.bind.DatatypeConverter;
+
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
@@ -34,7 +36,6 @@ import org.apache.catalina.deploy.Securi
import org.apache.catalina.startup.TesterServlet;
import org.apache.catalina.startup.Tomcat;
import org.apache.catalina.startup.TomcatBaseTest;
-import org.apache.catalina.util.Base64;
import org.apache.tomcat.util.buf.ByteChunk;
/**
@@ -235,7 +236,8 @@ public class TestSSOnonLoginAndBasicAuth
// the second access attempt should be sucessful
String credentials = user + ":" + pwd;
byte[] credentialsBytes = ByteChunk.convertToBytes(credentials);
- String base64auth = Base64.encode(credentialsBytes);
+ String base64auth =
+ DatatypeConverter.printBase64Binary(credentialsBytes);
String authLine = "Basic " + base64auth;
List<String> auth = new ArrayList<>();
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]