On Sun, Mar 16, 2014 at 04:01:04PM +0000, Florian Obser wrote: > On Fri, Mar 07, 2014 at 10:35:37PM -0500, James Turner wrote: > > On Fri, Mar 07, 2014 at 11:20:53PM +0000, Stuart Henderson wrote: > > > I've been umming and ahhing about this diff, the thing I don't like is > > > that SCRIPT_FILENAME is an Apache extension rather than part of the > > > standard CGI variables, which explains why it's not included by > > > default in nginx (or other servers that people might conceivably > > > want to use with slowcgi, such as lighttpd). > > > > > > Still, I don't see a better way to handle this, and replacing Apache > > > is going to need to support cgis outside of /cgi-bin one way or another. > > > But I do think it should fallback to using SCRIPT_NAME if the > > > SCRIPT_FILENAME variable isn't present, so that standard fastcgi > > > servers can use it to some extent too. > > > > > > > Maybe something like this? Using SCRIPT_FILENAME if present but falling > > back on SCRIPT_NAME. > > > > -- > > James Turner > > How about this? I don't see a reason to track SCRIPT_NAME vs. > SCRIPT_FILENAME through the whole daemon. c->script_name is just the > thing that get's execve'ed, it doesn't care where it's comming from. > > diff --git slowcgi.c slowcgi.c > index af07bd8..1b467f5 100644 > --- slowcgi.c > +++ slowcgi.c > @@ -741,7 +741,11 @@ parse_params(uint8_t *buf, uint16_t n, struct request > *c, uint16_t id) > > env_entry->val[name_len] = '\0'; > if (val_len < MAXPATHLEN && strcmp(env_entry->val, > - "SCRIPT_NAME") == 0) { > + "SCRIPT_NAME") == 0 && c->script_name[0] == '\0') { > + bcopy(buf, c->script_name, val_len); > + c->script_name[val_len] = '\0'; > + } else if (val_len < MAXPATHLEN && strcmp(env_entry->val, > + "SCRIPT_FILENAME") == 0) { > bcopy(buf, c->script_name, val_len); > c->script_name[val_len] = '\0'; > } > > -- > I'm not entirely sure you are real. >
I like it. SCRIPT_FILENAME is used when set otherwise it falls back on SCRIPT_NAME. Works with my test case were I have a cgi script in htdocs and need to set SCRIPT_FILENAME with something like: fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; and when I use /cgi-bin/ and don't set SCRIPT_FILENAME (current nginx cgi-bin example). ok jturner@ -- James Turner