diff options
author | Grzegorz Nosek <grzegorz.nosek@gmail.com> | 2011-12-08 12:57:00 -0800 |
---|---|---|
committer | Grzegorz Nosek <grzegorz.nosek@gmail.com> | 2011-12-08 12:57:00 -0800 |
commit | 13288627b4162ea417ab0edaff81648e0df82152 (patch) | |
tree | 63ada76770da7b206293b4d91a4c6793e18a3b4e | |
parent | 58ec209478f50b2048cff5805a4ff4176f3c230b (diff) | |
parent | 60f23550ae34c9a8b71f510132a5c1b87f109bbd (diff) | |
download | fcgiwrap-13288627b4162ea417ab0edaff81648e0df82152.tar.xz fcgiwrap-13288627b4162ea417ab0edaff81648e0df82152.zip |
Merge pull request #5 from goochjj/master
STDERR redirection back through the FCGI socket
-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" |