diff options
author | Grzegorz Nosek <root@localdomain.pl> | 2008-03-16 17:13:54 +0100 |
---|---|---|
committer | Grzegorz Nosek <root@localdomain.pl> | 2008-03-16 17:13:54 +0100 |
commit | 105dfa106c36e31b3f62c166cc46b97a6b0f7f51 (patch) | |
tree | 0770fc135196733406d22ec04932984a52a534d8 | |
parent | 30c399dbc542f7b4d983e196d7c5eafd5f8bffa0 (diff) | |
download | fcgiwrap-105dfa106c36e31b3f62c166cc46b97a6b0f7f51.tar.xz fcgiwrap-105dfa106c36e31b3f62c166cc46b97a6b0f7f51.zip |
Chdir to script's directory before exec (per CGI spec)
-rw-r--r-- | fcgiwrap.c | 15 |
1 files changed, 15 insertions, 0 deletions
@@ -236,6 +236,7 @@ static void handle_fcgi_request() int pipe_out[2]; int pipe_err[2]; char *filename; + char *last_slash; pid_t pid; struct fcgi_context fc; @@ -254,6 +255,20 @@ static void handle_fcgi_request() puts("Status: 403 Forbidden\nContent-type: text/plain\n\n403"); exit(99); } + + last_slash = strrchr(filename, '/'); + if (!last_slash) { + puts("Status: 403 Forbidden\nContent-type: text/plain\n\n403"); + exit(99); + } + + *last_slash = 0; + if (chdir(filename) < 0) { + puts("Status: 403 Forbidden\nContent-type: text/plain\n\n403"); + exit(99); + } + *last_slash = '/'; + close(pipe_in[1]); close(pipe_out[0]); close(pipe_err[0]); |