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

2004-11-29 Thread markt
markt   2004/11/29 14:47:41

  Modified:catalina/src/share/org/apache/catalina/servlets
CGIServlet.java
  Log:
  Fix bug 32340. Class cast exceotions from toString() method.
   - Reported by Mark Claassen.
  
  Revision  ChangesPath
  1.32  +6 -6  
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.31
  retrieving revision 1.32
  diff -u -r1.31 -r1.32
  --- CGIServlet.java   29 Nov 2004 22:00:44 -  1.31
  +++ CGIServlet.java   29 Nov 2004 22:47:41 -  1.32
  @@ -1707,7 +1707,7 @@
   contentStream.write(lineSep.getBytes());
   contentLength = lineSep.length() + lenRead;
   }
  -env.put("CONTENT_LENGTH", new 
Integer(contentLength));
  +env.put("CONTENT_LENGTH", 
Integer.toString(contentLength));
   }
   }
   
  
  
  

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



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

2004-11-29 Thread markt
markt   2004/11/29 14:00:44

  Modified:catalina/src/share/org/apache/catalina/servlets
CGIServlet.java
  Log:
  Fix bug 32431. Typo in CGI servlet
   - Patch provided by Mark Claassen
   - Ported from TC5
  
  Revision  ChangesPath
  1.31  +6 -6  
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.30
  retrieving revision 1.31
  diff -u -r1.30 -r1.31
  --- CGIServlet.java   29 Nov 2004 21:38:41 -  1.30
  +++ CGIServlet.java   29 Nov 2004 22:00:44 -  1.31
  @@ -1722,7 +1722,7 @@
   
   if(contentStream != null) {
   commandsStdIn = new 
BufferedOutputStream(proc.getOutputStream());
  -proc.getOutputStream().write(contentStream.toByteArray());
  +commandsStdIn.write(contentStream.toByteArray());
   commandsStdIn.flush();
   commandsStdIn.close();
   }
  
  
  

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



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

2004-11-29 Thread markt
markt   2004/11/29 13:38:41

  Modified:catalina/src/share/org/apache/catalina/servlets
CGIServlet.java
  Log:
  Fix bug 32429. stderr line count was always 1.
   - Patch provided by Mark Claassen
  
  Revision  ChangesPath
  1.30  +6 -6  
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.29
  retrieving revision 1.30
  diff -u -r1.29 -r1.30
  --- CGIServlet.java   21 Nov 2004 17:22:49 -  1.29
  +++ CGIServlet.java   29 Nov 2004 21:38:41 -  1.30
  @@ -1847,8 +1847,8 @@
   try {
   while ((line = rdr.readLine()) != null) {
   log("runCGI (stderr):" +  line) ;
  +lineCount++ ;
   }
  -lineCount++ ;
   } catch (IOException e) {
   log("sendToLog error", e) ;
   } finally {
  
  
  

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



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

2004-11-21 Thread markt
markt   2004/11/21 09:22:50

  Modified:catalina/src/share/org/apache/catalina/servlets
CGIServlet.java
  Log:
  Port fix for 32023 from TC5.
  Ensure large uploads are correctly handled.
  
  Revision  ChangesPath
  1.29  +14 -6 
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.28
  retrieving revision 1.29
  diff -u -r1.28 -r1.29
  --- CGIServlet.java   28 Sep 2004 21:51:49 -  1.28
  +++ CGIServlet.java   21 Nov 2004 17:22:49 -  1.29
  @@ -1684,7 +1684,15 @@
   ByteArrayOutputStream contentStream = null;
   if(!"".equals(sContentLength)) {
   byte[] content = new byte[Integer.parseInt(sContentLength)];
  -int lenRead = stdin.read(content);
  +
  +// Ensure all of content is read when doing large uploads.
  +// See bugzilla 32023
  +int lenRead = 0;
  +do {
  +int partRead = 
stdin.read(content,lenRead,content.length-lenRead);
  +lenRead += partRead;
  +} while (lenRead > 0 && lenRead < content.length);
  +
   contentStream = new ByteArrayOutputStream(
   Integer.parseInt(sContentLength));
   if ("POST".equals(env.get("REQUEST_METHOD"))) {
  
  
  

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



cvs commit: jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets CGIServlet.java Constants.java DefaultServlet.java HTMLManagerServlet.java InvokerHttpRequest.java InvokerServlet.java ManagerServlet.java WebdavServlet.java

2004-08-26 Thread markt
markt   2004/08/26 14:38:14

  Modified:catalina/src/share/org/apache/catalina/servlets
CGIServlet.java Constants.java DefaultServlet.java
HTMLManagerServlet.java InvokerHttpRequest.java
InvokerServlet.java ManagerServlet.java
WebdavServlet.java
  Log:
  Update TC4 branch to Apache License 2.0.
  
  Revision  ChangesPath
  1.27  +18 -63
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.26
  retrieving revision 1.27
  diff -u -r1.26 -r1.27
  --- CGIServlet.java   17 Aug 2004 21:44:32 -  1.26
  +++ CGIServlet.java   26 Aug 2004 21:38:13 -  1.27
  @@ -1,62 +1,17 @@
   /*
  - * CGIServlet.java $Header$
  - * $Revision$, $Date$
  - *
  - * 
  - *
  - * The Apache Software License, Version 1.1
  - *
  - * Copyright (c) 1999 The Apache Software Foundation.  All rights
  - * reserved.
  - *
  - * Redistribution and use in source and binary forms, with or without
  - * modification, are permitted provided that the following conditions
  - * are met:
  - *
  - * 1. Redistributions of source code must retain the above copyright
  - *notice, this list of conditions and the following disclaimer.
  - *
  - * 2. Redistributions in binary form must reproduce the above copyright
  - *notice, this list of conditions and the following disclaimer in
  - *the documentation and/or other materials provided with the
  - *distribution.
  - *
  - * 3. The end-user documentation included with the redistribution, if
  - *any, must include the following acknowlegement:
  - *   "This product includes software developed by the
  - *Apache Software Foundation (http://www.apache.org/)."
  - *Alternately, this acknowlegement may appear in the software itself,
  - *if and wherever such third-party acknowlegements normally appear.
  - *
  - * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software
  - *Foundation" must not be used to endorse or promote products derived
  - *from this software without prior written permission. For written
  - *permission, please contact [EMAIL PROTECTED]
  - *
  - * 5. Products derived from this software may not be called "Apache"
  - *nor may "Apache" appear in their names without prior written
  - *permission of the Apache Group.
  - *
  - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  - * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
  - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  - * SUCH DAMAGE.
  - * 
  - *
  - * This software consists of voluntary contributions made by many
  - * individuals on behalf of the Apache Software Foundation.  For more
  - * information on the Apache Software Foundation, please see
  - * .
  - *
  - *
  + * Copyright 1999,2004 The Apache Software Foundation.
  + * 
  + * Licensed under the Apache License, Version 2.0 (the "License");
  + * you may not use this file except in compliance with the License.
  + * You may obtain a copy of the License at
  + * 
  + *  http://www.apache.org/licenses/LICENSE-2.0
  + * 
  + * Unless required by applicable law or agreed to in writing, software
  + * distributed under the License is distributed on an "AS IS" BASIS,
  + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  + * See the License for the specific language governing permissions and
  + * limitations under the License.
*/
   
   
  
  
  
  1.4   +13 -60
jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/Constants.java
  
  Index: Constants.java
  ===
  RCS file: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/Constants.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- Constants.java22 Jul 2001 20:25:11 -  1.3
  +++ Constants.java26 Aug 2

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

2004-06-16 Thread markt
markt   2004/06/16 11:21:54

  Modified:catalina/src/share/org/apache/catalina/servlets
CGIServlet.java
  Log:
  Fix NPE introduced in last change.
  
  Revision  ChangesPath
  1.24  +13 -9 
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.23
  retrieving revision 1.24
  diff -u -r1.23 -r1.24
  --- CGIServlet.java   15 Jun 2004 23:13:04 -  1.23
  +++ CGIServlet.java   16 Jun 2004 18:21:54 -  1.24
  @@ -1833,8 +1833,12 @@
   }
   }
   } //replacement for Process.waitFor()
  -commandsStdOut.close();
  -cgiOutput.close();
  +// Close the output stream used
  +if (isBinaryContent) {
  +cgiOutput.close();
  +} else {
  +commandsStdOut.close();
  +}
   }
   
   private void sendToLog(BufferedReader rdr) {
  
  
  

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



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

2004-06-15 Thread markt
markt   2004/06/15 16:13:04

  Modified:catalina/src/share/org/apache/catalina/servlets
CGIServlet.java
  Log:
  Fix CGI servlet so it correctly handles binary responses (eg images)
  
  Revision  ChangesPath
  1.23  +135 -25   
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.22
  retrieving revision 1.23
  diff -u -r1.22 -r1.23
  --- CGIServlet.java   22 Apr 2004 20:46:56 -  1.22
  +++ CGIServlet.java   15 Jun 2004 23:13:04 -  1.23
  @@ -69,6 +69,7 @@
   import java.io.BufferedReader;
   import java.io.InputStream;
   import java.io.InputStreamReader;
  +import java.io.OutputStream;
   import java.io.OutputStreamWriter;
   import java.io.BufferedOutputStream;
   import java.io.IOException;
  @@ -1645,6 +1646,7 @@
*/
   Runtime rt = null;
   BufferedReader commandsStdOut = null;
  +InputStream cgiOutput = null;
   BufferedReader commandsStdErr = null;
   BufferedOutputStream commandsStdIn = null;
   Process proc = null;
  @@ -1732,8 +1734,6 @@
*/
   
   boolean isRunning = true;
  -commandsStdOut = new BufferedReader
  -(new InputStreamReader(proc.getInputStream()));
   commandsStdErr = new BufferedReader
   (new InputStreamReader(proc.getErrorStream()));
   BufferedWriter servletContainerStdout = null;
  @@ -1755,14 +1755,17 @@
   } ;
   }.start() ;
   
  -
  +InputStream cgiHeaderStream =
  +new HTTPHeaderInputStream(proc.getInputStream());
  +BufferedReader cgiHeaderReader =
  +new BufferedReader(new InputStreamReader(cgiHeaderStream));
  +boolean isBinaryContent = false;
  +
   while (isRunning) {
  -
   try {
  -
   //set headers
   String line = null;
  -while (((line = commandsStdOut.readLine()) != null)
  +while (((line = cgiHeaderReader.readLine()) != null)
  && !("".equals(line))) {
   if (debug >= 2) {
   log("runCGI: addHeader(\"" + line + "\")");
  @@ -1773,27 +1776,50 @@
* response.setStatus(getStatusCode(line));
*/
   } else if (line.indexOf(":") >= 0) {
  -response.addHeader
  -(line.substring(0, line.indexOf(":")).trim(),
  -line.substring(line.indexOf(":") + 1).trim());
  +String header =
  +line.substring(0, line.indexOf(":")).trim();
  +String value =
  +line.substring(line.indexOf(":") + 1).trim(); 
  +response.addHeader(header , value);
  +if ((header.toLowerCase().equals("content-type"))
  +&& (!value.toLowerCase().startsWith("text"))) {
  +isBinaryContent = true;
  +}
   } else {
   log("runCGI: bad header line \"" + line + "\"");
   }
   }
   
   //write output
  -char[] cBuf = new char[1024];
  -while ((bufRead = commandsStdOut.read(cBuf)) != -1) {
  -if (servletContainerStdout != null) {
  +if (isBinaryContent) {
  +byte[] bBuf = new byte[2048];
  +OutputStream out = response.getOutputStream();
  +cgiOutput = proc.getInputStream();
  +while ((bufRead = cgiOutput.read(bBuf)) != -1) {
   if (debug >= 4) {
  -log("runCGI: write(\"" + new String(cBuf, 0, 
bufRead) + "\")");
  +log("runCGI: output " + bufRead +
  +" bytes of binary data");
   }
  -servletContainerStdout.write(cBuf, 0, bufRead);
  +out.write(bBuf, 0, bufRead);
   }
  -}
  +} else {
  +commandsStdOut = new BufferedReader
  +(new InputStreamReader(proc.getInputStream()));
   
  - 

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

2004-04-22 Thread markt
markt   2004/04/22 13:46:56

  Modified:catalina/src/share/org/apache/catalina/servlets
CGIServlet.java
  Log:
  Fix bug 18141. Support parameters with multiple values in CGI servlet.
  
  Revision  ChangesPath
  1.22  +76 -58
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.21
  retrieving revision 1.22
  diff -u -r1.21 -r1.22
  --- CGIServlet.java   17 Apr 2004 22:53:26 -  1.21
  +++ CGIServlet.java   22 Apr 2004 20:46:56 -  1.22
  @@ -73,6 +73,7 @@
   import java.io.BufferedOutputStream;
   import java.io.IOException;
   import java.net.URLEncoder;
  +import java.util.ArrayList;
   import java.util.Hashtable;
   import java.util.Vector;
   import java.util.Enumeration;
  @@ -746,7 +747,7 @@
   private File workingDirectory = null;
   
   /** cgi command's query parameters */
  -private Hashtable queryParameters = null;
  +private ArrayList queryParameters = new ArrayList();
   
   /** whether or not this object is valid or not */
   private boolean valid = false;
  @@ -767,14 +768,17 @@
   setupFromContext(context);
   setupFromRequest(req);
   
  -queryParameters = new Hashtable();
   Enumeration paramNames = req.getParameterNames();
   while (paramNames != null && paramNames.hasMoreElements()) {
   String param = paramNames.nextElement().toString();
   if (param != null) {
  -queryParameters.put(
  -param, URLEncoder.encode(req.getParameter(param),
  - parameterEncoding));
  +String values[] = req.getParameterValues(param);
  +for (int i=0; i < values.length; i++) {
  +String value = URLEncoder.encode(values[i],
  + parameterEncoding);
  +NameValuePair nvp = new NameValuePair(param, value);
  +queryParameters.add(nvp);
  +}
   }
   }
   
  @@ -1272,13 +1276,12 @@
   sb.append("");
   
   sb.append("Query Params");
  -Enumeration paramk = queryParameters.keys();
  -while (paramk.hasMoreElements()) {
  -String s = paramk.nextElement().toString();
  +for (int i=0; i < queryParameters.size(); i++) {
  +NameValuePair nvp = (NameValuePair) queryParameters.get(i);
   sb.append("");
  -sb.append(s);
  +sb.append(nvp.getName());
   sb.append("");
  -sb.append(queryParameters.get(s).toString());
  +sb.append(nvp.getValue());
   sb.append("");
   }
   
  @@ -1331,7 +1334,7 @@
* @return   CGI query parameters
*
*/
  -protected Hashtable getParameters() {
  +protected ArrayList getParameters() {
   return queryParameters;
   }
   
  @@ -1440,7 +1443,7 @@
   private File wd = null;
   
   /** query parameters to be passed to the invoked script */
  -private Hashtable params = null;
  +private ArrayList params = null;
   
   /** stdin to be passed to cgi script */
   private InputStream stdin = null;
  @@ -1465,14 +1468,11 @@
* @param  command  string full path to command to be executed
* @param  env  Hashtable with the desired script environment
* @param  wd   File with the script's desired working directory
  - * @param  params   Hashtable with the script's query parameters
  - *
  - * @param  res   HttpServletResponse object for setting headers
  - *   based on CGI script output
  - *
  + * @param  params   ArrayList with the script's query parameters as
  + *  NameValuePairs
*/
   protected CGIRunner(String command, Hashtable env, File wd,
  -Hashtable params) {
  +ArrayList params) {
   this.command = command;
   this.env = env;
   this.wd = wd;
  @@ -1651,7 +1651,6 @@
   int bufRead = -1;
   
   //create query arguments
  -Enumeration paramNames = params.keys();
   StringBuffer cmdAndArgs = new StringBuffer();
   if (command.indexOf(" ") < 0) {
   cmdAndArgs.append(command);
  @@ -1661,26 +1660,23 @@
 

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

2004-04-17 Thread markt
markt   2004/04/17 15:53:26

  Modified:catalina/src/share/org/apache/catalina/servlets
CGIServlet.java
  Log:
  Fix bug 19545. CGI issues with CONTENT_LENGTH namely:
  - CONTENT_LENGTH was recalculated after script had been executed and hence had no 
effect
  - Parameters were being sent to the script twice
  Patch supplied by [EMAIL PROTECTED] (with some minor mods)
  
  Revision  ChangesPath
  1.21  +25 -29
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.20
  retrieving revision 1.21
  diff -u -r1.20 -r1.21
  --- CGIServlet.java   17 Apr 2004 20:01:19 -  1.20
  +++ CGIServlet.java   17 Apr 2004 22:53:26 -  1.21
  @@ -62,6 +62,7 @@
   
   package org.apache.catalina.servlets;
   
  +import java.io.ByteArrayOutputStream;
   import java.io.File;
   import java.io.FileOutputStream;
   import java.io.BufferedWriter;
  @@ -1689,26 +1690,23 @@
   command.append(cmdAndArgs.toString());
   cmdAndArgs = command;
   
  -rt = Runtime.getRuntime();
  -proc = rt.exec(cmdAndArgs.toString(), hashToStringArray(env), wd);
  -
   String sContentLength = (String) env.get("CONTENT_LENGTH");
  +ByteArrayOutputStream contentStream = null;
   if(!"".equals(sContentLength)) {
  -commandsStdIn = new BufferedOutputStream(proc.getOutputStream());
   byte[] content = new byte[Integer.parseInt(sContentLength)];
  -
   int lenRead = stdin.read(content);
  -
  +contentStream = new ByteArrayOutputStream(
  +Integer.parseInt(sContentLength));
   if ("POST".equals(env.get("REQUEST_METHOD"))) {
   String paramStr = getPostInput(params);
   if (paramStr != null) {
   byte[] paramBytes = paramStr.getBytes();
  -commandsStdIn.write(paramBytes);
  +contentStream.write(paramBytes);
   
   int contentLength = paramBytes.length;
   if (lenRead > 0) {
   String lineSep = System.getProperty("line.separator");
  -commandsStdIn.write(lineSep.getBytes());
  +contentStream.write(lineSep.getBytes());
   contentLength = lineSep.length() + lenRead;
   }
   env.put("CONTENT_LENGTH", new Integer(contentLength));
  @@ -1716,9 +1714,17 @@
   }
   
   if (lenRead > 0) {
  -commandsStdIn.write(content, 0, lenRead);
  +contentStream.write(content, 0, lenRead);
   }
  +contentStream.close();
  +}
   
  +rt = Runtime.getRuntime();
  +proc = rt.exec(cmdAndArgs.toString(), hashToStringArray(env), wd);
  +
  +if(contentStream != null) {
  +commandsStdIn = new BufferedOutputStream(proc.getOutputStream());
  +proc.getOutputStream().write(contentStream.toByteArray());
   commandsStdIn.flush();
   commandsStdIn.close();
   }
  @@ -1842,37 +1848,27 @@
   protected String getPostInput(Hashtable params) {
   String lineSeparator = System.getProperty("line.separator");
   Enumeration paramNames = params.keys();
  -StringBuffer postInput = new StringBuffer("");
   StringBuffer qs = new StringBuffer("");
   if (paramNames != null && paramNames.hasMoreElements()) {
   while (paramNames.hasMoreElements()) {
   String k = (String) paramNames.nextElement();
   String v = params.get(k).toString();
   if ((k.indexOf("=") < 0) && (v.indexOf("=") < 0)) {
  -postInput.append(k);
   qs.append(k);
  -postInput.append("=");
   qs.append("=");
  -postInput.append(v);
   qs.append(v);
  -postInput.append(lineSeparator);
   qs.append("&");
   }
   }
   }
   if (qs.length() > 0) {
  -qs.append(lineSeparator);
  -return qs.append(postInput.toString()).toString();
  +// Remove last "&"
  +qs.setLength(qs.length() - 1);
  +return qs.toString();
   } else {
   

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

2004-04-17 Thread markt
markt   2004/04/17 13:01:19

  Modified:catalina/src/share/org/apache/catalina/servlets
CGIServlet.java
  Log:
  Tidy run() method prior to making some changes.
  
  Revision  ChangesPath
  1.20  +34 -109   
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.19
  retrieving revision 1.20
  diff -u -r1.19 -r1.20
  --- CGIServlet.java   19 Feb 2004 21:38:49 -  1.19
  +++ CGIServlet.java   17 Apr 2004 20:01:19 -  1.20
  @@ -1684,119 +1684,44 @@
   }
   }
   
  -/*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));
  -}*/
  -
  -//if (command.endsWith(".pl") || command.endsWith(".cgi")) {
   StringBuffer command = new StringBuffer(cgiExecutable);
   command.append(" ");
   command.append(cmdAndArgs.toString());
   cmdAndArgs = command;
  -//}
   
   rt = Runtime.getRuntime();
   proc = rt.exec(cmdAndArgs.toString(), hashToStringArray(env), wd);
   
  -/*
  - * provide input to cgi
  - * First  -- parameters
  - * Second -- any remaining input
  - */
  -/*commandsStdIn = new BufferedOutputStream(proc.getOutputStream());
  -if (debug >= 2 ) {
  -log("runCGI stdin=[" + stdin + "], qs="
  -+ env.get("QUERY_STRING"));
  -}
  -if ("POST".equals(env.get("REQUEST_METHOD"))) {
  -if (debug >= 2) {
  -log("runCGI: writing ---\n");
  -log(postIn);
  -log("runCGI: new content_length=" + contentLength
  -+ "---\n");
  -}
  -commandsStdIn.write(postIn.getBytes());
  -}
  -if (stdin != null) {
  -//REMIND: document this
  -/* assume if nothing is available after a time, that nothing is
  - * coming...
  - */
  -/*if (stdin.available() <= 0) {
  -if (debug >= 2 ) {
  -log("runCGI stdin is NOT available ["
  -+ stdin.available() + "]");
  -}
  -try {
  -Thread.currentThread().sleep(iClientInputTimeout);
  -} catch (InterruptedException ignored) {
  -}
  -}
  -if (stdin.available() > 0) {
  -if (debug >= 2 ) {
  -log("runCGI stdin IS available ["
  -+ stdin.available() + "]");
  -}
  -byte[] bBuf = new byte[1024];
  -bufRead = -1;
  -try {
  -while ((bufRead = stdin.read(bBuf)) != -1) {
  -if (debug >= 2 ) {
  -log("runCGI: read [" + bufRead
  -+ "] bytes from stdin");
  -}
  -commandsStdIn.write(bBuf, 0, bufRead);
  +String sContentLength = (String) env.get("CONTENT_LENGTH");
  +if(!"".equals(sContentLength)) {
  +commandsStdIn = new BufferedOutputStream(proc.getOutputStream());
  +byte[] content = new byte[Integer.parseInt(sContentLength)];
  +
  +int lenRead = stdin.read(content);
  +
  +if ("POST".equals(env.get("REQUEST_METHOD"))) {
  +String paramStr = getPostInput(params);
  +if (paramStr != null) {
  +byte[] paramBytes = paramStr.getBytes();
  +commandsStdIn.write(paramBytes);
  +
  +int contentLength = paramBytes.length;
  +if (lenRead > 0) {
  +String lineSep = System.getProperty("line.separator");
  +commandsStdIn.write(lineSep.getBytes());
  +contentLength = lineSep.length() + lenRead;
   }
  -if (debug >= 2 ) {
  -log("runCGI: DONE READING from stdin");
  -}
  -} catch (IOException

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

2004-02-16 Thread markt
markt   2004/02/16 15:41:54

  Modified:catalina/src/share/org/apache/catalina/servlets
CGIServlet.java
  Log:
  Fix bug 26988.
  - Remove unnecessary line feeds from stdin stream.
  - Patch submitted by Kevin Schantz.
  - Port from TC5.
  
  Revision  ChangesPath
  1.18  +13 -9 
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.17
  retrieving revision 1.18
  diff -u -r1.17 -r1.18
  --- CGIServlet.java   18 Jan 2004 17:48:11 -  1.17
  +++ CGIServlet.java   16 Feb 2004 23:41:54 -  1.18
  @@ -1930,8 +1930,12 @@
   }
   }
   }
  -qs.append(lineSeparator);
  -return qs.append(postInput.toString()).toString();
  +if (qs.length() > 0) {
  +qs.append(lineSeparator);
  +return qs.append(postInput.toString()).toString();
  +} else {
  +return null;
  +}
   }
   
   
  
  
  

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



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

2004-01-18 Thread markt
markt   2004/01/18 09:48:11

  Modified:catalina/src/share/org/apache/catalina/servlets
CGIServlet.java
  Log:
  - Fix bug 12361. Support CGI scripts in unpacked WARs.
Scripts are extracted to the context work directory before execution.
  - Remove unused imports - thanks to Eclipse.
  
  Revision  ChangesPath
  1.17  +102 -19   
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.16
  retrieving revision 1.17
  diff -u -r1.16 -r1.17
  --- CGIServlet.java   15 Jan 2004 00:56:53 -  1.16
  +++ CGIServlet.java   18 Jan 2004 17:48:11 -  1.17
  @@ -62,18 +62,13 @@
   
   package org.apache.catalina.servlets;
   
  -import java.lang.Process;
   import java.io.File;
  -import java.io.Writer;
  -import java.io.Reader;
  -import java.io.PrintWriter;
  +import java.io.FileOutputStream;
   import java.io.BufferedWriter;
   import java.io.BufferedReader;
   import java.io.InputStream;
  -import java.io.OutputStream;
   import java.io.InputStreamReader;
   import java.io.OutputStreamWriter;
  -import java.io.BufferedInputStream;
   import java.io.BufferedOutputStream;
   import java.io.IOException;
   import java.net.URLEncoder;
  @@ -93,9 +88,8 @@
   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.IOTools;
   // import org.apache.catalina.util.StringManager;
   
   
  @@ -317,10 +311,13 @@
*/
   private String cgiPathPrefix = null;
   
  -
   /** the executable to use with the script */
   private String cgiExecutable = "perl";
   
  +/** object used to ensure multiple threads don't try to expand same file */
  +static Object expandFileLock = new Object();
  +
  +
   /**
* Sets instance variables.
* 
  @@ -731,6 +728,9 @@
   /** real file system directory of the enclosing servlet's web app */
   private String webAppRootDir = null;
   
  +/** tempdir for context - used to expand scripts in unexpanded wars */
  +private File tmpDir = null;
  +
   /** derived cgi environment */
   private Hashtable env = null;
   
  @@ -792,6 +792,7 @@
   protected void setupFromContext(ServletContext context) {
   this.context = context;
   this.webAppRootDir = context.getRealPath("/");
  +this.tmpDir = (File) context.getAttribute(Globals.WORK_DIR_ATTR);
   }
   
   
  @@ -944,11 +945,8 @@
   + ", scriptname=" + scriptname + ", cginame=" + cginame);
   }
   return new String[] { path, scriptname, cginame, name };
  -
   }
   
  -
  -
   /**
* Constructs the CGI environment to be supplied to the invoked CGI
* script; relies heavliy on Servlet API methods and findCGI
  @@ -992,6 +990,12 @@
   sPathTranslatedOrig =
   sPathTranslatedOrig == null ? "" : sPathTranslatedOrig;
   
  +if (webAppRootDir == null ) {
  +// The app has not been deployed in exploded form
  +webAppRootDir = tmpDir.toString();
  +expandCGIScript();
  +} 
  +
   sCGINames = findCGI(sPathInfoOrig,
   webAppRootDir,
   contextPath,
  @@ -1131,6 +1135,85 @@
   
   }
   
  +/**
  + * Extracts requested resource from web app archive to context work 
  + * directory to enable CGI script to be executed.
  + */
  +protected void expandCGIScript() {
  +StringBuffer srcPath = new StringBuffer();
  +StringBuffer destPath = new StringBuffer();
  +InputStream is = null;
  +
  +// paths depend on mapping
  +if (cgiPathPrefix == null ) {
  +srcPath.append(pathInfo);
  +is = context.getResourceAsStream(srcPath.toString());
  +destPath.append(tmpDir);
  +destPath.append(pathInfo);
  +} else {
  +// essentially same search algorithm as findCGI()
  +srcPath.append(cgiPathPrefix);
  +StringTokenizer pathWalker =
  +new StringTokenizer (pathInfo, "/");
  +// start with first element
  +while (pathWalker.hasMoreElements() && (is == null)) {
  +srcPath.append("/");
  +srcPath.append(pathWalker.nextElement());
  +

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

2004-01-14 Thread markt
markt   2004/01/14 16:56:53

  Modified:catalina/src/share/org/apache/catalina/servlets
CGIServlet.java
  Log:
  - Removing JDK1.4 dependency
  
  Revision  ChangesPath
  1.16  +8 -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.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- CGIServlet.java   17 Dec 2003 22:06:34 -  1.15
  +++ CGIServlet.java   15 Jan 2004 00:56:53 -  1.16
  @@ -1583,7 +1583,7 @@
   arg.append("=");
   v = java.net.URLEncoder.encode(v);
   arg.append(v);
  -if (arg.indexOf(" ") < 0) {
  +if (arg.toString().indexOf(" ") < 0) {
   cmdAndArgs.append(arg);
   } else {
   // Spaces used as delimiter, so need to use quotes
  
  
  

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



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

2003-12-17 Thread markt
markt   2003/12/17 14:06:34

  Modified:catalina/src/share/org/apache/catalina/servlets
CGIServlet.java
  Log:
  - Port fix
  - Bug 5759. CGI servlet does not support extension mapping.
  
  Revision  ChangesPath
  1.15  +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.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- CGIServlet.java   12 Dec 2003 22:52:20 -  1.14
  +++ CGIServlet.java   17 Dec 2003 22:06:34 -  1.15
  @@ -804,8 +804,13 @@
*/
   protected void setupFromRequest(HttpServletRequest req) {
   this.contextPath = req.getContextPath();
  -this.pathInfo = req.getPathInfo();
   this.servletPath = req.getServletPath();
  +this.pathInfo = req.getPathInfo();
  +// If getPathInfo() returns null, must be using extension mapping
  +// In this case, pathInfo should be same as servletPath
  +if (this.pathInfo == null) {
  +this.pathInfo = this.servletPath;
  +}
   }
   
   
  
  
  

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



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

2003-12-12 Thread markt
markt   2003/12/12 14:52:20

  Modified:catalina/src/share/org/apache/catalina/servlets
CGIServlet.java
  Log:
  - Port fix for bug 5762. Include port in HTTP_HOST environment variable.
  - Patch provided by Martin Dengler.
  
  Revision  ChangesPath
  1.14  +7 -13 
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.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- CGIServlet.java   10 Dec 2003 22:13:32 -  1.13
  +++ CGIServlet.java   12 Dec 2003 22:52:20 -  1.14
  @@ -1110,12 +1110,6 @@
   if ("AUTHORIZATION".equalsIgnoreCase(header) ||
   "PROXY_AUTHORIZATION".equalsIgnoreCase(header)) {
   //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, idx));
   } else {
   envp.put("HTTP_" + header.replace('-', '_'),
req.getHeader(header));
  
  
  

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



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

2003-09-02 Thread amyroh
amyroh  2003/09/02 15:44:54

  Modified:catalina/src/share/org/apache/catalina/servlets
CGIServlet.java
  Log:
  Back port patch.
  
  Revision  ChangesPath
  1.12  +22 -19
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.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- CGIServlet.java   4 Dec 2002 21:09:07 -   1.11
  +++ CGIServlet.java   2 Sep 2003 22:44:54 -   1.12
  @@ -364,7 +364,7 @@
   //Wrapper wrapper = (Wrapper) getServletConfig();
   //context = (Context) wrapper.getParent();
   
  -context = config.getServletContext();
  +context = config.getServletContext();
   if (debug >= 1) {
   //log("init: Associated with Context '" + context.getPath() + "'");
   }
  @@ -436,10 +436,10 @@
   out.println("contextPath = " +
  req.getContextPath());
   Cookie cookies[] = req.getCookies();
  -if (cookies!=null) {
  -for (int i = 0; i < cookies.length; i++)
  +if (cookies!=null) {
  +for (int i = 0; i < cookies.length; i++)
   out.println("cookie " + cookies[i].getName() +" = " 
+cookies[i].getValue());
  -}
  +}
   Enumeration headers = req.getHeaderNames();
   while (headers.hasMoreElements()) {
   String header = (String) headers.nextElement();
  @@ -750,7 +750,7 @@
*
*/
   protected CGIEnvironment(HttpServletRequest req,
  - ServletContext context) {
  + ServletContext context) throws IOException {
   setupFromContext(context);
   setupFromRequest(req);
   
  @@ -946,7 +946,7 @@
* @return   true if environment was set OK, false if there
*   was a problem and no environment was set
*/
  -protected boolean setCGIEnvironment(HttpServletRequest req) {
  +protected boolean setCGIEnvironment(HttpServletRequest req) throws 
IOException {
   
   /*
* This method is slightly ugly; c'est la vie.
  @@ -1104,8 +1104,8 @@
   //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();
  +int idx =  host.indexOf(":");
  +if(idx < 0) idx = host.length();
   envp.put("HTTP_" + header.replace('-', '_'),
host.substring(0, idx));
   } else {
  @@ -1114,7 +1114,8 @@
   }
   }
   
  -command = sCGIFullPath;
  +File fCGIFullPath = new File(sCGIFullPath);
  +command = fCGIFullPath.getCanonicalPath();
   envp.put("X_TOMCAT_SCRIPT_PATH", command);  //for kicks
   
   this.env = envp;
  @@ -1555,17 +1556,19 @@
   
   //create query arguments
   Enumeration paramNames = params.keys();
  -StringBuffer cmdAndArgs = new StringBuffer(command);
  +StringBuffer cmdAndArgs = new StringBuffer("\"" + command + "\"");
   if (paramNames != null && paramNames.hasMoreElements()) {
   cmdAndArgs.append(" ");
   while (paramNames.hasMoreElements()) {
   String k = (String) paramNames.nextElement();
   String v = params.get(k).toString();
   if ((k.indexOf("=") < 0) && (v.indexOf("=") < 0)) {
  +cmdAndArgs.append("\"");
   cmdAndArgs.append(k);
   cmdAndArgs.append("=");
   v = java.net.URLEncoder.encode(v);
   cmdAndArgs.append(v);
  +cmdAndArgs.append("\"");
   cmdAndArgs.append(" ");
   }
   }
  @@ -1578,11 +1581,11 @@
   env.put("CONTENT_LENGTH", new Integer(contentLength));
   }*/
   
  -if (command.endsWith(".pl") || command.endsWith(".cgi")) {
  +//if (command.endsWith(".pl") || command.endsWith(".cgi")) {
   StringBuffer perlCommand = new StringBuffer("perl ");
   perlCommand.append(cmdAndArgs.toString());
   cmdAndArgs = perlCommand;
  -}
  +//}
   
   rt = Runtime.getRuntime();
   proc = rt.exec(cmdAndArgs.toString(), hashToStringArray(env), wd);
  
  
  


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

2002-11-22 Thread amyroh
amyroh  2002/11/22 13:51:14

  Modified:catalina/src/share/org/apache/catalina/servlets
CGIServlet.java
  Log:
  Fix for bugzilla 14781 so that CGIServlet doesn't depend on 1.4 api.
  
  Revision  ChangesPath
  1.10  +9 -9  
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.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- CGIServlet.java   5 Sep 2002 21:46:54 -   1.9
  +++ CGIServlet.java   22 Nov 2002 21:51:14 -  1.10
  @@ -1817,7 +1817,7 @@
   }
   }
   qs.append(lineSeparator);
  -return qs.append(postInput).toString();
  +return qs.append(postInput.toString()).toString();
   }
   
   
  
  
  

--
To unsubscribe, e-mail:   
For additional commands, e-mail: 




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

2002-09-05 Thread amyroh

amyroh  2002/09/05 14:46:54

  Modified:catalina/src/share/org/apache/catalina/servlets
CGIServlet.java
  Log:
  Better fix for bugzilla 12041 running an extra thread to deal with STDERR -
  submitted by Yair Lenga <[EMAIL PROTECTED]>.
  
  Also fix for CGI scripts run from a POST operation never get any posted data -
  submitted by Dave Glowacki <[EMAIL PROTECTED]>.
  
  Revision  ChangesPath
  1.9   +105 -92   
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.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- CGIServlet.java   26 Aug 2002 22:38:35 -  1.8
  +++ CGIServlet.java   5 Sep 2002 21:46:54 -   1.9
  @@ -1507,11 +1507,10 @@
* 
* 
*
  - * For more information, see java.lang.Runtime#exec(String command,
  - * String[] envp, File dir)
  - *
* @exception IOException if problems during reading/writing occur
*
  + * @seejava.lang.Runtime#exec(String command, String[] envp,
  + *File dir)
*/
   protected void run() throws IOException {
   
  @@ -1547,8 +1546,6 @@
   BufferedReader commandsStdErr = null;
   BufferedOutputStream commandsStdIn = null;
   Process proc = null;
  -byte[] bBuf = new byte[1024];
  -char[] cBuf = new char[1024];
   int bufRead = -1;
   
   //create query arguments
  @@ -1576,8 +1573,8 @@
   env.put("CONTENT_LENGTH", new Integer(contentLength));
   }*/
   
  -StringBuffer perlCommand = new StringBuffer("perl ");
   if (command.endsWith(".pl") || command.endsWith(".cgi")) {
  +StringBuffer perlCommand = new StringBuffer("perl ");
   perlCommand.append(cmdAndArgs.toString());
   cmdAndArgs = perlCommand;
   }
  @@ -1624,7 +1621,7 @@
   log("runCGI stdin IS available ["
   + stdin.available() + "]");
   }
  -bBuf = new byte[1024];
  +byte[] bBuf = new byte[1024];
   bufRead = -1;
   try {
   while ((bufRead = stdin.read(bBuf)) != -1) {
  @@ -1651,8 +1648,33 @@
 if(!"".equals(sContentLength)) {
 commandsStdIn = new BufferedOutputStream(proc.getOutputStream());
 byte[] content = new byte[Integer.parseInt(sContentLength)];
  -  stdin.read(content);
  -  commandsStdIn.write(content);
  +
  +  int lenRead = stdin.read(content);
  +
  +  if ("POST".equals(env.get("REQUEST_METHOD"))) {
  +  String paramStr = getPostInput(params);
  +  if (paramStr != null) {
  +  byte[] paramBytes = paramStr.getBytes();
  +  commandsStdIn.write(paramBytes);
  +
  +  int contentLength = paramBytes.length;
  +  if (lenRead > 0) {
  +  String lineSep = System.getProperty("line.separator");
  +
  +  commandsStdIn.write(lineSep.getBytes());
  +
  +  contentLength = lineSep.length() + lenRead;
  +  }
  +
  +  env.put("CONTENT_LENGTH", new Integer(contentLength));
  +  }
  +  }
  +
  +  if (lenRead > 0) {
  +  commandsStdIn.write(content, 0, lenRead);
  +  }
  +
  +
 commandsStdIn.flush();
 commandsStdIn.close();
 }
  @@ -1663,6 +1685,7 @@
*   bugParade/bugs/4223650.html
*/
   
  +boolean isRunning = true;
   commandsStdOut = new BufferedReader
   (new InputStreamReader(proc.getInputStream()));
   commandsStdErr = new BufferedReader
  @@ -1678,99 +1701,89 @@
   } catch (IOException ignored) {
   //NOOP: no output will be written
   }
  +final BufferedReader stdErrRdr = commandsStdErr ;
   
  -boolean inHeader = true;
  -int pauseCount = 0;
  +new Thread() {
  +public void run () {
  +sendToLog(stdErrRdr) ;
  +} ;
  +}.start() ;
   
  -boolean isRunning = true;
   
   while (isRunning) {
   
  -if (commandsStdErr != null && commandsStdErr.ready()) {
  -// about to read something; reset pause count
  -pauseCount = 0;
  -
  -buf

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

2002-08-26 Thread amyroh

amyroh  2002/08/26 15:38:35

  Modified:catalina/src/share/org/apache/catalina/servlets
CGIServlet.java
  Log:
  CGIServlet had problems in the case of a CGI script which prints a large
  amount of data to stdout; while the CGIServlet was waiting for the end of
  stderr, the CGI script would fill up the stdout buffer and then wait for it to be
  drained, causing a deadlock between the two processes.
  
  This patch solves this problem by having a single loop which
  reads stderr if it's ready, or stdout if ready.  If neither handle has queued
  data and the CGI script has exited, the servlet pauses a couple of times for
  half a second to make sure that all output has been delivered, then it exits.
  
  Fixes Bug 12041.  Patch submitted by Dave Glowacki ([EMAIL PROTECTED])
  
  Revision  ChangesPath
  1.8   +84 -51
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.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- CGIServlet.java   20 Sep 2001 23:48:13 -  1.7
  +++ CGIServlet.java   26 Aug 2002 22:38:35 -  1.8
  @@ -1507,9 +1507,9 @@
* 
* 
*
  - * For more information, see java.lang.Runtime#exec(String command, 
  + * For more information, see java.lang.Runtime#exec(String command,
* String[] envp, File dir)
  - * 
  + *
* @exception IOException if problems during reading/writing occur
*
*/
  @@ -1663,7 +1663,6 @@
*   bugParade/bugs/4223650.html
*/
   
  -boolean isRunning = true;
   commandsStdOut = new BufferedReader
   (new InputStreamReader(proc.getInputStream()));
   commandsStdErr = new BufferedReader
  @@ -1680,63 +1679,97 @@
   //NOOP: no output will be written
   }
   
  +boolean inHeader = true;
  +int pauseCount = 0;
  +
  +boolean isRunning = true;
  +
   while (isRunning) {
   
  -try {
  -//read stderr first
  -cBuf = new char[1024];
  -while ((bufRead = commandsStdErr.read(cBuf)) != -1) {
  +if (commandsStdErr != null && commandsStdErr.ready()) {
  +// about to read something; reset pause count
  +pauseCount = 0;
  +
  +bufRead = commandsStdErr.read(cBuf);
  +if (bufRead == -1) {
  +commandsStdErr.close();
  +commandsStdErr = null;
  +isRunning = (commandsStdOut != null);
  +} else {
   if (servletContainerStdout != null) {
  -servletContainerStdout.write(cBuf, 0, bufRead);
  +if (inHeader) {
  +servletContainerStdout.write(cBuf, 0, bufRead);
  +} else {
  +log("runCGI: Throwing away StdErr \"" +
  +new String(cBuf, 0, bufRead) + "\"");
  +}
   }
   }
  -
  -//set headers
  -String line = null;
  -while (((line = commandsStdOut.readLine()) != null)
  -   && !("".equals(line))) {
  -if (debug >= 2) {
  -log("runCGI: addHeader(\"" + line + "\")");
  -}
  -if (line.startsWith("HTTP")) {
  -//TODO: should set status codes (NPH support)
  -/*
  - * response.setStatus(getStatusCode(line));
  - */
  +} else if (commandsStdOut != null && commandsStdOut.ready()) {
  +// about to read something; reset pause count
  +pauseCount = 0;
  +
  +if (inHeader) {
  +//set headers
  +String line = commandsStdOut.readLine();
  +if (line == null || "".equals(line)) {
  +inHeader = false;
   } else {
  -response.addHeader
  -(line.substring(0, line.indexOf(":")).trim(),
  - line.substring(line.indexOf(":") + 1).trim());
  +if (debug >= 2) {
  +

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

2001-08-19 Thread amyroh

amyroh  01/08/19 19:42:11

  Modified:catalina/src/share/org/apache/catalina/servlets
CGIServlet.java
  Log:
  Sets 404 not found when cgi script doesn't exist -- submitted by Pier P. Fumagalli.
  
  Revision  ChangesPath
  1.6   +8 -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.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- CGIServlet.java   2001/08/20 00:33:34 1.5
  +++ CGIServlet.java   2001/08/20 02:42:11 1.6
  @@ -1,6 +1,6 @@
   /*
  - * 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 $
  + * CGIServlet.java $Header: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/CGIServlet.java,v
 1.6 2001/08/20 02:42:11 amyroh Exp $
  + * $Revision: 1.6 $, $Date: 2001/08/20 02:42:11 $
*
* 
*
  @@ -283,7 +283,7 @@
*
* @author Martin T Dengler [[EMAIL PROTECTED]]
* @author Amy Roh
  - * @version $Revision: 1.5 $, $Date: 2001/08/20 00:33:34 $
  + * @version $Revision: 1.6 $, $Date: 2001/08/20 02:42:11 $
* @since Tomcat 4.0
*
*/
  @@ -642,11 +642,12 @@
   try {
   ServletOutputStream out = res.getOutputStream();
   out.println("$Name:  $");
  -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 $");
  +out.println("$Header: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/CGIServlet.java,v
 1.6 2001/08/20 02:42:11 amyroh Exp $");
   
   if (cgiEnv.isValid()) {
   out.println(cgiEnv.toString());
   } else {
  +res.setStatus(404);
   out.println("");
   out.println("CGI script not found or not specified.");
   out.println("");
  @@ -684,7 +685,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.5 2001/08/20 00:33:34 craigmcc Exp $");
  +System.out.println("$Header: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/CGIServlet.java,v
 1.6 2001/08/20 02:42:11 amyroh Exp $");
   }
   
   
  @@ -700,7 +701,7 @@
* 
*
* @author   Martin Dengler [[EMAIL PROTECTED]]
  - * @version  $Revision: 1.5 $, $Date: 2001/08/20 00:33:34 $
  + * @version  $Revision: 1.6 $, $Date: 2001/08/20 02:42:11 $
* @sinceTomcat 4.0
*
*/
  @@ -1322,7 +1323,7 @@
* 
*
* @authorMartin Dengler [[EMAIL PROTECTED]]
  - * @version   $Revision: 1.5 $, $Date: 2001/08/20 00:33:34 $
  + * @version   $Revision: 1.6 $, $Date: 2001/08/20 02:42:11 $
*/
   
   protected class CGIRunner {
  
  
  



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

2001-08-19 Thread craigmcc

craigmcc01/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  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  ChangesPath
  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 @@
  cgiPathPrefix
  WEB-INF/cgi

  +
  
   
 
  @@ -136,11 +138,13 @@
 
   

  - 
  + 
  + 
   
 
 
  
  
  
  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 [[EMAIL PROTECTED]]
* @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 $
   

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

2001-07-11 Thread amyroh

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  ChangesPath
  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("$Name:  $");
  - 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 $");
  + 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 $");
   
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 @@
* 
* 
* @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 $
* @sinceTomcat 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 @@
* 
*
* @authorMartin 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...
 */
  - 

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

2001-05-31 Thread amyroh

amyroh  01/05/31 17:20:21

  Added:   catalina/src/share/org/apache/catalina/servlets
CGIServlet.java
  Log:
  Add CGI servlet submitted by Martin Dengler.
  
  Revision  ChangesPath
  1.1  
jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/CGIServlet.java
  
  Index: CGIServlet.java
  ===
  /*
   * 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 $
   *
   * 
   *
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 1999 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *notice, this list of conditions and the following disclaimer in
   *the documentation and/or other materials provided with the
   *distribution.
   *
   * 3. The end-user documentation included with the redistribution, if
   *any, must include the following acknowlegement:
   *   "This product includes software developed by the
   *Apache Software Foundation (http://www.apache.org/)."
   *Alternately, this acknowlegement may appear in the software itself,
   *if and wherever such third-party acknowlegements normally appear.
   *
   * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software
   *Foundation" must not be used to endorse or promote products derived
   *from this software without prior written permission. For written
   *permission, please contact [EMAIL PROTECTED]
   *
   * 5. Products derived from this software may not be called "Apache"
   *nor may "Apache" appear in their names without prior written
   *permission of the Apache Group.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * 
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * .
   *
   *
   */
  
  
  package org.apache.catalina.servlets;
  
  import java.lang.Process;
  import java.io.File;
  import java.io.Writer;
  import java.io.Reader;
  import java.io.PrintWriter;
  import java.io.BufferedWriter;
  import java.io.BufferedReader;
  import java.io.InputStream;
  import java.io.OutputStream;
  import java.io.InputStreamReader;
  import java.io.OutputStreamWriter;
  import java.io.BufferedInputStream;
  import java.io.BufferedOutputStream;
  import java.io.IOException;
  import java.net.URLEncoder;
  import java.util.Hashtable;
  import java.util.Vector;
  import java.util.Enumeration;
  import java.util.StringTokenizer;
  import java.util.Locale;
  import java.util.Date;
  import javax.servlet.ServletException;
  import javax.servlet.ServletOutputStream;
  import javax.servlet.ServletContext;
  import javax.servlet.ServletConfig;
  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.Wrapper;
  // import org.apache.catalina.util.StringManager;
  
  
  /**
   *  CGI-invoking servlet for web applications, used to execute scripts which
   *  comply to the Common Gateway Interface (CGI) specification and are named
   *  in the path-info used to invoke this servlet.
   *
   * 
   * Note: This code compiles and even works for simple CGI cases.
   *  Exhaustive testing has not been done.  Please consider it beta
   *