Hi,
It looks like there is a serious bug in the handling of virtual includes
with Apaches SSI filter.
Take the following code:
<html><body>
<!--#echo var="QUERY_STRING"-->
<!--#include virtual="/ssi2.php?abc=1"-->
<!--#echo var="QUERY_STRING"-->
</body></html>
If this is called with the query string "(url)?test=1" then the first echo
will print "test=1" as expected but the second one will output "abc=1".
Apparently the include in the middle completely obliterates the original
query string making it unusable for subsequent includes.
That's a major problem as soon as you use more than one SSI include with
QUERY_STRING in your pages.
According to the docs for "exec" the "CGI script is given the PATH_INFO and
query string (QUERY_STRING) of the original request from the client" and
"The include virtual element should be used in preference to exec cgi. In
particular, if you need to pass additional arguments to a CGI program,
using the query string, this cannot be done with exec cgi, but can be done
with include virtual, as shown here".
So I would expect the QUERY_STRING not to change when making virtual includes.
If I remove the following code from mod_include's output filter:
...
if (r->args) {
char *arg_copy = apr_pstrdup(r->pool, r->args);
apr_table_setn(r->subprocess_env, "QUERY_STRING", r->args);
ap_unescape_url(arg_copy);
apr_table_setn(r->subprocess_env, "QUERY_STRING_UNESCAPED",
ap_escape_shell_cmd(r->pool, arg_copy));
}
...
The QUERY STRING variable no longer gets changed and the called ssi2.php
still gets the "abc=1" as query string but I'm sure there is a reason for
this code to be there.
Regards,
Dennis
---------------------------------------------------------------------
The official User-To-User support forum of the Apache HTTP Server Project.
See <URL:http://httpd.apache.org/userslist.html> for more info.
To unsubscribe, e-mail: users-unsubscr...@httpd.apache.org
" from the digest: users-digest-unsubscr...@httpd.apache.org
For additional commands, e-mail: users-h...@httpd.apache.org