hello,

I stumbled upon a problem with the CGI-enabled httpd. It seems that
httpd can't handle a CGI call with an appended PATH_INFO, if the
latter ends with a slash. httpd takes this as a call for a directory
listing and throws 404.

For further details you may take a look here:
https://lists.zx2c4.com/pipermail/cgit/2023-March/004825.html

I've attached a patch, which works for me, although my understanding
of the httpd.c code is only superficial.

Patch was generated by
diff -u networking/httpd.c networking/httpd.c.new >httpd.patch
against the busybox-1.34.1 tarball

Thanks a lot to the busybox developers for their outstanding work.

best regards
Andreas
--- networking/httpd.c	2021-06-16 12:02:16.000000000 +0200
+++ networking/httpd.c.new	2023-03-07 19:05:22.447075000 +0100
@@ -2426,11 +2426,14 @@
 	}
 #if ENABLE_FEATURE_HTTPD_CGI
 	else if (urlp[-1] == '/') {
-		/* It's a dir URL and there is no index.html */
-		/* Is there cgi-bin/index.cgi? */
-		if (access("/cgi-bin/index.cgi"+1, X_OK) != 0)
-			send_headers_and_exit(HTTP_NOT_FOUND); /* no */
-		cgi_type = CGI_INDEX;
+		if (cgi_type == CGI_NONE) {
+			/* It's a dir URL and there is no index.html */
+			/* Is there cgi-bin/index.cgi? */
+			if (access("/cgi-bin/index.cgi"+1, X_OK) != 0) {
+				send_headers_and_exit(HTTP_NOT_FOUND); /* no */
+			}
+			cgi_type = CGI_INDEX;
+		}
 	}
 #endif
 
_______________________________________________
busybox mailing list
[email protected]
http://lists.busybox.net/mailman/listinfo/busybox

Reply via email to