[git commit] httpd: permit non-default home directory with NOMMU enabled

Denys Vlasenko vda.linux at googlemail.com
Thu Apr 30 14:37:44 UTC 2020


commit: https://git.busybox.net/busybox/commit/?id=d1b75e1842b3e4f61daae2fb8a64d784a553f15c
branch: https://git.busybox.net/busybox/commit/?id=refs/heads/master

When BusyBox is compiled with NOMMU enabled running httpd with
the '-h' option fails even if the specified directory exists:

   $ ls -d www
   www
   $ busybox httpd  -fvvvp 8080 -h www
   ...
   ... try to access http://localhost:8080/www
   ...
   httpd: can't change directory to 'www': No such file or directory

The parent process executes xchdir("www").  When a connection is accepted
it's handled by re-executing httpd in inetd mode.  The child process
inherits the current directory "www" and tries to change directory again
to "www", which fails.

Omit the call to xchdir() when httpd is re-executed.

Signed-off-by: Ron Yorston <rmy at pobox.com>
Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 networking/httpd.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/networking/httpd.c b/networking/httpd.c
index 1757e09c9..c2d226592 100644
--- a/networking/httpd.c
+++ b/networking/httpd.c
@@ -2737,7 +2737,12 @@ int httpd_main(int argc UNUSED_PARAM, char **argv)
 	}
 #endif
 
-	xchdir(home_httpd);
+	/* Chdir to home (unless we were re-execed for NOMMU case:
+	 * we are already in the home dir then).
+	 */
+	if (!re_execed)
+		xchdir(home_httpd);
+
 	if (!(opt & OPT_INETD)) {
 		signal(SIGCHLD, SIG_IGN);
 		server_socket = openServer();


More information about the busybox-cvs mailing list