billbarker 2004/10/07 19:53:38 Modified: src/share/org/apache/tomcat/modules/aaa RealmBase.java Log: Add the option to specify the encoding for use in digesting passwords. To use, specify the attribute digestEncoding="UTF-8" on your Realm element. Fix for Bug #31592 Revision Changes Path 1.5 +35 -7 jakarta-tomcat/src/share/org/apache/tomcat/modules/aaa/RealmBase.java Index: RealmBase.java =================================================================== RCS file: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/modules/aaa/RealmBase.java,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- RealmBase.java 25 Feb 2004 06:52:40 -0000 1.4 +++ RealmBase.java 8 Oct 2004 02:53:38 -0000 1.5 @@ -21,6 +21,7 @@ package org.apache.tomcat.modules.aaa; +import java.io.UnsupportedEncodingException; import java.security.MessageDigest; import java.security.Principal; @@ -68,6 +69,11 @@ protected String digest = "No"; /** + * The encoding to use for password digesting. + */ + protected String digestEncoding=null; + + /** * Gets the digest algorithm used for credentials in the database. * Should be a value that MessageDigest accepts for algorithm or "No". * "No" is the Default. @@ -88,18 +94,40 @@ } /** + * Get the encoding to use for digesting passwords. + * If <code>null</code> then the System encoding is used. + */ + public String getDigestEncoding() { + return digestEncoding; + } + + /** + * Set the encoding to use for digesting passwords. + * if <code>null</code> then the System encoding is used. + */ + public void setDigestEncoding(String de) { + digestEncoding = de; + } + + /** * Digest password using the algorithm especificied and * convert the result to a corresponding hex string. * If exception, the plain credentials string is returned * @param credentials Password or other credentials to use in authenticating this username * @param algorithm Algorithm used to do the digest */ - public static final String digest(String credentials,String algorithm ) { + public static final String digest(String credentials,String algorithm, String encoding ) { try { // Obtain a new message digest with MD5 encryption MessageDigest md = (MessageDigest)MessageDigest.getInstance(algorithm).clone(); // encode the credentials - md.update(credentials.getBytes()); + byte [] credBytes = null; + if(encoding != null) { + credBytes = credentials.getBytes(encoding); + } else { + credBytes = credentials.getBytes(); + } + md.update(credBytes); // obtain the byte array from the digest byte[] dig = md.digest(); // convert the byte array to hex string @@ -121,7 +149,7 @@ if (args[0].equalsIgnoreCase("-a")) { for (int i = 2; i < args.length; i++) { System.out.print(args[i] + ":"); - System.out.println(digest(args[i], args[1])); + System.out.println(digest(args[i], args[1], null)); } } } @@ -135,7 +163,7 @@ if( digest.equals("") || digest.equalsIgnoreCase("No")){ return credentials; } else { - return digest(credentials,digest); + return digest(credentials,digest, digestEncoding); } }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]