fielding 97/05/08 00:32:34
Modified: src CHANGES util_script.c Log: The method for determining PATH_INFO has been restored to the pre-1.2b (and NCSA httpd) implementation wherein it was the extra path info beyond the CGI script filename. The environment variable FILEPATH_INFO has been removed, and instead we supply the original REQUEST_URI to any script that wants to be Apache-specific and needs the real URI path. This solves a problem with existing scripts that use extra path info in the ScriptAlias directive to pass options to the CGI script. Reviewed by: Jim Jagielski, Paul Sutton Revision Changes Path 1.266 +10 -0 apache/src/CHANGES Index: CHANGES =================================================================== RCS file: /export/home/cvs/apache/src/CHANGES,v retrieving revision 1.265 retrieving revision 1.266 diff -C3 -r1.265 -r1.266 *** CHANGES 1997/05/04 20:28:13 1.265 --- CHANGES 1997/05/08 07:32:32 1.266 *************** *** 1,5 **** --- 1,14 ---- Changes with Apache 1.2 + *) The method for determining PATH_INFO has been restored to the pre-1.2b + (and NCSA httpd) definition wherein it was the extra path info beyond + the CGI script filename. The environment variable FILEPATH_INFO has + been removed, and instead we supply the original REQUEST_URI to any + script that wants to be Apache-specific and needs the real URI path. + This solves a problem with existing scripts that use extra path info + in the ScriptAlias directive to pass options to the CGI script. + [Roy Fielding] + *) The _default_ change in 1.2b10 will change the behaviour on configs that use multiple Listen statements for listening on multiple ports. But that change is necessary to make _default_ consistent with other *************** *** 705,710 **** --- 714,720 ---- *) Add FILEPATH_INFO variable to CGI environment, which is equal to PATH_INFO from previous versions of Apache (in certain situations, Apache 1.2's PATH_INFO will be different than 1.1's). [Alexei Kosut] + [later removed in 1.2b11] *) Add rwrite() function to API to allow for sending strings of arbitrary length. [Doug MacEachern] 1.57 +18 -13 apache/src/util_script.c Index: util_script.c =================================================================== RCS file: /export/home/cvs/apache/src/util_script.c,v retrieving revision 1.56 retrieving revision 1.57 diff -C3 -r1.56 -r1.57 *** util_script.c 1997/04/29 04:45:52 1.56 --- util_script.c 1997/05/08 07:32:32 1.57 *************** *** 238,243 **** --- 238,257 ---- return lu; } + static char *original_uri(request_rec *r) + { + char *last; + char *first = r->the_request; + + while (*first && !isspace(*first)) ++first; + while (isspace(*first)) ++first; + + last = first; + while (*last && !isspace(*last)) ++last; + + return pstrndup(r->pool, first, last - first); + } + void add_cgi_vars(request_rec *r) { table *e = r->subprocess_env; *************** *** 246,252 **** table_set (e, "SERVER_PROTOCOL", r->protocol); table_set (e, "REQUEST_METHOD", r->method); table_set (e, "QUERY_STRING", r->args ? r->args : ""); ! /* Note that the code below special-cases scripts run from includes, * because it "knows" that the sub_request has been hacked to have the * args and path_info of the original request, and not any that may have --- 260,267 ---- table_set (e, "SERVER_PROTOCOL", r->protocol); table_set (e, "REQUEST_METHOD", r->method); table_set (e, "QUERY_STRING", r->args ? r->args : ""); ! table_set (e, "REQUEST_URI", original_uri(r)); ! /* Note that the code below special-cases scripts run from includes, * because it "knows" that the sub_request has been hacked to have the * args and path_info of the original request, and not any that may have *************** *** 264,283 **** table_set (e, "SCRIPT_NAME", pstrndup(r->pool, r->uri, path_info_start)); ! table_set (e, "PATH_INFO", r->uri + path_info_start); } - /* Some CGI apps need the old-style PATH_INFO (taken from the - * filename, not the URL), so we provide it in a different env - * variable. CGI scripts can use something like (in Perl) - * $path_info = $ENV{'FILEPATH_INFO'} || $ENV{'PATH_INFO'}; - * to get the right information with both old and new - * versions of Apache (and other servers). - */ - - if (r->path_info && *r->path_info) - table_set (e, "FILEPATH_INFO", r->path_info); - if (r->path_info && r->path_info[0]) { /* * To get PATH_TRANSLATED, treat PATH_INFO as a URI path. --- 279,288 ---- table_set (e, "SCRIPT_NAME", pstrndup(r->pool, r->uri, path_info_start)); ! ! table_set (e, "PATH_INFO", r->path_info); } if (r->path_info && r->path_info[0]) { /* * To get PATH_TRANSLATED, treat PATH_INFO as a URI path.