[package] add directory option to spawn-fcgi (#4355), thanks Raphael
authorFlorian Fainelli <florian@openwrt.org>
Thu, 29 Jan 2009 16:07:29 +0000 (16:07 +0000)
committerFlorian Fainelli <florian@openwrt.org>
Thu, 29 Jan 2009 16:07:29 +0000 (16:07 +0000)
SVN-Revision: 14266

net/lighttpd/Makefile
net/lighttpd/patches/100-spawn-fcgi_new_opt_directory.patch [new file with mode: 0644]

index 1508dbd9a2ff04591a0fce73fc4ac57b8e8ad9ba..555a50cca25cb849967f37e7560d2725d6cf008f 100644 (file)
@@ -10,7 +10,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=lighttpd
 PKG_VERSION:=1.4.20
-PKG_RELEASE:=2
+PKG_RELEASE:=3
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
 PKG_SOURCE_URL:=http://www.lighttpd.net/download/
diff --git a/net/lighttpd/patches/100-spawn-fcgi_new_opt_directory.patch b/net/lighttpd/patches/100-spawn-fcgi_new_opt_directory.patch
new file mode 100644 (file)
index 0000000..2fd9be8
--- /dev/null
@@ -0,0 +1,63 @@
+--- 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() {