Author: kkolinko
Date: Thu Jan 20 17:43:35 2011
New Revision: 1061412
URL: http://svn.apache.org/viewvc?rev=1061412&view=rev
Log:
Fix http://issues.apache.org/bugzilla/show_bug.cgi?id=50606
Improve CGIServlet: Provide support for specifying empty value for the
executable init-param. Provide support for explicit additional arguments for
the executable. Those were broken when implementing fix for bug 49657
Modified:
tomcat/trunk/java/org/apache/catalina/servlets/CGIServlet.java
tomcat/trunk/webapps/docs/cgi-howto.xml
tomcat/trunk/webapps/docs/changelog.xml
Modified: tomcat/trunk/java/org/apache/catalina/servlets/CGIServlet.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/servlets/CGIServlet.java?rev=1061412&r1=1061411&r2=1061412&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/servlets/CGIServlet.java (original)
+++ tomcat/trunk/java/org/apache/catalina/servlets/CGIServlet.java Thu Jan 20
17:43:35 2011
@@ -32,6 +32,7 @@ import java.util.ArrayList;
import java.util.Date;
import java.util.Enumeration;
import java.util.Hashtable;
+import java.util.List;
import java.util.Locale;
import java.util.StringTokenizer;
import java.util.Vector;
@@ -257,7 +258,10 @@ public final class CGIServlet extends Ht
/** the executable to use with the script */
private String cgiExecutable = "perl";
-
+
+ /** additional arguments for the executable */
+ private List<String> cgiExecutableArgs = null;
+
/** the encoding to use for parameters */
private String parameterEncoding =
System.getProperty("file.encoding", "UTF-8");
@@ -309,6 +313,19 @@ public final class CGIServlet extends Ht
cgiExecutable = getServletConfig().getInitParameter("executable");
}
+ if (getServletConfig().getInitParameter("executable-arg-1") != null) {
+ List<String> args = new ArrayList<String>();
+ for (int i = 1;; i++) {
+ String arg = getServletConfig().getInitParameter(
+ "executable-arg-" + i);
+ if (arg == null) {
+ break;
+ }
+ args.add(arg);
+ }
+ cgiExecutableArgs = args;
+ }
+
if (getServletConfig().getInitParameter("parameterEncoding") != null) {
parameterEncoding =
getServletConfig().getInitParameter("parameterEncoding");
}
@@ -1578,20 +1595,21 @@ public final class CGIServlet extends Ht
Process proc = null;
int bufRead = -1;
- String[] cmdAndArgs = new String[params.size() + 2];
-
- cmdAndArgs[0] = cgiExecutable;
-
- cmdAndArgs[1] = command;
-
- //create query arguments
- for (int i=0; i < params.size(); i++) {
- cmdAndArgs[i + 2] = params.get(i);
+ List<String> cmdAndArgs = new ArrayList<String>();
+ if (cgiExecutable.length() != 0) {
+ cmdAndArgs.add(cgiExecutable);
+ }
+ if (cgiExecutableArgs != null) {
+ cmdAndArgs.addAll(cgiExecutableArgs);
}
+ cmdAndArgs.add(command);
+ cmdAndArgs.addAll(params);
try {
rt = Runtime.getRuntime();
- proc = rt.exec(cmdAndArgs, hashToStringArray(env), wd);
+ proc = rt.exec(
+ cmdAndArgs.toArray(new String[cmdAndArgs.size()]),
+ hashToStringArray(env), wd);
String sContentLength = env.get("CONTENT_LENGTH");
Modified: tomcat/trunk/webapps/docs/cgi-howto.xml
URL:
http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/cgi-howto.xml?rev=1061412&r1=1061411&r2=1061412&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/cgi-howto.xml (original)
+++ tomcat/trunk/webapps/docs/cgi-howto.xml Thu Jan 20 17:43:35 2011
@@ -80,9 +80,14 @@ The default cgiPathPrefix is <code>WEB-I
<li><strong>debug</strong> - Debugging detail level for messages logged
by this servlet. Default 0.</li>
<li><strong>executable</strong> - The of the executable to be used to
-run the script. Default is <code>perl</code>.</li>
+run the script. You may explicitly set this parameter to be an empty string
+if your script is itself executable (e.g. an exe file). Default is
+<code>perl</code>.</li>
+<li><strong>executable-arg-1</strong>, <strong>executable-arg-2</strong>,
+and so on - additional arguments for the executable. These precede the
+CGI script name. By default there are no additional arguments.</li>
<li><strong>parameterEncoding</strong> - Name of the parameter encoding
-to be used with the GCI servlet. Default is
+to be used with the CGI servlet. Default is
<code>System.getProperty("file.encoding","UTF-8")</code>.</li>
<li><strong>passShellEnvironment</strong> - Should the shell environment
variables (if any) be passed to the CGI script? Default is
Modified: tomcat/trunk/webapps/docs/changelog.xml
URL:
http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1061412&r1=1061411&r2=1061412&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/trunk/webapps/docs/changelog.xml Thu Jan 20 17:43:35 2011
@@ -148,6 +148,12 @@
<fix>
<bug>50601</bug>: Code clean-up. Patch provided by sebb. (markt)
</fix>
+ <fix>
+ <bug>50606</bug>: Improve CGIServlet: Provide support for specifying
+ empty value for the <code>executable</code> init-param. Provide support
+ for explicit additional arguments for the executable. Those were
+ broken when implementing fix for bug <bug>49657</bug>. (kkolinko)
+ </fix>
</changelog>
</subsection>
</section>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]