yoavs       2005/03/23 07:17:17

  Modified:    catalina/src/share/org/apache/catalina/realm JNDIRealm.java
               webapps/docs changelog.xml
  Log:
  Bugzilla 32938.
  
  Revision  Changes    Path
  1.21      +43 -1     
jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/realm/JNDIRealm.java
  
  Index: JNDIRealm.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/realm/JNDIRealm.java,v
  retrieving revision 1.20
  retrieving revision 1.21
  diff -u -r1.20 -r1.21
  --- JNDIRealm.java    23 Feb 2005 19:27:56 -0000      1.20
  +++ JNDIRealm.java    23 Mar 2005 15:17:17 -0000      1.21
  @@ -16,9 +16,11 @@
   
   package org.apache.catalina.realm;
   
  +import java.io.IOException;
   import java.security.Principal;
   import java.text.MessageFormat;
   import java.util.ArrayList;
  +import java.util.Arrays;
   import java.util.Hashtable;
   import java.util.List;
   
  @@ -40,6 +42,8 @@
   import javax.naming.directory.SearchResult;
   import org.apache.catalina.LifecycleException;
   import org.apache.catalina.util.Base64;
  +import org.apache.tomcat.util.buf.ByteChunk;
  +import org.apache.tomcat.util.buf.CharChunk;
   
   /**
    * <p>Implementation of <strong>Realm</strong> that works with a directory
  @@ -1190,6 +1194,44 @@
                           new String(Base64.encode(md.digest()));
                       validated = password.equals(digestedPassword);
                   }
  +            } else if (password.startsWith("{SSHA}")) {
  +                // Bugzilla 32938
  +                /* sync since super.digest() does this same thing */
  +                synchronized (this) {
  +                    password = password.substring(6);
  +
  +                    md.reset();
  +                    md.update(credentials.getBytes());
  +
  +                    // Decode stored password.
  +                    ByteChunk pwbc = new ByteChunk(password.length());
  +                    try {
  +                        pwbc.append(password.getBytes(), 0, 
password.length());
  +                    } catch (IOException e) {
  +                        // Should never happen
  +                        containerLog.error("Could not append password bytes 
to chunk: ", e);
  +                    }
  +
  +                    CharChunk decoded = new CharChunk();
  +                    Base64.decode(pwbc, decoded);
  +                    char[] pwarray = decoded.getBuffer();
  +
  +                    // Split decoded password into hash and salt.
  +                    final int saltpos = 20;
  +                    byte[] hash = new byte[saltpos];
  +                    for (int i=0; i< hash.length; i++) {
  +                        hash[i] = (byte) pwarray[i];
  +                    }
  +
  +                    byte[] salt = new byte[pwarray.length - saltpos];
  +                    for (int i=0; i< salt.length; i++)
  +                        salt[i] = (byte)pwarray[i+saltpos];
  +
  +                    md.update(salt);
  +                    byte[] dp = md.digest();
  +
  +                    validated = Arrays.equals(dp, hash);
  +                } // End synchronized(this) block
               } else {
                   // Hex hashes should be compared case-insensitive
                   validated = (digest(credentials).equalsIgnoreCase(password));
  
  
  
  1.246     +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.245
  retrieving revision 1.246
  diff -u -r1.245 -r1.246
  --- changelog.xml     23 Mar 2005 15:02:58 -0000      1.245
  +++ changelog.xml     23 Mar 2005 15:17:17 -0000      1.246
  @@ -81,6 +81,9 @@
         <update>
           <bug>33636</bug>: Set lastModified attribute when expanding WAR 
files. (yoavs)
         </update>
  +      <update>
  +        <bug>32938</bug>: Allow Salted SHA (SSHA) passwords in JNDIRealm. 
(yoavs)
  +      </update>
       </changelog>
      </subsection>
      
  
  
  

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

Reply via email to