amyroh      2002/12/04 13:09:08

  Modified:    catalina/src/share/org/apache/catalina Globals.java
               catalina/src/share/org/apache/catalina/servlets
                        CGIServlet.java
               catalina/src/share/org/apache/catalina/ssi SSIServlet.java
  Log:
  Fix for SSI "normal" configuration which invokes a CGI script.
  
  Patch submitted by Nick Bauman <[EMAIL PROTECTED]>.
  
  Revision  Changes    Path
  1.45      +15 -4     
jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/Globals.java
  
  Index: Globals.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/Globals.java,v
  retrieving revision 1.44
  retrieving revision 1.45
  diff -u -r1.44 -r1.45
  --- Globals.java      23 Sep 2002 00:16:35 -0000      1.44
  +++ Globals.java      4 Dec 2002 21:09:07 -0000       1.45
  @@ -266,6 +266,17 @@
       public static final String SESSION_PARAMETER_NAME = "jsessionid";
   
   
  +   /**
  +    * The servlet context attribute under which we store a flag used 
  +    * to mark this request as having been processed by the SSIServlet. 
  +    * We do this because of the pathInfo mangling happening when using 
  +    * the CGIServlet in conjunction with the SSI servlet. (value stored 
  +    * as an object of type String)
  +    */
  +    public static final String SSI_FLAG_ATTR = 
  +        "org.apache.catalina.ssi.SSIServlet";
  +
  +
       /**
        * The request attribute under which we forward an HTTP status code
        * (as an object of type Integer) to an error page.
  
  
  
  1.11      +13 -8     
jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/CGIServlet.java
  
  Index: CGIServlet.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/CGIServlet.java,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- CGIServlet.java   22 Nov 2002 21:51:14 -0000      1.10
  +++ CGIServlet.java   4 Dec 2002 21:09:07 -0000       1.11
  @@ -967,7 +967,12 @@
               String[] sCGINames;
   
   
  -            sPathInfoOrig = this.pathInfo;
  +            if (null != req.getAttribute(Globals.SSI_FLAG_ATTR)) {
  +                // invoked by SSIServlet, which eats our req.getPathInfo() data
  +                sPathInfoOrig = (String) req.getAttribute(Globals.PATH_INFO_ATTR);
  +            } else {
  +                sPathInfoOrig = this.pathInfo;
  +            }
               sPathInfoOrig = sPathInfoOrig == null ? "" : sPathInfoOrig;
   
               sPathTranslatedOrig = req.getPathTranslated();
  
  
  
  1.2       +35 -28    
jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/ssi/SSIServlet.java
  
  Index: SSIServlet.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/ssi/SSIServlet.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- SSIServlet.java   26 May 2002 00:00:55 -0000      1.1
  +++ SSIServlet.java   4 Dec 2002 21:09:08 -0000       1.2
  @@ -95,6 +95,7 @@
   import javax.servlet.http.HttpServlet;
   import javax.servlet.http.HttpServletRequest;
   import javax.servlet.http.HttpServletResponse;
  +import org.apache.catalina.Globals;
   
   /**
    * Servlet to process SSI requests within a webpage.
  @@ -106,6 +107,7 @@
    * @version $Revision$, $Date$
    */
   public class SSIServlet extends HttpServlet {
  +
       /** Debug level for this servlet. */
       protected int debug = 0;
   
  @@ -217,14 +219,14 @@
                path.toUpperCase().startsWith("/META-INF") ) {
   
               res.sendError(res.SC_NOT_FOUND, path);
  -         log( "Can't serve file: " + path );
  +        log( "Can't serve file: " + path );
               return;
           }
  -     
  -     URL resource = servletContext.getResource(path);
  +    
  +        URL resource = servletContext.getResource(path);
           if (resource==null) {
               res.sendError(res.SC_NOT_FOUND, path);
  -         log( "Can't find file: " + path );
  +        log( "Can't find file: " + path );
               return;
           }
   
  @@ -234,37 +236,42 @@
               res.setDateHeader("Expires", (
                   new java.util.Date()).getTime() + expires.longValue() * 1000);
           }
  -
  -     processSSI( req, res, resource );
  +        
  +        req.setAttribute(Globals.SSI_FLAG_ATTR,"true");
  +        processSSI( req, res, resource );
       }
   
       protected void processSSI( HttpServletRequest req,
  -                            HttpServletResponse res,
  -                            URL resource ) throws IOException {
  -     SSIExternalResolver ssiExternalResolver = new SSIServletExternalResolver( 
this, req, res,
  -                                                                               
isVirtualWebappRelative,
  -                                                                               
debug );
  -     SSIProcessor ssiProcessor = new SSIProcessor( ssiExternalResolver, debug );
  +                   HttpServletResponse res,
  +                   URL resource ) throws IOException {
  +                   
  +        SSIExternalResolver ssiExternalResolver = 
  +                            new SSIServletExternalResolver( this, req, res,
  +                            isVirtualWebappRelative,
  +                            debug );
  +        SSIProcessor ssiProcessor = 
  +                            new SSIProcessor( ssiExternalResolver, debug );
   
           PrintWriter printWriter = null;
  -     StringWriter stringWriter = null;
  +        StringWriter stringWriter = null;
           if (buffered) {
  -         stringWriter = new StringWriter();
  +            stringWriter = new StringWriter();
               printWriter = new PrintWriter( stringWriter );
           } else {
               printWriter = res.getWriter();
  -     }
  +        }
   
           URLConnection resourceInfo = resource.openConnection();
           InputStream resourceInputStream = resourceInfo.getInputStream();
  -     BufferedReader bufferedReader = new BufferedReader( new InputStreamReader( 
resourceInputStream ) );
  -     Date lastModifiedDate = new Date( resourceInfo.getLastModified() );
  -     ssiProcessor.process( bufferedReader, lastModifiedDate, printWriter );
  -
  -        if ( buffered ) {
  -         printWriter.flush();
  -         String text = stringWriter.toString();
  -            res.getWriter().write( text );
  -     }
  +        BufferedReader bufferedReader = 
  +            new BufferedReader(new InputStreamReader(resourceInputStream));
  +        Date lastModifiedDate = new Date(resourceInfo.getLastModified());
  +        ssiProcessor.process(bufferedReader, lastModifiedDate, printWriter);
  +
  +        if (buffered) {
  +            printWriter.flush();
  +            String text = stringWriter.toString();
  +            res.getWriter().write(text);
  +        }
       }
   }
  
  
  

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

Reply via email to