haxx populi

Grails and CGI

by jja on
Topics:

Here's how to get CGI working in a Grails app.

Install a copy of web.xml:

grails install-templates

then edit it:

src/templates/war/web.xml

adding these elements in their appropriate sections. Some other instructions and the Tomcat encourage you to edit the main Tomcat web.xml, but that won't help you in development mode with grails run-app and also adds CGIs to all other webapps (if they're privileged).

First the servlet (there are other configurable parameters available):

    <!-- Common Gateway Interface (CGI) processing servlet -->
    <servlet>
        <servlet-name>cgi</servlet-name>
        <servlet-class>org.apache.catalina.servlets.CGIServlet</servlet-class>
        <init-param>
          <param-name>debug</param-name>
          <param-value>0</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>

and the servlet-mapping:

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

Here's the secret part. Edit scripts/Events.groovy to make your webapp privileged:

eventConfigureTomcat = { tomcat ->
    def ctx=tomcat.host.findChild(serverContextPath)
    ctx.privileged = true
}

Then put your CGI script in web-app/WEB-INF/cgi/

References

(comments are closed)