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();