On Feb 26, 2008, at 12:44 PM, Binger David wrote:
This looks like a problem the scgi module in lighttpd, where the
SCRIPT_NAME value is first set.  It could just be a bug, or perhaps
there is a way to control the SCRIPT_NAME by configuration?

I don't think QP has any code that could set the SCRIPT_NAME
to a nonempty value.

There is a similar web server bug for which QP provides a workaround
(setting a "script_name" value in the publisher's dictionary).
In that situation, we are dealing with web servers that put the full
path in the SCRIPT_NAME and leave PATH_INFO unset.
The case you describe looks similar, and I guess we could put
a similar hack to deal with it in qp.hub.web.SCGIHandler.handle_connection(),
but it would be nicer to fix it at the source.

I see that code -- but if this were a bug it would be more difficult to tell whether the non-empty script_name is erroneous or not.

Playing with the echo test site some more, I discovered that setting the <extension> on which the scgi handler matches to be "" (empty), then the echo site behaves as I would expect it. I.e. the previous lighttpd conf becomes:

$HTTP["host"] == "echo.example.com" {
   server.name = "echo.example.com"
   server.document-root = "/srv/www"
   scgi.server = (
        "" => (
           (
             "host" => "127.0.0.1",
             "port" => 11001,
             "check-local" => "disable",
             "max-procs" => 1,
           ),
       ),
   )
}

I had tried an empty string <extension> earlier, but on another site on a different publisher... and the result was an infinite redirection loop. As it turns out, I had added a hack fix similar to above for a condition on apache2... this one was was using the SCRIPT_FILENAME (when not set, nothing changes). The condition it was trying to fix is:

# Handle case when site is deployed under a script, but the requested # url ends with precisely the SCRIPT_NAME (with nothing trailing it). # This erroneously (on Apache2) gives an empty string SCRIPT_NAME and # a PATH_INFO set to the what the SCRIPT_NAME should be -- this breaks
    # any dynamically calculated relative url paths.
    #
# Assumption here is that if SCRIPT_FILENAME (not part of the CGI 1.1
    # spec) is set, then it must end with the (non-empty) SCRIPT_NAME.

I had placed the check in Publisher.process_inputs(). Removing this check makes the site behave as the echo site.

Incidentally ligthtpd (1.4.18) *is* setting the SCRIPT_FILENAME here... and fwiw it seems to follow the logic below (that may not be correct -- in this case SCRIPT_FILENAME is not in any way related to the server's static document root):

    if SCRIPT_NAME:
        SCRIPT_FILENAME = document-root + SCRIPT_NAME
    else:
        SCRIPT_FILENAME = document-root + REQUEST_URI

So, with the above config, requesting http://echo.example.com/xx/yy will give:
'SCRIPT_FILENAME': '/src/www/xx/yy'

Anyhow, long-winded way of saying that what the lighttpd conf's <extension> on which an scgi handler matches may be could be made clearer, and combined with other attempt I assumed it is not allowed to be empty... the complete doc I found on it is rather thin:
<extension>: is the file-extension or prefix (if started with "/")

So, no changes to qp necessary ;-)

mario

_______________________________________________
QP mailing list
[email protected]
http://mail.mems-exchange.org/mailman/listinfo/qp

Reply via email to