259e420032
git-svn-id: svn://svn.openwrt.org/openwrt/packages@14266 3c298f89-4303-0410-b956-a3cf2f4a3e73
64 lines
2.4 KiB
Diff
64 lines
2.4 KiB
Diff
--- lighttpd-1.4.20.orig/src/spawn-fcgi.c 2008-09-30 10:53:27.000000000 +0200
|
|
+++ lighttpd-1.4.20/src/spawn-fcgi.c 2008-09-30 10:53:41.000000000 +0200
|
|
@@ -37,7 +37,7 @@ typedef int socklen_t;
|
|
#endif
|
|
|
|
#ifdef HAVE_SYS_UN_H
|
|
-int fcgi_spawn_connection(char *appPath, char **appArgv, char *addr, unsigned short port, const char *unixsocket, int fork_count, int child_count, int pid_fd, int nofork) {
|
|
+int fcgi_spawn_connection(char *appPath, const char *fcgi_dir, char **appArgv, char *addr, unsigned short port, const char *unixsocket, int fork_count, int child_count, int pid_fd, int nofork) {
|
|
int fcgi_fd;
|
|
int socket_type, status, rc = 0;
|
|
struct timeval tv = { 0, 100 * 1000 };
|
|
@@ -184,6 +184,13 @@ int fcgi_spawn_connection(char *appPath,
|
|
strcat(b, appPath);
|
|
|
|
/* exec the cgi */
|
|
+ if(fcgi_dir)
|
|
+ {
|
|
+ if(chdir(fcgi_dir) != 0)
|
|
+ {
|
|
+ exit(errno);
|
|
+ }
|
|
+ }
|
|
execl("/bin/sh", "sh", "-c", b, (char *)NULL);
|
|
}
|
|
|
|
@@ -273,6 +280,7 @@ void show_help () {
|
|
"\n" \
|
|
"Options:\n" \
|
|
" -f <fcgiapp> filename of the fcgi-application\n" \
|
|
+" -d <dir> chdir to directory before spawning\n" \
|
|
" -a <addr> bind to ip address\n" \
|
|
" -p <port> bind to tcp-port\n" \
|
|
" -s <path> bind to unix-domain socket\n" \
|
|
@@ -292,7 +300,7 @@ void show_help () {
|
|
|
|
|
|
int main(int argc, char **argv) {
|
|
- char *fcgi_app = NULL, *changeroot = NULL, *username = NULL,
|
|
+ char *fcgi_app = NULL, *fcgi_dir = NULL, *changeroot = NULL, *username = NULL,
|
|
*groupname = NULL, *unixsocket = NULL, *pid_file = NULL,
|
|
*addr = NULL;
|
|
char **fcgi_app_argv = { NULL };
|
|
@@ -306,9 +314,10 @@ int main(int argc, char **argv) {
|
|
|
|
i_am_root = (getuid() == 0);
|
|
|
|
- while (-1 != (o = getopt(argc, argv, "c:f:g:hna:p:u:vC:F:s:P:"))) {
|
|
+ while(-1 != (o = getopt(argc, argv, "c:f:d:g:hna:p:u:vC:s:P:"))) {
|
|
switch(o) {
|
|
case 'f': fcgi_app = optarg; break;
|
|
+ case 'd': fcgi_dir = optarg; break;
|
|
case 'a': addr = optarg;/* ip addr */ break;
|
|
case 'p': port = strtol(optarg, NULL, 10);/* port */ break;
|
|
case 'C': child_count = strtol(optarg, NULL, 10);/* */ break;
|
|
@@ -471,7 +480,7 @@ int main(int argc, char **argv) {
|
|
}
|
|
}
|
|
|
|
- return fcgi_spawn_connection(fcgi_app, fcgi_app_argv, addr, port, unixsocket, fork_count, child_count, pid_fd, nofork);
|
|
+ return fcgi_spawn_connection(fcgi_app, fcgi_dir, fcgi_app_argv, addr, port, unixsocket, fork_count, child_count, pid_fd, nofork);
|
|
}
|
|
#else
|
|
int main() {
|