aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--configs/mingw32_defconfig4
-rw-r--r--configs/mingw64_defconfig4
-rw-r--r--configs/mingw64a_defconfig4
-rw-r--r--configs/mingw64u_defconfig4
-rw-r--r--networking/httpd.c40
5 files changed, 38 insertions, 18 deletions
diff --git a/configs/mingw32_defconfig b/configs/mingw32_defconfig
index c5e108a30..94281b942 100644
--- a/configs/mingw32_defconfig
+++ b/configs/mingw32_defconfig
@@ -1,7 +1,7 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Busybox version: 1.37.0.git 3# Busybox version: 1.37.0.git
4# Sat Jan 20 09:32:45 2024 4# Sun Feb 11 11:01:45 2024
5# 5#
6CONFIG_HAVE_DOT_CONFIG=y 6CONFIG_HAVE_DOT_CONFIG=y
7# CONFIG_PLATFORM_POSIX is not set 7# CONFIG_PLATFORM_POSIX is not set
@@ -919,7 +919,7 @@ CONFIG_FEATURE_HTTPD_RANGES=y
919CONFIG_FEATURE_HTTPD_BASIC_AUTH=y 919CONFIG_FEATURE_HTTPD_BASIC_AUTH=y
920# CONFIG_FEATURE_HTTPD_AUTH_MD5 is not set 920# CONFIG_FEATURE_HTTPD_AUTH_MD5 is not set
921CONFIG_FEATURE_HTTPD_CGI=y 921CONFIG_FEATURE_HTTPD_CGI=y
922# CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR is not set 922CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR=y
923# CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV is not set 923# CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV is not set
924CONFIG_FEATURE_HTTPD_ENCODE_URL_STR=y 924CONFIG_FEATURE_HTTPD_ENCODE_URL_STR=y
925CONFIG_FEATURE_HTTPD_ERROR_PAGES=y 925CONFIG_FEATURE_HTTPD_ERROR_PAGES=y
diff --git a/configs/mingw64_defconfig b/configs/mingw64_defconfig
index 341da22d6..ac8bfee26 100644
--- a/configs/mingw64_defconfig
+++ b/configs/mingw64_defconfig
@@ -1,7 +1,7 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Busybox version: 1.37.0.git 3# Busybox version: 1.37.0.git
4# Sat Jan 20 09:32:45 2024 4# Sun Feb 11 11:01:45 2024
5# 5#
6CONFIG_HAVE_DOT_CONFIG=y 6CONFIG_HAVE_DOT_CONFIG=y
7# CONFIG_PLATFORM_POSIX is not set 7# CONFIG_PLATFORM_POSIX is not set
@@ -919,7 +919,7 @@ CONFIG_FEATURE_HTTPD_RANGES=y
919CONFIG_FEATURE_HTTPD_BASIC_AUTH=y 919CONFIG_FEATURE_HTTPD_BASIC_AUTH=y
920# CONFIG_FEATURE_HTTPD_AUTH_MD5 is not set 920# CONFIG_FEATURE_HTTPD_AUTH_MD5 is not set
921CONFIG_FEATURE_HTTPD_CGI=y 921CONFIG_FEATURE_HTTPD_CGI=y
922# CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR is not set 922CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR=y
923# CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV is not set 923# CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV is not set
924CONFIG_FEATURE_HTTPD_ENCODE_URL_STR=y 924CONFIG_FEATURE_HTTPD_ENCODE_URL_STR=y
925CONFIG_FEATURE_HTTPD_ERROR_PAGES=y 925CONFIG_FEATURE_HTTPD_ERROR_PAGES=y
diff --git a/configs/mingw64a_defconfig b/configs/mingw64a_defconfig
index 8eb8bbcfa..5cc75334d 100644
--- a/configs/mingw64a_defconfig
+++ b/configs/mingw64a_defconfig
@@ -1,7 +1,7 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Busybox version: 1.37.0.git 3# Busybox version: 1.37.0.git
4# Sat Jan 20 09:32:45 2024 4# Sun Feb 11 11:01:45 2024
5# 5#
6CONFIG_HAVE_DOT_CONFIG=y 6CONFIG_HAVE_DOT_CONFIG=y
7# CONFIG_PLATFORM_POSIX is not set 7# CONFIG_PLATFORM_POSIX is not set
@@ -919,7 +919,7 @@ CONFIG_FEATURE_HTTPD_RANGES=y
919CONFIG_FEATURE_HTTPD_BASIC_AUTH=y 919CONFIG_FEATURE_HTTPD_BASIC_AUTH=y
920# CONFIG_FEATURE_HTTPD_AUTH_MD5 is not set 920# CONFIG_FEATURE_HTTPD_AUTH_MD5 is not set
921CONFIG_FEATURE_HTTPD_CGI=y 921CONFIG_FEATURE_HTTPD_CGI=y
922# CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR is not set 922CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR=y
923# CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV is not set 923# CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV is not set
924CONFIG_FEATURE_HTTPD_ENCODE_URL_STR=y 924CONFIG_FEATURE_HTTPD_ENCODE_URL_STR=y
925CONFIG_FEATURE_HTTPD_ERROR_PAGES=y 925CONFIG_FEATURE_HTTPD_ERROR_PAGES=y
diff --git a/configs/mingw64u_defconfig b/configs/mingw64u_defconfig
index 4218c57a5..301d68c82 100644
--- a/configs/mingw64u_defconfig
+++ b/configs/mingw64u_defconfig
@@ -1,7 +1,7 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Busybox version: 1.37.0.git 3# Busybox version: 1.37.0.git
4# Sat Jan 20 09:32:45 2024 4# Sun Feb 11 11:01:45 2024
5# 5#
6CONFIG_HAVE_DOT_CONFIG=y 6CONFIG_HAVE_DOT_CONFIG=y
7# CONFIG_PLATFORM_POSIX is not set 7# CONFIG_PLATFORM_POSIX is not set
@@ -919,7 +919,7 @@ CONFIG_FEATURE_HTTPD_RANGES=y
919CONFIG_FEATURE_HTTPD_BASIC_AUTH=y 919CONFIG_FEATURE_HTTPD_BASIC_AUTH=y
920# CONFIG_FEATURE_HTTPD_AUTH_MD5 is not set 920# CONFIG_FEATURE_HTTPD_AUTH_MD5 is not set
921CONFIG_FEATURE_HTTPD_CGI=y 921CONFIG_FEATURE_HTTPD_CGI=y
922# CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR is not set 922CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR=y
923# CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV is not set 923# CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV is not set
924CONFIG_FEATURE_HTTPD_ENCODE_URL_STR=y 924CONFIG_FEATURE_HTTPD_ENCODE_URL_STR=y
925CONFIG_FEATURE_HTTPD_ERROR_PAGES=y 925CONFIG_FEATURE_HTTPD_ERROR_PAGES=y
diff --git a/networking/httpd.c b/networking/httpd.c
index 26656fd16..c76ce3658 100644
--- a/networking/httpd.c
+++ b/networking/httpd.c
@@ -1580,7 +1580,6 @@ static void cgi_handler(char **argv)
1580{ 1580{
1581 struct fd_pair fromCgi; /* CGI -> httpd pipe */ 1581 struct fd_pair fromCgi; /* CGI -> httpd pipe */
1582 struct fd_pair toCgi; /* httpd -> CGI pipe */ 1582 struct fd_pair toCgi; /* httpd -> CGI pipe */
1583 char *dir, *script;
1584 1583
1585 xfunc_error_retval = 242; 1584 xfunc_error_retval = 242;
1586 1585
@@ -1595,16 +1594,12 @@ static void cgi_handler(char **argv)
1595 xmove_fd(toCgi.rd, 0); /* replace stdin with the pipe */ 1594 xmove_fd(toCgi.rd, 0); /* replace stdin with the pipe */
1596 xmove_fd(fromCgi.wr, 1); /* replace stdout with the pipe */ 1595 xmove_fd(fromCgi.wr, 1); /* replace stdout with the pipe */
1597 1596
1598 dir = argv[1]; 1597 if (argv[1][0] && chdir_or_warn(argv[1]) != 0) {
1599 script = argv[2];
1600
1601 if (chdir_or_warn(dir) != 0) {
1602 goto error_execing_cgi; 1598 goto error_execing_cgi;
1603 } 1599 }
1604 1600
1605 /* set argv[0] to name without path */ 1601 /* set argv[0] to name without path */
1606 argv[0] = script; 1602 argv += 2;
1607 argv[1] = NULL;
1608 1603
1609 /* _NOT_ execvp. We do not search PATH. argv[0] is a filename 1604 /* _NOT_ execvp. We do not search PATH. argv[0] is a filename
1610 * without any dir components and will only match a file 1605 * without any dir components and will only match a file
@@ -1655,6 +1650,7 @@ static void send_cgi_and_exit(
1655 char *script, *last_slash; 1650 char *script, *last_slash;
1656 int pid; 1651 int pid;
1657#if ENABLE_PLATFORM_MINGW32 1652#if ENABLE_PLATFORM_MINGW32
1653 const char *script_dir;
1658 char **argv; 1654 char **argv;
1659#endif 1655#endif
1660 1656
@@ -1693,7 +1689,11 @@ static void send_cgi_and_exit(
1693 *script = '\0'; /* cut off /PATH_INFO */ 1689 *script = '\0'; /* cut off /PATH_INFO */
1694 1690
1695 /* SCRIPT_FILENAME is required by PHP in CGI mode */ 1691 /* SCRIPT_FILENAME is required by PHP in CGI mode */
1692#if ENABLE_PLATFORM_MINGW32
1693 if (!is_relative_path(home_httpd)) {
1694#else
1696 if (home_httpd[0] == '/') { 1695 if (home_httpd[0] == '/') {
1696#endif
1697 char *fullpath = concat_path_file(home_httpd, url); 1697 char *fullpath = concat_path_file(home_httpd, url);
1698 setenv1("SCRIPT_FILENAME", fullpath); 1698 setenv1("SCRIPT_FILENAME", fullpath);
1699 } 1699 }
@@ -1745,13 +1745,15 @@ static void send_cgi_and_exit(
1745 1745
1746#if ENABLE_PLATFORM_MINGW32 1746#if ENABLE_PLATFORM_MINGW32
1747 /* Find script's dir */ 1747 /* Find script's dir */
1748 script_dir = "";
1748 script = last_slash; 1749 script = last_slash;
1749 if (script != url) { /* paranoia */ 1750 if (script != url) { /* paranoia */
1750 *script = '\0'; 1751 *script = '\0';
1752 script_dir = url + 1;
1751 } 1753 }
1752 script++; 1754 script++;
1753 1755
1754 argv = xzalloc((server_argc + 8) * sizeof(char *)); 1756 argv = xzalloc((server_argc + 9) * sizeof(char *));
1755 argv[0] = (char *)bb_busybox_exec_path; 1757 argv[0] = (char *)bb_busybox_exec_path;
1756 argv[1] = (char *)"--busybox"; 1758 argv[1] = (char *)"--busybox";
1757 argv[2] = (char *)"-httpd"; // don't daemonise in main() 1759 argv[2] = (char *)"-httpd"; // don't daemonise in main()
@@ -1759,9 +1761,27 @@ static void send_cgi_and_exit(
1759 memcpy(argv + 4, server_argv, sizeof(*argv) * server_argc); 1761 memcpy(argv + 4, server_argv, sizeof(*argv) * server_argc);
1760 argv[server_argc + 4] = xasprintf("%d:%d:%d:%d", toCgi.wr, toCgi.rd, 1762 argv[server_argc + 4] = xasprintf("%d:%d:%d:%d", toCgi.wr, toCgi.rd,
1761 fromCgi.wr, fromCgi.rd); 1763 fromCgi.wr, fromCgi.rd);
1762 argv[server_argc + 5] = (char *)url + 1; // script directory 1764 argv[server_argc + 5] = (char *)script_dir; // script directory
1763 argv[server_argc + 6] = (char *)script; // script name 1765 argv[server_argc + 6] = (char *)script; // script name
1764 /* argv[server_argc + 7] = NULL; - xzalloc did it */ 1766
1767#if ENABLE_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR
1768 {
1769 char *suffix = strrchr(script, '.');
1770
1771 if (suffix) {
1772 Htaccess *cur;
1773 for (cur = script_i; cur; cur = cur->next) {
1774 if (strcmp(cur->before_colon + 1, suffix) == 0) {
1775 /* found interpreter name */
1776 argv[server_argc + 6] = (char *)cur->after_colon;
1777 argv[server_argc + 7] = (char *)script;
1778 break;
1779 }
1780 }
1781 }
1782 }
1783#endif
1784 /* argv[server_argc + N] = NULL; - xzalloc did it */
1765 1785
1766 pid = foreground ? mingw_spawn(argv) : mingw_spawn_detach(argv); 1786 pid = foreground ? mingw_spawn(argv) : mingw_spawn_detach(argv);
1767 if (pid == -1) 1787 if (pid == -1)