yoavs 2004/10/27 08:56:58 Modified: catalina/src/share/org/apache/catalina/realm RealmBase.java webapps/docs changelog.xml Log: Bugzilla 31592: allow specified encoding for digest. Revision Changes Path 1.42 +36 -7 jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/realm/RealmBase.java Index: RealmBase.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/realm/RealmBase.java,v retrieving revision 1.41 retrieving revision 1.42 diff -u -r1.41 -r1.42 --- RealmBase.java 25 Oct 2004 18:31:57 -0000 1.41 +++ RealmBase.java 27 Oct 2004 15:56:57 -0000 1.42 @@ -84,6 +84,11 @@ */ protected String digest = null; + /** + * The encoding charset for the digest. + */ + protected String digestEncoding = null; + /** * Descriptive information about this Realm implementation. @@ -188,6 +193,23 @@ } + /** + * Returns the digest encoding charset. + * + * @return The charset (may be null) for platform default + */ + public String getDigestEncoding() { + return digestEncoding; + } + + /** + * Sets the digest encoding charset. + * + * @param charset The charset (null for platform default) + */ + public void setDigestEncoding(String charset) { + digestEncoding = charset; + } /** * Return descriptive information about this Realm implementation and @@ -982,10 +1004,6 @@ * convert the result to a corresponding hexadecimal string. * If exception, the plain credentials string is returned. * - * <strong>IMPLEMENTATION NOTE</strong> - This implementation is - * synchronized because it reuses the MessageDigest instance. - * This should be faster than cloning the instance on every request. - * * @param credentials Password or other credentials to use in * authenticating this username */ @@ -999,7 +1017,15 @@ synchronized (this) { try { md.reset(); - md.update(credentials.getBytes()); + + byte[] bytes = null; + if(getDigestEncoding() == null) { + bytes = credentials.getBytes(); + } else { + bytes = credentials.getBytes(getDigestEncoding()); + } + md.update(bytes); + return (HexUtils.convert(md.digest())); } catch (Exception e) { log.error(sm.getString("realmBase.digest"), e); @@ -1068,7 +1094,7 @@ * * @param credentials Password or other credentials to use in * authenticating this username - * @param algorithm Algorithm used to do th digest + * @param algorithm Algorithm used to do the digest */ public final static String Digest(String credentials, String algorithm) { @@ -1076,8 +1102,11 @@ // Obtain a new message digest with "digest" encryption MessageDigest md = (MessageDigest) MessageDigest.getInstance(algorithm).clone(); + // encode the credentials + // Should use the digestEncoding, but that's not a static field md.update(credentials.getBytes()); + // Digest the credentials and return as hexadecimal return (HexUtils.convert(md.digest())); } catch(Exception ex) { 1.156 +3 -0 jakarta-tomcat-catalina/webapps/docs/changelog.xml Index: changelog.xml =================================================================== RCS file: /home/cvs/jakarta-tomcat-catalina/webapps/docs/changelog.xml,v retrieving revision 1.155 retrieving revision 1.156 diff -u -r1.155 -r1.156 --- changelog.xml 27 Oct 2004 14:42:14 -0000 1.155 +++ changelog.xml 27 Oct 2004 15:56:57 -0000 1.156 @@ -96,6 +96,9 @@ Prevent silent NPEs during StandardContext.start dealing with JMX registration of realm, submitted by Keith Wannamaker. (remm) </fix> + <fix> + <bug>31592</bug>: Support other encodings for digests. (yoavs) + </fix> </changelog> </subsection>
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]