I am new to 5.0.16 but I have used Tomcat before in the Past. I think I configured my CGI settings correctly according to the documentation, I uncommented the servlet and servlet-mappings sections, renamed the Jar file. I also have .exe MIME mapped as an Application (the default values I didn't muck with any of these).

I am running on Windows 2000. My script is installed into ..\Root\WEB-INF\cgi\cgi.exe

I am trying to run a binary C-Style CGI script. It appears that tomcat is treating my .exe file as a Perl script. The 500 Error Output reads...

java.io.IOException: CreateProcess: perl "C:\Program Files\Apache Software Foundation\Tomcat 5.0\webapps\ROOT\WEB-INF\cgi\cgi.exe" error=2

I am not sure how to resolve this issue, it looks like from the error Tomcat thinks me exe is a perl script. I didn't know there was a specific configuration for how scripts are handled, it appears the MIME mappings are being ignored or are not used in script execution.

Any ideas, is there a way to unmap .exe to perl?

I know Tomcat is designed primarily for servlets, this is a special scenario where Tomcat cannot be substituted for Apache (and Apache runs the script A-OK).

---------- Below are specific details about the error msg and web.xml config settings -------------

Entire error:

2003-12-17 18:41:25 StandardContext[]cgi: findCGI: currentLoc=C:\Program Files\Apache Software Foundation\Tomcat 5.0\webapps\ROOT\WEB-INF\cgi
2003-12-17 18:41:25 StandardContext[]cgi: findCGI: FOUND cgi at C:\Program Files\Apache Software Foundation\Tomcat 5.0\webapps\ROOT\WEB-INF\cgi\cgi.exe
2003-12-17 18:41:25 StandardContext[]cgi: findCGI calc: name=cgi.exe, path=C:\Program Files\Apache Software Foundation\Tomcat 5.0\webapps\ROOT\WEB-INF\cgi\cgi.exe, scriptname=/cgi-bin\cgi.exe, cginame=\cgi.exe
2003-12-17 18:41:25 StandardContext[]cgi: runCGI(envp=[{HTTP_USER_AGENT=Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; iOpus-I-M; .NET CLR 1.0.3705; .NET CLR 1.1.4322), HTTP_ACCEPT_ENCODING=gzip, deflate, REQUEST_METHOD=GET, AUTH_TYPE=, HTTP_ACCEPT_LANGUAGE=en-us,de;q=0.5, SERVER_NAME=pinecone, SERVER_SOFTWARE=TOMCAT, HTTP_HOST=pinecone, GATEWAY_INTERFACE=CGI/1.1, X_TOMCAT_SCRIPT_PATH=C:\Program Files\Apache Software Foundation\Tomcat 5.0\webapps\ROOT\WEB-INF\cgi\cgi.exe, REMOTE_ADDR=192.168.1.144, SERVER_PROTOCOL=HTTP/1.1, PATH_INFO=, REMOTE_HOST=192.168.1.144, QUERY_STRING=command=LoginScreen, HTTP_CONNECTION=Keep-Alive, SERVER_PORT=8080, CONTENT_TYPE=, CONTENT_LENGTH=, SCRIPT_NAME=/cgi-bin\cgi.exe, HTTP_ACCEPT=*/*, REMOTE_USER=, REMOTE_IDENT=}], command=C:\Program Files\Apache Software Foundation\Tomcat 5.0\webapps\ROOT\WEB-INF\cgi\cgi.exe)
2003-12-17 18:41:25 StandardWrapperValve[cgi]: Servlet.service() for servlet cgi threw exception
java.io.IOException: CreateProcess: perl "C:\Program Files\Apache Software Foundation\Tomcat 5.0\webapps\ROOT\WEB-INF\cgi\cgi.exe" error=2
at java.lang.Win32Process.create(Native Method)
at java.lang.Win32Process.<init>(Win32Process.java:66)
at java.lang.Runtime.execInternal(Native Method)
at java.lang.Runtime.exec(Runtime.java:566)
at java.lang.Runtime.exec(Runtime.java:428)
at org.apache.catalina.servlets.CGIServlet$CGIRunner.run(CGIServlet.java:1578)
at org.apache.catalina.servlets.CGIServlet.doGet(CGIServlet.java:626)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:743)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:284)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:204)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:256)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:564)
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:245)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:199)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:564)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:195)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:164)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:149)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:564)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:156)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:564)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:972)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:211)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:805)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:696)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:605)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:677)
at java.lang.Thread.run(Thread.java:534)


Current Web.xml Config....


<servlet> <servlet-name>cgi</servlet-name> <servlet-class>org.apache.catalina.servlets.CGIServlet</servlet-class> <init-param> <param-name>clientInputTimeout</param-name> <param-value>100</param-value> </init-param> <init-param> <param-name>debug</param-name> <param-value>6</param-value> </init-param> <init-param> <param-name>cgiPathPrefix</param-name> <param-value>WEB-INF/cgi</param-value> </init-param> <load-on-startup>5</load-on-startup> </servlet>

   <!-- The mapping for the CGI Gateway servlet -->
    <servlet-mapping>
        <servlet-name>cgi</servlet-name>
        <url-pattern>/cgi-bin/*</url-pattern>
    </servlet-mapping>

-Pa

Reply via email to