billbarker    01/12/06 20:38:26

  Modified:    src/share/org/apache/tomcat/modules/server
                        Http10Interceptor.java PoolTcpConnector.java
  Log:
  PureTLS support changes.
  Submitted by: Eric Rescorla [EMAIL PROTECTED]
  
  Revision  Changes    Path
  1.28      +45 -7     
jakarta-tomcat/src/share/org/apache/tomcat/modules/server/Http10Interceptor.java
  
  Index: Http10Interceptor.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/modules/server/Http10Interceptor.java,v
  retrieving revision 1.27
  retrieving revision 1.28
  diff -u -r1.27 -r1.28
  --- Http10Interceptor.java    2001/11/02 03:14:03     1.27
  +++ Http10Interceptor.java    2001/12/07 04:38:26     1.28
  @@ -156,6 +156,10 @@
            reqA.readNextRequest(resA);
            if( secure ) {
                reqA.scheme().setString( "https" );
  + 
  +             // Load up the SSLSupport class
  +             if(sslImplementation != null)
  +                 reqA.setSSLSupport(sslImplementation.getSSLSupport(socket));
            }
            
            cm.service( reqA, resA );
  @@ -199,13 +203,47 @@
            catch (IOException e) { /* ignore */ }
           }
       }
  + 
  +     /**
  +       getInfo calls for SSL data
  + 
  +       @return the requested data
  +     */
  +     public Object getInfo( Context ctx, Request request,
  +                        int id, String key ) {
  +       // The following code explicitly assumes that the only
  +       // attributes hand;ed here are HTTP. If you change that
  +       // you MUST change the test for sslSupport==null --EKR
  + 
  +       HttpRequest httpReq;
  +
  +       
  +       try {
  +     httpReq=(HttpRequest)request;
  +       } catch (ClassCastException e){
  +     return null;
  +       }
  + 
  +       if(key!=null && httpReq!=null && httpReq.sslSupport!=null){
  +       try {
  +           if(key.equals("javax.servlet.request.cipher_suite"))
  +               return httpReq.sslSupport.getCipherSuite();
  +           if(key.equals("javax.servlet.request.X509Certificate"))
  +               return httpReq.sslSupport.getPeerCertificateChain();
  +       } catch (Exception e){
  +           log("Exception getting SSL attribute " + key,e,Log.WARNING);
  +           return null;
  +       }
  +       }
  +       return super.getInfo(ctx,request,id,key);
  +     }
   }
   
   class HttpRequest extends Request {
       Http10 http=new Http10();
       private boolean moreRequests = false;
       Socket socket;
  -    static CertCompat certcompat = CertCompat.getCertCompat();
  +    SSLSupport sslSupport=null;
       
       public HttpRequest() {
           super();
  @@ -214,12 +252,6 @@
           remoteAddrMB.recycle();
           remoteHostMB.recycle();
       }
  -    public Object getAttribute(String name) {
  -        if (name.equals("javax.servlet.request.X509Certificate")) {
  -            return(certcompat.getX509Certificates(socket));
  -     }
  -        return(super.getAttribute(name));
  -    }
   
       public void recycle() {
        super.recycle();
  @@ -227,6 +259,7 @@
           // recycle these to remove the defaults
           remoteAddrMB.recycle();
           remoteHostMB.recycle();
  +     sslSupport=null;
       }
   
       public void setSocket(Socket socket) throws IOException {
  @@ -352,6 +385,11 @@
        //      log("No server name, defaulting to localhost");
           serverNameMB.setString( getLocalHost() );
       }
  + 
  +    void setSSLSupport(SSLSupport s){
  +        sslSupport=s;
  +    }
  + 
   }
   
   
  
  
  
  1.13      +29 -27    
jakarta-tomcat/src/share/org/apache/tomcat/modules/server/PoolTcpConnector.java
  
  Index: PoolTcpConnector.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/modules/server/PoolTcpConnector.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- PoolTcpConnector.java     2001/11/07 03:36:47     1.12
  +++ PoolTcpConnector.java     2001/12/07 04:38:26     1.13
  @@ -88,9 +88,11 @@
   {
       protected PoolTcpEndpoint ep;
       protected ServerSocketFactory socketFactory;
  +    protected SSLImplementation sslImplementation;
       // socket factory attriubtes ( XXX replace with normal setters ) 
       protected Hashtable attributes = new Hashtable();
       protected String socketFactoryName=null;
  +    protected String sslImplementationName=null;
       protected boolean secure=false;
   
       public PoolTcpConnector() {
  @@ -187,33 +189,39 @@
        */
       private void checkSocketFactory() throws TomcatException {
        if(secure) {
  -         if(socketFactoryName == null)
  -             socketFactoryName = SSL_FACT;
  -         /* backwards compatibility */
  -         if(SSL_FACT.equals(socketFactoryName)) {
  -             try {
  -                 Class c1=Class.forName( SSL_CHECK );                    
  -             } catch (Exception sslex) {
  -                 throw new TomcatException("JSSE not installed.",sslex);
  -             }
  -             System.getProperties().put("java.protocol.handler.pkgs",
  -                        "com.sun.net.ssl.internal.www.protocol");
  -         }
  -     }
  -     if(socketFactoryName != null) {
  -         try {
  -             socketFactory = string2SocketFactory(socketFactoryName);
  -             ep.setServerSocketFactory(socketFactory);
  -         } catch(Exception sfex) {
  -             throw new TomcatException("Error Loading Socket Factory " +
  -                                       socketFactoryName,
  -                                       sfex);
  +         try {
  +             // The SSL setup code has been moved into
  +             // SSLImplementation since SocketFactory doesn't
  +             // provide a wide enough interface
  +             sslImplementation=SSLImplementation.getInstance
  +                 (sslImplementationName);
  +             ep.setServerSocketFactory(sslImplementation.
  +                                       getServerSocketFactory());
  +         } catch (ClassNotFoundException e){
  +             throw new TomcatException("Error loading SSLImplementation ",
  +                                       e);
  +         }
  +     }
  +     else {
  +         if (socketFactoryName != null) {
  +             try {
  +                 socketFactory = string2SocketFactory(socketFactoryName);
  +                 ep.setServerSocketFactory(socketFactory);
  +             } catch(Exception sfex) {
  +                 throw new TomcatException("Error Loading Socket Factory " +
  +                                           socketFactoryName,
  +                                           sfex);
  +             }
            }
        }
       }
       public void setSocketFactory( String valueS ) {
        socketFactoryName = valueS;
       }
  +    public void setSSLImplementation( String valueS) {
  +     sslImplementationName=valueS;
  +    }
  +     
   
       // -------------------- Socket options --------------------
   
  @@ -271,12 +279,6 @@
       public boolean isClientauthSet() {
           return (attributes.get("clientauth") != null);
       }
  -
  -    public static final String SSL_CHECK=
  -     "javax.net.ssl.SSLServerSocketFactory";
  -    public static final String SSL_FACT=
  -     "org.apache.tomcat.util.net.SSLSocketFactory";
  -
   
       public void setSecure( boolean b ) {
        secure=b;
  
  
  

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

Reply via email to