svn commit: trunk/busybox/networking

vda at busybox.net vda at busybox.net
Mon Feb 11 16:26:22 UTC 2008


Author: vda
Date: 2008-02-11 08:26:22 -0800 (Mon, 11 Feb 2008)
New Revision: 20983

Log:
httpd: fix bug where we did chdir("") if CGI path had only one "/".
httpd: fix bug 2004: wrong argv when interpreter is invoked

+8 bytes growth



Modified:
   trunk/busybox/networking/httpd.c


Changeset:
Modified: trunk/busybox/networking/httpd.c
===================================================================
--- trunk/busybox/networking/httpd.c	2008-02-11 13:26:54 UTC (rev 20982)
+++ trunk/busybox/networking/httpd.c	2008-02-11 16:26:22 UTC (rev 20983)
@@ -1417,37 +1417,39 @@
 		 * If CGI really wants that, it can always do dup itself. */
 		/* dup2(1, 2); */
 
-		/* script must have absolute path */
 		script = strrchr(fullpath, '/');
 		//fullpath is a result of concat_path_file and always has '/'
 		//if (!script)
 		//	goto error_execing_cgi;
 		*script = '\0';
 		/* chdiring to script's dir */
-		if (chdir(fullpath) == 0) {
-			char *argv[2];
+		if (chdir(script == fullpath ? "/" : fullpath) == 0) {
+			char *argv[3];
+
+			*script++ = '/'; /* repair fullpath */
+			/* set argv[0] to name without path */
+			argv[0] = script;
+			argv[1] = NULL;
+
 #if ENABLE_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR
-			char *interpr = NULL;
-			char *suffix = strrchr(purl, '.');
+			{
+				char *suffix = strrchr(script, '.');
 
-			if (suffix) {
-				Htaccess *cur;
-				for (cur = script_i; cur; cur = cur->next) {
-					if (strcmp(cur->before_colon + 1, suffix) == 0) {
-						interpr = cur->after_colon;
-						break;
+				if (suffix) {
+					Htaccess *cur;
+					for (cur = script_i; cur; cur = cur->next) {
+						if (strcmp(cur->before_colon + 1, suffix) == 0) {
+							/* found interpreter name */
+							fullpath = cur->after_colon;
+							argv[0] = cur->after_colon;
+							argv[1] = script;
+							argv[2] = NULL;
+							break;
+						}
 					}
 				}
 			}
 #endif
-			*script = '/';
-			/* set argv[0] to name without path */
-			argv[0] = script + 1;
-			argv[1] = NULL;
-#if ENABLE_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR
-			if (interpr)
-				fullpath = interpr;
-#endif
 			execv(fullpath, argv);
 			if (verbose)
 				bb_perror_msg("exec %s", fullpath);




More information about the busybox-cvs mailing list