My previous attempt to chdir(2) to the directory containing the cgi
authorflorian <florian@openbsd.org>
Wed, 16 Apr 2014 14:43:43 +0000 (14:43 +0000)
committerflorian <florian@openbsd.org>
Wed, 16 Apr 2014 14:43:43 +0000 (14:43 +0000)
script was not quite right. slowcgi would try to chdir("") with a
SCRIPT_NAME of /foo.cgi; chdir("/") in that case.
I'm not sure how one would configure nginx/slowcgi to get to that
point though.
OK benno@

usr.sbin/slowcgi/slowcgi.c

index 215c466..c27a74e 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: slowcgi.c,v 1.30 2014/04/14 19:25:48 florian Exp $ */
+/*     $OpenBSD: slowcgi.c,v 1.31 2014/04/16 14:43:43 florian Exp $ */
 /*
  * Copyright (c) 2013 David Gwynne <dlg@openbsd.org>
  * Copyright (c) 2013 Florian Obser <florian@openbsd.org>
@@ -894,10 +894,15 @@ exec_cgi(struct request *c)
 
                path = strrchr(c->script_name, '/');
                if (path != NULL) {
-                       *path = '\0';
-                       if (chdir(c->script_name) == -1)
-                               lwarn("cannot chdir to %s", c->script_name);
-                       *path = '/';
+                       if (path != c->script_name) {
+                               *path = '\0';
+                               if (chdir(c->script_name) == -1)
+                                       lwarn("cannot chdir to %s",
+                                           c->script_name);
+                               *path = '/';
+                       } else
+                               if (chdir("/") == -1)
+                                       lwarn("cannot chdir to /");
                }
 
                argv[0] = c->script_name;