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]>