--- 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() {