You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by cr...@apache.org on 2001/08/20 02:33:34 UTC
cvs commit: jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets CGIServlet.java InvokerServlet.java ManagerServlet.java
craigmcc 01/08/19 17:33:34
Modified: catalina/src/conf web.xml
catalina/src/share/org/apache/catalina Globals.java
catalina/src/share/org/apache/catalina/servlets
CGIServlet.java InvokerServlet.java
ManagerServlet.java
Log:
Make it not possible to use the "invoker" service to execute CGIServlet
when it is not mapped. (Same prohibition applies to ManagerServlet).
Remove default <servlet-mapping> for CGI servlet. User who want to enable
this, because they are porting existing legacy applications, must either
uncomment the entry in $CATALINA_HOME/conf/web.xml to make CGI service
available to all web apps, or add an explicit mapping to your own web.xml
file.
Revision Changes Path
1.18 +6 -2 jakarta-tomcat-4.0/catalina/src/conf/web.xml
Index: web.xml
===================================================================
RCS file: /home/cvs/jakarta-tomcat-4.0/catalina/src/conf/web.xml,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -r1.17 -r1.18
--- web.xml 2001/06/01 00:18:37 1.17
+++ web.xml 2001/08/20 00:33:34 1.18
@@ -106,7 +106,9 @@
<param-name>cgiPathPrefix</param-name>
<param-value>WEB-INF/cgi</param-value>
</init-param>
+<!-- Uncomment this if you want CGIServlet loaded at startup time
<load-on-startup>6</load-on-startup>
+-->
</servlet>
<!-- The mapping for the default servlet -->
@@ -136,11 +138,13 @@
</servlet-mapping>
<!-- The mapping for the CGI Gateway servlet -->
- <!-- Comment this out if you do not want "CGI Gateway" service -->
+ <!-- Uncomment this if you want "CGI Gateway" service -->
+ <!--
<servlet-mapping>
<servlet-name>cgi</servlet-name>
- <url-pattern>/cgi-bin/*</url-pattern>
+ <url-pattern>/cgi-bin/*</url-pattern>
</servlet-mapping>
+ -->
<!-- Set the default session timeout (in seconds) -->
<session-config>
1.35 +13 -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.34
retrieving revision 1.35
diff -u -r1.34 -r1.35
--- Globals.java 2001/08/10 05:40:43 1.34
+++ Globals.java 2001/08/20 00:33:34 1.35
@@ -1,7 +1,7 @@
/*
- * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/Globals.java,v 1.34 2001/08/10 05:40:43 craigmcc Exp $
- * $Revision: 1.34 $
- * $Date: 2001/08/10 05:40:43 $
+ * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/Globals.java,v 1.35 2001/08/20 00:33:34 craigmcc Exp $
+ * $Revision: 1.35 $
+ * $Date: 2001/08/20 00:33:34 $
*
* ====================================================================
*
@@ -69,7 +69,7 @@
* Global constants that are applicable to multiple packages within Catalina.
*
* @author Craig R. McClanahan
- * @version $Revision: 1.34 $ $Date: 2001/08/10 05:40:43 $
+ * @version $Revision: 1.35 $ $Date: 2001/08/20 00:33:34 $
*/
public final class Globals {
@@ -156,6 +156,15 @@
*/
public static final String ERROR_MESSAGE_ATTR =
"javax.servlet.error.message";
+
+
+ /**
+ * The request attribute under which the Invoker servlet will store
+ * the invoking servlet path, if it was used to execute a servlet
+ * indirectly instead of through a servlet mapping.
+ */
+ public static final String INVOKED_ATTR =
+ "org.apache.ctalina.INVOKED";
/**
1.5 +22 -7 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.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- CGIServlet.java 2001/08/14 18:50:10 1.4
+++ CGIServlet.java 2001/08/20 00:33:34 1.5
@@ -1,6 +1,6 @@
/*
- * CGIServlet.java $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/CGIServlet.java,v 1.4 2001/08/14 18:50:10 pier Exp $
- * $Revision: 1.4 $, $Date: 2001/08/14 18:50:10 $
+ * CGIServlet.java $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/CGIServlet.java,v 1.5 2001/08/20 00:33:34 craigmcc Exp $
+ * $Revision: 1.5 $, $Date: 2001/08/20 00:33:34 $
*
* ====================================================================
*
@@ -87,12 +87,14 @@
import javax.servlet.ServletOutputStream;
import javax.servlet.ServletContext;
import javax.servlet.ServletConfig;
+import javax.servlet.UnavailableException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.servlet.http.Cookie;
import org.apache.catalina.Context;
+import org.apache.catalina.Globals;
import org.apache.catalina.Wrapper;
// import org.apache.catalina.util.StringManager;
@@ -281,7 +283,7 @@
*
* @author Martin T Dengler [root@martindengler.com]
* @author Amy Roh
- * @version $Revision: 1.4 $, $Date: 2001/08/14 18:50:10 $
+ * @version $Revision: 1.5 $, $Date: 2001/08/20 00:33:34 $
* @since Tomcat 4.0
*
*/
@@ -335,6 +337,14 @@
super.init(config);
+ // Verify that we were not accessed using the invoker servlet
+ String servletName = getServletConfig().getServletName();
+ if (servletName == null)
+ servletName = "";
+ if (servletName.startsWith("org.apache.catalina.INVOKER."))
+ throw new UnavailableException
+ ("Cannot invoke CGIServlet through the invoker");
+
// Set our properties from the initialization parameters
String value = null;
try {
@@ -604,6 +614,11 @@
protected void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
+ // Verify that we were not accessed using the invoker servlet
+ if (req.getAttribute(Globals.INVOKED_ATTR) != null)
+ throw new UnavailableException
+ ("Cannot invoke CGIServlet through the invoker");
+
CGIEnvironment cgiEnv = new CGIEnvironment(req, getServletContext());
if (cgiEnv.isValid()) {
@@ -627,7 +642,7 @@
try {
ServletOutputStream out = res.getOutputStream();
out.println("<HTML><HEAD><TITLE>$Name: $</TITLE></HEAD>");
- out.println("<BODY>$Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/CGIServlet.java,v 1.4 2001/08/14 18:50:10 pier Exp $<p>");
+ out.println("<BODY>$Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/CGIServlet.java,v 1.5 2001/08/20 00:33:34 craigmcc Exp $<p>");
if (cgiEnv.isValid()) {
out.println(cgiEnv.toString());
@@ -669,7 +684,7 @@
/** For future testing use only; does nothing right now */
public static void main(String[] args) {
- System.out.println("$Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/CGIServlet.java,v 1.4 2001/08/14 18:50:10 pier Exp $");
+ System.out.println("$Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/CGIServlet.java,v 1.5 2001/08/20 00:33:34 craigmcc Exp $");
}
@@ -685,7 +700,7 @@
* </p>
*
* @author Martin Dengler [root@martindengler.com]
- * @version $Revision: 1.4 $, $Date: 2001/08/14 18:50:10 $
+ * @version $Revision: 1.5 $, $Date: 2001/08/20 00:33:34 $
* @since Tomcat 4.0
*
*/
@@ -1307,7 +1322,7 @@
* </p>
*
* @author Martin Dengler [root@martindengler.com]
- * @version $Revision: 1.4 $, $Date: 2001/08/14 18:50:10 $
+ * @version $Revision: 1.5 $, $Date: 2001/08/20 00:33:34 $
*/
protected class CGIRunner {
1.10 +23 -4 jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/InvokerServlet.java
Index: InvokerServlet.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/InvokerServlet.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- InvokerServlet.java 2001/07/22 20:25:11 1.9
+++ InvokerServlet.java 2001/08/20 00:33:34 1.10
@@ -1,7 +1,7 @@
/*
- * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/InvokerServlet.java,v 1.9 2001/07/22 20:25:11 pier Exp $
- * $Revision: 1.9 $
- * $Date: 2001/07/22 20:25:11 $
+ * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/InvokerServlet.java,v 1.10 2001/08/20 00:33:34 craigmcc Exp $
+ * $Revision: 1.10 $
+ * $Date: 2001/08/20 00:33:34 $
*
* ====================================================================
*
@@ -87,7 +87,7 @@
* in the web application deployment descriptor.
*
* @author Craig R. McClanahan
- * @version $Revision: 1.9 $ $Date: 2001/07/22 20:25:11 $
+ * @version $Revision: 1.10 $ $Date: 2001/08/20 00:33:34 $
*/
public final class InvokerServlet
@@ -422,14 +422,18 @@
request.setAttribute(Globals.JSP_FILE_ATTR, jspFile);
else
request.removeAttribute(Globals.JSP_FILE_ATTR);
+ request.setAttribute(Globals.INVOKED_ATTR,
+ request.getServletPath());
// if (debug >= 2)
// log(" Calling service() method, jspFile=" +
// jspFile);
instance.service(wrequest, response);
+ request.removeAttribute(Globals.INVOKED_ATTR);
request.removeAttribute(Globals.JSP_FILE_ATTR);
} catch (IOException e) {
// if (debug >= 2)
// log(" service() method IOException", e);
+ request.removeAttribute(Globals.INVOKED_ATTR);
request.removeAttribute(Globals.JSP_FILE_ATTR);
try {
wrapper.deallocate(instance);
@@ -437,9 +441,22 @@
;
}
throw e;
+ } catch (UnavailableException e) {
+ // if (debug >= 2)
+ // log(" service() method UnavailableException", e);
+ context.removeServletMapping(pattern);
+ request.removeAttribute(Globals.INVOKED_ATTR);
+ request.removeAttribute(Globals.JSP_FILE_ATTR);
+ try {
+ wrapper.deallocate(instance);
+ } catch (Throwable f) {
+ ;
+ }
+ throw e;
} catch (ServletException e) {
// if (debug >= 2)
// log(" service() method ServletException", e);
+ request.removeAttribute(Globals.INVOKED_ATTR);
request.removeAttribute(Globals.JSP_FILE_ATTR);
try {
wrapper.deallocate(instance);
@@ -450,6 +467,7 @@
} catch (RuntimeException e) {
// if (debug >= 2)
// log(" service() method RuntimeException", e);
+ request.removeAttribute(Globals.INVOKED_ATTR);
request.removeAttribute(Globals.JSP_FILE_ATTR);
try {
wrapper.deallocate(instance);
@@ -460,6 +478,7 @@
} catch (Throwable e) {
// if (debug >= 2)
// log(" service() method Throwable", e);
+ request.removeAttribute(Globals.INVOKED_ATTR);
request.removeAttribute(Globals.JSP_FILE_ATTR);
try {
wrapper.deallocate(instance);
1.8 +10 -4 jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/ManagerServlet.java
Index: ManagerServlet.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/ManagerServlet.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- ManagerServlet.java 2001/07/22 20:25:11 1.7
+++ ManagerServlet.java 2001/08/20 00:33:34 1.8
@@ -1,7 +1,7 @@
/*
- * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/ManagerServlet.java,v 1.7 2001/07/22 20:25:11 pier Exp $
- * $Revision: 1.7 $
- * $Date: 2001/07/22 20:25:11 $
+ * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/ManagerServlet.java,v 1.8 2001/08/20 00:33:34 craigmcc Exp $
+ * $Revision: 1.8 $
+ * $Date: 2001/08/20 00:33:34 $
*
* ====================================================================
*
@@ -77,6 +77,7 @@
import org.apache.catalina.ContainerServlet;
import org.apache.catalina.Context;
import org.apache.catalina.Deployer;
+import org.apache.catalina.Globals;
import org.apache.catalina.Session;
import org.apache.catalina.Wrapper;
import org.apache.catalina.util.StringManager;
@@ -152,7 +153,7 @@
* </ul>
*
* @author Craig R. McClanahan
- * @version $Revision: 1.7 $ $Date: 2001/07/22 20:25:11 $
+ * @version $Revision: 1.8 $ $Date: 2001/08/20 00:33:34 $
*/
public class ManagerServlet
@@ -252,6 +253,11 @@
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException {
+
+ // Verify that we were not accessed using the invoker servlet
+ if (request.getAttribute(Globals.INVOKED_ATTR) != null)
+ throw new UnavailableException
+ (sm.getString("managerServlet.cannotInvoke"));
// Identify the request parameters that we need
String command = request.getPathInfo();