costin      01/09/18 16:24:46

  Modified:    .        build.xml
               src/share/org/apache/jasper/compiler JspReader.java
               src/share/org/apache/tomcat/modules/server Ajp13.java
               src/share/org/apache/tomcat/util/compat Jdk11Compat.java
                        Jdk12Support.java
  Log:
  X509Certificate is not available in JDK1.1, moved the code to Jdk11Compat and make 
sure
  everything is again working in 1.1.
  
  As ussual, the trick is to have a method that does nothing in Jdk11Compat and
  override it with a real method in Jdk12Support ( the names are pretty bad ). This 
adds
  almost no overhead in jdk12 ( just a virtual method call ), and is pretty clean ( as
  oposed with other solutions using introspection or other tricks ).
  
  I also added the catch(Exception) in JspReader - I think it's a bug in gcj, but it's 
an easy
  workaround ( gcj is also JDK1.1 AFAIK )
  
  Revision  Changes    Path
  1.153     +1 -0      jakarta-tomcat/build.xml
  
  Index: build.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat/build.xml,v
  retrieving revision 1.152
  retrieving revision 1.153
  diff -u -r1.152 -r1.153
  --- build.xml 2001/09/17 00:44:54     1.152
  +++ build.xml 2001/09/18 23:24:46     1.153
  @@ -255,6 +255,7 @@
         </classpath>
         <include name="org/apache/tomcat/util/**"/>
         <exclude name="**/util/net/SSLSocketFactory.java" unless="jsse.present"/>
  +      <exclude name="**/util/net/SSLSocketFactory.java" unless="jdk12.present"/>
         <exclude name="**/util/compat/Jdk12Support.java" unless="jdk12.present"/>
         <exclude name="**/util/depend/DependClassLoader12.java" 
unless="jdk12.present"/>
       </javac>
  
  
  
  1.24      +11 -6     
jakarta-tomcat/src/share/org/apache/jasper/compiler/JspReader.java
  
  Index: JspReader.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat/src/share/org/apache/jasper/compiler/JspReader.java,v
  retrieving revision 1.23
  retrieving revision 1.24
  diff -u -r1.23 -r1.24
  --- JspReader.java    2001/03/02 04:51:33     1.23
  +++ JspReader.java    2001/09/18 23:24:46     1.24
  @@ -349,12 +349,17 @@
       char[] getChars(Mark start, Mark stop) throws ParseException {
        Mark oldstart = mark();
        reset(start);
  -     CharArrayWriter caw = new CharArrayWriter();
  -     while (!stop.equals(mark()))
  -         caw.write(nextChar());
  -     caw.close();
  -     reset(oldstart);
  -     return caw.toCharArray();
  +     try {
  +         CharArrayWriter caw = new CharArrayWriter();
  +         while (!stop.equals(mark()))
  +             caw.write(nextChar());
  +         caw.close();
  +         reset(oldstart);
  +         return caw.toCharArray();
  +     } catch( Exception ex ) {
  +         ex.printStackTrace();
  +         throw new ParseException( ex.toString() );
  +     }
       }
   
       public int peekChar() {
  
  
  
  1.28      +12 -18    
jakarta-tomcat/src/share/org/apache/tomcat/modules/server/Ajp13.java
  
  Index: Ajp13.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/modules/server/Ajp13.java,v
  retrieving revision 1.27
  retrieving revision 1.28
  diff -u -r1.27 -r1.28
  --- Ajp13.java        2001/09/18 12:29:30     1.27
  +++ Ajp13.java        2001/09/18 23:24:46     1.28
  @@ -67,11 +67,9 @@
   import java.util.Enumeration;
   import java.io.ByteArrayInputStream;
   
  -import java.security.cert.X509Certificate;
  -import java.security.cert.CertificateFactory;
  -
   import org.apache.tomcat.core.*;
   import org.apache.tomcat.util.*;
  +import org.apache.tomcat.util.compat.*;
   import org.apache.tomcat.util.http.MimeHeaders;
   import org.apache.tomcat.util.buf.MessageBytes;
   import org.apache.tomcat.util.aaa.SimplePrincipal;
  @@ -195,7 +193,7 @@
   
   
       // ============ Instance Properties ====================
  -
  +    static Jdk11Compat jdk11Compat=Jdk11Compat.getJdkCompat();
       OutputStream out;
       InputStream in;
       int dL=0;
  @@ -383,22 +381,18 @@
                   // Transform the string into certificate.
                   String certString = msg.getString();
                   byte[] certData = certString.getBytes();
  -                ByteArrayInputStream bais = new ByteArrayInputStream(certData);
  - 
  -                // Fill the first element.
  -                X509Certificate jsseCerts[] = null;
  -                try {
  -                    CertificateFactory cf =
  -                        CertificateFactory.getInstance("X.509");
  -                    X509Certificate cert = (X509Certificate)
  -                        cf.generateCertificate(bais);
  -                    jsseCerts =  new X509Certificate[1];
  -                    jsseCerts[0] = cert;
  -                } catch(java.security.cert.CertificateException e) {
  +
  +             try {
  +                 Object jsseCerts=jdk11Compat.getX509Certificates(certData);
  +                 req.setAttribute("javax.servlet.request.X509Certificate",
  +                                  jsseCerts);
  +                } catch( Exception e) {
                       d("Certificate convertion failed" + e );
  +                 // Save it at least as string... JDK1.1 doesn't
  +                 // have X509Certificate class
  +                 req.setAttribute("javax.servlet.request.X509Certificate",
  +                                  certString);
                   }
  -             req.setAttribute("javax.servlet.request.X509Certificate",
  -                              jsseCerts);
                   break;
   
            case SC_A_SSL_CIPHER   :
  
  
  
  1.13      +5 -0      
jakarta-tomcat/src/share/org/apache/tomcat/util/compat/Jdk11Compat.java
  
  Index: Jdk11Compat.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/util/compat/Jdk11Compat.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- Jdk11Compat.java  2001/09/16 00:33:30     1.12
  +++ Jdk11Compat.java  2001/09/18 23:24:46     1.13
  @@ -149,6 +149,11 @@
       public java.util.ResourceBundle getBundle(String name, Locale loc, ClassLoader 
cl ) {
        return ResourceBundle.getBundle(name, loc);
       }
  +
  +    public Object getX509Certificates( byte x509[] ) throws Exception {
  +     // No x509 certificate in JDK1.1
  +     return null;
  +    }
       
   
       // -------------------- Factory -------------------- 
  
  
  
  1.8       +19 -0     
jakarta-tomcat/src/share/org/apache/tomcat/util/compat/Jdk12Support.java
  
  Index: Jdk12Support.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/util/compat/Jdk12Support.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- Jdk12Support.java 2001/08/22 04:44:49     1.7
  +++ Jdk12Support.java 2001/09/18 23:24:46     1.8
  @@ -61,8 +61,11 @@
   
   import java.net.*;
   import java.util.*;
  +import java.security.cert.X509Certificate;
  +import java.security.cert.CertificateFactory;
   import java.security.*;
   import org.apache.tomcat.util.depend.*;
  +
   /**
    *  
    */
  @@ -149,6 +152,22 @@
        else
            return ResourceBundle.getBundle(name, loc, cl);
       }
  +
  +    public Object getX509Certificates( byte x509[] ) throws Exception {
  +     ByteArrayInputStream bais = new ByteArrayInputStream(x509);
  +     
  +     // Fill the first element.
  +     X509Certificate jsseCerts[] = null;
  +
  +     CertificateFactory cf =
  +         CertificateFactory.getInstance("X.509");
  +     X509Certificate cert = (X509Certificate)
  +         cf.generateCertificate(bais);
  +     jsseCerts =  new X509Certificate[1];
  +     jsseCerts[0] = cert;
  +     return jsseCerts;
  +    }
  +
       
   
       // -------------------- Support --------------------
  
  
  

Reply via email to