craigmcc    00/11/17 13:16:21

  Modified:    src/share/org/apache/tomcat/service Tag: tomcat_32
                        PoolTcpConnector.java
               src/share/org/apache/tomcat/startup Tag: tomcat_32
                        EmbededTomcat.java
  Log:
  When using the EmbededTomcat approach to starting Tomcat, properly pass
  the keystore, keystore password, and requirement for client authentication
  to the underlying SSL socket factory.  Also, support the ability to
  provide your own custom socket factory object, rather than just a
  classname.
  
  PR: BugRat Bug Report #404
  Submitted by: Stefan F. Stefansson <[EMAIL PROTECTED]>
                  (Sorry about not being able to get the
                accented letters right)
  
  Revision  Changes    Path
  No                   revision
  
  
  No                   revision
  
  
  1.8.2.2   +8 -0      
jakarta-tomcat/src/share/org/apache/tomcat/service/PoolTcpConnector.java
  
  Index: PoolTcpConnector.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/service/PoolTcpConnector.java,v
  retrieving revision 1.8.2.1
  retrieving revision 1.8.2.2
  diff -u -r1.8.2.1 -r1.8.2.2
  --- PoolTcpConnector.java     2000/10/06 20:42:00     1.8.2.1
  +++ PoolTcpConnector.java     2000/11/17 21:16:21     1.8.2.2
  @@ -394,6 +394,14 @@
        loghelper.setLogger(logger);
       }
   
  +    /**
  +     * Set a socket factory explicitly.  This is used
  +     * by the EmbededTomcat class to create custom endpoints.
  +     */
  +    public void setSocketFactory(ServerSocketFactory socketFactory) {
  +        this.socketFactory = socketFactory;
  +    }
  +
       // -------------------- Implementation methods --------------------
   
   
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.13.2.3  +50 -4     
jakarta-tomcat/src/share/org/apache/tomcat/startup/EmbededTomcat.java
  
  Index: EmbededTomcat.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/startup/EmbededTomcat.java,v
  retrieving revision 1.13.2.2
  retrieving revision 1.13.2.3
  diff -u -r1.13.2.2 -r1.13.2.3
  --- EmbededTomcat.java        2000/08/16 22:24:27     1.13.2.2
  +++ EmbededTomcat.java        2000/11/17 21:16:21     1.13.2.3
  @@ -4,6 +4,7 @@
   import java.io.*;
   
   import org.apache.tomcat.core.*;
  +import org.apache.tomcat.net.*;
   import org.apache.tomcat.request.*;
   import org.apache.tomcat.service.*;
   import org.apache.tomcat.service.http.*;
  @@ -33,6 +34,7 @@
    *  "expensive" as code complexity and will be deprecated ).
    * 
    * @author [EMAIL PROTECTED]
  + * @author Stefan Freyr Stafansson [[EMAIL PROTECTED]]
    */
   public class EmbededTomcat { // extends WebService
       ContextManager contextM = null;
  @@ -112,11 +114,23 @@
        contextM.addServerConnector(  sc );
       }
   
  -    /** Add a secure web service.
  +    /** Add a secure web service without client authentication using the
  +     * default server socket factory.
        */
       public void addSecureEndpoint( int port, InetAddress addr, String hostname,
                                    String keyFile, String keyPass )
       {
  +        addSecureEndpoint(port, addr, hostname, keyFile, keyPass, false);
  +    }
  +
  +    /** Add a secure web service using the
  +     * org.apache.tomcat.net.SSLSocketFactory.  clientAuth specifies whether
  +     * client authentication is required or not.
  +     */
  +    public void addSecureEndpoint(int port, InetAddress addr, String hostname,
  +                                  String keyStore, String keyPass,
  +                                  boolean clientAuth)
  +    {
        if(debug>0) log( "addSecureConnector " + port + " " + addr + " " +
                         hostname );
   
  @@ -126,9 +140,13 @@
        sc.setAttribute( "vhost_port" , new Integer( port ) );
        if( addr != null ) sc.setAttribute( "vhost_address", addr );
        if( hostname != null ) sc.setAttribute( "vhost_name", hostname );
  -
  -     sc.setAttribute( "socketFactory",
  -                      "org.apache.tomcat.net.SSLSocketFactory");
  +        if (keyStore != null)
  +            sc.setAttribute("keystore", keyStore);
  +        if (keyPass != null)
  +            sc.setAttribute("keypass", keyPass);
  +        if (clientAuth)
  +            sc.setAttribute("clientAuth", "true");
  +        sc.setSocketFactory(new org.apache.tomcat.net.SSLSocketFactory());
        //      System.out.println("XXX " + keyFile + " " + keyPass);
        HttpConnectionHandler ch=new HttpConnectionHandler();
        ch.setSecure(true);
  @@ -136,6 +154,34 @@
        // XXX add the secure socket
        
        contextM.addServerConnector(  sc );
  +    }
  +
  +    /** Add a custom web service using the specified socket factory.
  +     *
  +     * @param port Port number on which to listen
  +     * @param addr Internet address on which to listen
  +     * @param hostname Virtual host name for this service
  +     * @param secure Should this endpoint be marked secure?
  +     * @param socketFactory The factory for server sockets to be used
  +     */
  +    public void addCustomEndpoint(int port, InetAddress addr, String hostname,
  +                                  boolean secure,
  +                                  ServerSocketFactory socketFactory) {
  +        if (debug>0) log("addCustomEndpoint " + port + " " + addr + " " +
  +                         hostname);
  +
  +        PoolTcpConnector sc = new PoolTcpConnector();
  +        sc.setServer(contextM);
  +        if (secure) contextM.setSecurePort(port);
  +        sc.setAttribute("vhost_port", new Integer(port));
  +        if (addr != null) sc.setAttribute("vhost_address", addr);
  +        if (hostname != null) sc.setAttribute("vhost_name", hostname);
  +        sc.setSocketFactory(socketFactory);
  +        HttpConnectionHandler ch = new HttpConnectionHandler();
  +        ch.setSecure(secure);
  +        sc.setTcpConnectionHandler(ch);
  +        contextM.addServerConnector(sc);
  +
       }
   
       // -------------------- Context add/remove --------------------
  
  
  

Reply via email to