yoavs       2004/10/27 09:26:19

  Modified:    catalina/src/share/org/apache/catalina/realm Tag: TOMCAT_5_0
                        RealmBase.java
               webapps/docs Tag: TOMCAT_5_0 changelog.xml
               webapps/docs/config Tag: TOMCAT_5_0 realm.xml
  Log:
  Bugzilla 31592: allow digestEncoding to be specified.
  
  Revision  Changes    Path
  No                   revision
  No                   revision
  1.33.2.2  +66 -5     
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.33.2.1
  retrieving revision 1.33.2.2
  diff -u -r1.33.2.1 -r1.33.2.2
  --- RealmBase.java    30 Aug 2004 20:27:35 -0000      1.33.2.1
  +++ RealmBase.java    27 Oct 2004 16:26:18 -0000      1.33.2.2
  @@ -21,6 +21,7 @@
   import java.beans.PropertyChangeListener;
   import java.beans.PropertyChangeSupport;
   import java.io.IOException;
  +import java.io.UnsupportedEncodingException;
   import java.security.MessageDigest;
   import java.security.NoSuchAlgorithmException;
   import java.security.Principal;
  @@ -91,6 +92,12 @@
        */
       protected String digest = null;
   
  +    /**
  +     * The digest encoding charset.  Null (the default)
  +     * means use the platform default encoding.
  +     */
  +    protected String digestEncoding = null;
  +
   
       /**
        * Descriptive information about this Realm implementation.
  @@ -217,6 +224,24 @@
   
       }
   
  +    /**
  +     * Returns the digest encoding charset.
  +     *
  +     * @return The digest (null means platform default)
  +     */
  +    public String getDigestEncoding() {
  +        return digestEncoding;
  +    }
  +
  +    /**
  +     * Sets the digest encoding charset.
  +     *
  +     * @param charset The charset (null means platform default)
  +     */
  +    public void setDigestEncoding(String charset) {
  +        digestEncoding = charset;
  +    }
  +
   
       /**
        * Return descriptive information about this Realm implementation and
  @@ -342,9 +367,21 @@
               return null;
           String serverDigestValue = md5a1 + ":" + nOnce + ":" + nc + ":"
               + cnonce + ":" + qop + ":" + md5a2;
  +
  +        byte[] valueBytes = null;
  +        if(getDigestEncoding() == null) {
  +            valueBytes = serverDigestValue.getBytes();
  +        } else {
  +            try {
  +                valueBytes = serverDigestValue.getBytes(getDigestEncoding());
  +            } catch (UnsupportedEncodingException uee) {
  +                uee.printStackTrace();
  +                throw new IllegalArgumentException("Illegal encoding: " + 
getDigestEncoding());
  +            }
  +        }
  +
           String serverDigest =
  -            md5Encoder.encode(md5Helper.digest(serverDigestValue.getBytes()));
  -        //System.out.println("Server digest : " + serverDigest);
  +            md5Encoder.encode(md5Helper.digest(valueBytes));
   
           if (serverDigest.equals(clientDigest))
               return getPrincipal(username);
  @@ -1019,7 +1056,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);
  @@ -1047,8 +1092,21 @@
           }
           String digestValue = username + ":" + realmName + ":"
               + getPassword(username);
  +
  +        byte[] valueBytes = null;
  +        if(getDigestEncoding() == null) {
  +            valueBytes = digestValue.getBytes();
  +        } else {
  +            try {
  +                valueBytes = digestValue.getBytes(getDigestEncoding());
  +            } catch (UnsupportedEncodingException uee) {
  +                uee.printStackTrace();
  +                throw new IllegalArgumentException("Illegal encoding: " + 
getDigestEncoding());
  +            }
  +        }
  +
           byte[] digest =
  -            md5Helper.digest(digestValue.getBytes());
  +            md5Helper.digest(valueBytes);
           return md5Encoder.encode(digest);
       }
   
  @@ -1137,8 +1195,11 @@
               // Obtain a new message digest with "digest" encryption
               MessageDigest md =
                   (MessageDigest) MessageDigest.getInstance(algorithm).clone();
  +
               // encode the credentials
  +            // Should use digestEncoding but this is a static method
               md.update(credentials.getBytes());
  +
               // Digest the credentials and return as hexadecimal
               return (HexUtils.convert(md.digest()));
           } catch(Exception ex) {
  
  
  
  No                   revision
  No                   revision
  1.70.2.58 +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.70.2.57
  retrieving revision 1.70.2.58
  diff -u -r1.70.2.57 -r1.70.2.58
  --- changelog.xml     25 Oct 2004 19:20:11 -0000      1.70.2.57
  +++ changelog.xml     27 Oct 2004 16:26:18 -0000      1.70.2.58
  @@ -31,6 +31,9 @@
         <fix>
           <bug>31623</bug>: Better OS400 support in setclasspath.sh. (yoavs)
         </fix>
  +      <fix>
  +        <bug>31592</bug>: Allow specification of digest encoding for realms. (yoavs)
  +      </fix>
       </changelog>
     </subsection>
   
  
  
  
  No                   revision
  No                   revision
  1.5.2.2   +5 -0      jakarta-tomcat-catalina/webapps/docs/config/realm.xml
  
  Index: realm.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-catalina/webapps/docs/config/realm.xml,v
  retrieving revision 1.5.2.1
  retrieving revision 1.5.2.2
  diff -u -r1.5.2.1 -r1.5.2.2
  --- realm.xml 10 Oct 2004 20:42:32 -0000      1.5.2.1
  +++ realm.xml 27 Oct 2004 16:26:19 -0000      1.5.2.2
  @@ -111,6 +111,11 @@
           to encode user passwords stored in the database.  If not specified,
           user passwords are assumed to be stored in clear-text.</p>
         </attribute>
  + 
  +      <attribute name="digestEncoding" required="false">
  +        <p>The charset to use when encoding digests.  If not specified,
  +        the platform default encoding is used.</p>
  +      </attribute>
   
         <attribute name="driverName" required="true">
           <p>Fully qualified Java class name of the JDBC driver to be
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to