diff options
| -rw-r--r-- | fcgiwrap.8 | 6 | ||||
| -rw-r--r-- | fcgiwrap.c | 12 | 
2 files changed, 16 insertions, 2 deletions
@@ -28,6 +28,12 @@ that may need it).  .B \-c \fInumber\fP  Number of fcgiwrap processes to prefork.  .TP +.B \-f +Redirect STDERR output from executed CGI through FastCGI so it shows in the web server +error log.  Otherwise it would be returned on \fBfcgiwrap\fP's STDERR, which could be redirected. +If running through \fBspawn-fcgi\fP, \fBfcgiwrap\fP's STDERR is sent to /dev/null, so this option +provides a way to get that output back. +.TP  .B \-s \fIsocket_url\fP  A URL for the listen socket to bind to. By default \fBfcgiwrap\fP expects  a listen socket to be passed on file descriptor 0, matching the FastCGI convention. @@ -76,6 +76,8 @@ static const char * blacklisted_env_vars[] = {  	NULL,  }; +static int stderr_to_fastcgi = 0; +  #define FCGI_BUF_SIZE 4096 @@ -326,7 +328,10 @@ static void fcgi_pass(struct fcgi_context *fc)  			}  		}  		if (fc->fd_stderr >= 0 && FD_ISSET(fc->fd_stderr, &rset)) { -			err = fcgi_pass_raw_fd(&fc->fd_stderr, 2, buf, sizeof(buf)); +			if (stderr_to_fastcgi) +				err = fcgi_pass_fd(fc, &fc->fd_stderr, FCGI_stderr, buf, sizeof(buf)); +			else +				err = fcgi_pass_raw_fd(&fc->fd_stderr, 2, buf, sizeof(buf));  			if (err) {  				fcgi_finish(fc, err);  				return; @@ -739,8 +744,11 @@ int main(int argc, char **argv)  	char *socket_url = NULL;  	int c; -	while ((c = getopt(argc, argv, "c:hs:")) != -1) { +	while ((c = getopt(argc, argv, "c:hfs:")) != -1) {  		switch (c) { +			case 'f': +				stderr_to_fastcgi++; +				break;  			case 'h':  				printf("Usage: %s [OPTION]\nInvokes CGI scripts as FCGI.\n\n"  					PACKAGE_NAME" version "PACKAGE_VERSION"\n\n"  | 
