amyroh      01/07/11 14:15:50

  Modified:    catalina/src/share/org/apache/catalina/servlets
                        CGIServlet.java
  Log:
  Fixes the empty content_length problem -- patch submitted by Gene Wadleigh.
  
  Revision  Changes    Path
  1.2       +26 -15    
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.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- CGIServlet.java   2001/06/01 00:20:19     1.1
  +++ CGIServlet.java   2001/07/11 21:15:47     1.2
  @@ -1,6 +1,6 @@
   /*
  - * CGIServlet.java $Header: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/CGIServlet.java,v
 1.1 2001/06/01 00:20:19 amyroh Exp $
  - * $Revision: 1.1 $, $Date: 2001/06/01 00:20:19 $
  + * CGIServlet.java $Header: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/CGIServlet.java,v
 1.2 2001/07/11 21:15:47 amyroh Exp $
  + * $Revision: 1.2 $, $Date: 2001/07/11 21:15:47 $
    *
    * ====================================================================
    *
  @@ -281,7 +281,7 @@
    *
    * @author Martin T Dengler [[EMAIL PROTECTED]]
    * @author Amy Roh
  - * @version $Revision: 1.1 $, $Date: 2001/06/01 00:20:19 $
  + * @version $Revision: 1.2 $, $Date: 2001/07/11 21:15:47 $
    * @since Tomcat 4.0
    *
    */
  @@ -627,7 +627,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.1 2001/06/01 00:20:19 amyroh Exp $<p>");
  +             out.println("<BODY>$Header: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/CGIServlet.java,v
 1.2 2001/07/11 21:15:47 amyroh Exp $<p>");
   
                if (cgiEnv.isValid()) {
                    out.println(cgiEnv.toString());
  @@ -669,7 +669,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.1 2001/06/01 00:20:19 amyroh Exp $");
  +     System.out.println("$Header: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/CGIServlet.java,v
 1.2 2001/07/11 21:15:47 amyroh Exp $");
       }
   
   
  @@ -685,7 +685,7 @@
        * </p>
        * 
        * @author   Martin Dengler [[EMAIL PROTECTED]]
  -     * @version  $Revision: 1.1 $, $Date: 2001/06/01 00:20:19 $
  +     * @version  $Revision: 1.2 $, $Date: 2001/07/11 21:15:47 $
        * @since    Tomcat 4.0
        *
        */
  @@ -1083,8 +1083,10 @@
                    //NOOP per CGI specification section 11.2
                } else if("HOST".equalsIgnoreCase(header)) {
                    String host = req.getHeader(header);
  +        int idx =  host.indexOf(":");
  +        if(idx < 0) idx = host.length();
                    envp.put("HTTP_" + header.replace('-', '_'),
  -                          host.substring(0, host.indexOf(":")));
  +                          host.substring(0, idx));
                } else {
                    envp.put("HTTP_" + header.replace('-', '_'),
                             req.getHeader(header));
  @@ -1305,7 +1307,7 @@
        * </p>
        *
        * @author    Martin Dengler [[EMAIL PROTECTED]]
  -     * @version   $Revision: 1.1 $, $Date: 2001/06/01 00:20:19 $
  +     * @version   $Revision: 1.2 $, $Date: 2001/07/11 21:15:47 $
        */
   
       protected class CGIRunner {
  @@ -1550,12 +1552,12 @@
                }
            }
   
  -         String postIn = getPostInput(params);
  +         /*String postIn = getPostInput(params);
            int contentLength = (postIn.length()
                    + System.getProperty("line.separator").length());
            if ("POST".equals(env.get("REQUEST_METHOD"))) {
                env.put("CONTENT_LENGTH", new Integer(contentLength));
  -         }
  +         }*/
   
           StringBuffer perlCommand = new StringBuffer("perl ");
           if (command.endsWith(".pl") || command.endsWith(".cgi")) {
  @@ -1571,7 +1573,7 @@
             * First  -- parameters
             * Second -- any remaining input
             */
  -         commandsStdIn = new BufferedOutputStream(proc.getOutputStream());
  +         /*commandsStdIn = new BufferedOutputStream(proc.getOutputStream());
            if (debug >= 2 ) {
                log("runCGI stdin=[" + stdin + "], qs="
                    + env.get("QUERY_STRING"));
  @@ -1590,7 +1592,7 @@
                /* assume if nothing is available after a time, that nothing is
                 * coming...
                 */
  -             if (stdin.available() <= 0) {
  +             /*if (stdin.available() <= 0) {
                    if (debug >= 2 ) {
                        log("runCGI stdin is NOT available ["
                            + stdin.available() + "]");
  @@ -1627,8 +1629,17 @@
                }
            }
            commandsStdIn.flush();
  -         commandsStdIn.close();
  -     
  +         commandsStdIn.close();*/
  +      String sContentLength = (String) env.get("CONTENT_LENGTH");
  +      if(!"".equals(sContentLength)) {
  +          commandsStdIn = new BufferedOutputStream(proc.getOutputStream());
  +          byte[] content = new byte[Integer.parseInt(sContentLength)];
  +          stdin.read(content);
  +          commandsStdIn.write(content);
  +          commandsStdIn.flush();
  +          commandsStdIn.close();
  +      }
  +
            /* we want to wait for the process to exit,  Process.waitFor()
             * is useless in our situation; see
             * http://developer.java.sun.com/developer/
  
  
  

Reply via email to