You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by am...@apache.org on 2001/07/11 23:15:50 UTC

cvs commit: jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets CGIServlet.java

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 [root@martindengler.com]
    * @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 [root@martindengler.com]
  -     * @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 [root@martindengler.com]
  -     * @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/