Skip to content
Browse files

Use SCRIPT_FILENAME environment variable when available

If present, it overrides DOCUMENT_ROOT and SCRIPT_NAME and prevents
mangling of PATH_INFO. Should allow cleaner configs when script names
don't come from request URIs directly.
  • Loading branch information...
1 parent 944dab4 commit 0bcd1284ed9bcccc71953db79943977672e0ea93 @gnosek gnosek committed
Showing with 16 additions and 4 deletions.
  1. +11 −3 fcgiwrap.8
  2. +5 −1 fcgiwrap.c
View
14 fcgiwrap.8
@@ -1,5 +1,5 @@
.\" Hey, EMACS: -*- nroff -*-
-.TH FCGIWRAP 8 "May 25, 2010"
+.TH FCGIWRAP 8 "Jun 2, 2010"
.\" Please adjust this date whenever revising the manpage.
.\"
.\" Some roff macros, for reference:
@@ -33,8 +33,12 @@ Show a help message and exit.
.SH ENVIRONMENT
When running, \fBfcgiwrap\fP evaluates these environment variables set by
-the web server calling a fcgi-scipt. These variables will be concatenated
-and the resulting executable run as CGI script wrapped as FastCGI.
+the web server calling an fcgi-script. The variables DOCUMENT_ROOT and
+SCRIPT_NAME will be concatenated and the resulting executable run as CGI
+script wrapped as FastCGI, with the remainder after the script name
+available as PATH_INFO. To disable PATH_INFO mangling, set up your web
+server to pass SCRIPT_FILENAME, which should contain the complete path to
+the script. Then PATH_INFO will not be modified.
DOCUMENT_ROOT
.RS
@@ -43,6 +47,10 @@ directory which the script resides in
SCRIPT_NAME
.RS
actual executable
+.RE
+SCRIPT_FILENAME
+.RS
+complete path to CGI script. When set, overrides DOCUMENT_ROOT and SCRIPT_NAME
.SH EXAMPLE
Most probably you will want to launch \fBfcgiwrap\fP by
View
6 fcgiwrap.c
@@ -368,6 +368,10 @@ char *get_cgi_filename() /* and fixup environment */
int rf_len;
char *pathinfo = NULL;
+ if ((p = getenv("SCRIPT_FILENAME"))) {
+ return strdup(p);
+ }
+
if ((p = getenv("DOCUMENT_ROOT"))) {
docroot = p;
docrootlen = strlen(p);
@@ -495,7 +499,7 @@ static void handle_fcgi_request()
filename = get_cgi_filename();
inherit_environment();
if (!filename)
- error_403("Cannot get script name, are DOCUMENT_ROOT and SCRIPT_NAME set and is the script executable?", NULL);
+ error_403("Cannot get script name, are DOCUMENT_ROOT and SCRIPT_NAME (or SCRIPT_FILENAME) set and is the script executable?", NULL);
last_slash = strrchr(filename, '/');
if (!last_slash)

0 comments on commit 0bcd128

Please sign in to comment.
Something went wrong with that request. Please try again.