aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorvda <vda@69ca8d6d-28ef-0310-b511-8ec308f3f277>2006-11-05 19:47:33 +0000
committervda <vda@69ca8d6d-28ef-0310-b511-8ec308f3f277>2006-11-05 19:47:33 +0000
commitc6557001e444a1d816e3925423662ce69d293def (patch)
tree5f71407f674ace66cce45614966ed2207c09b102
parentd8df0a9bd2e6fdc7a30156ed4114808b1ff1e3fb (diff)
downloadbusybox-w32-c6557001e444a1d816e3925423662ce69d293def.tar.gz
busybox-w32-c6557001e444a1d816e3925423662ce69d293def.tar.bz2
busybox-w32-c6557001e444a1d816e3925423662ce69d293def.zip
httpd: sendCgi() forked child needs to close opened
server socket and accepted socket git-svn-id: svn://busybox.net/trunk/busybox@16516 69ca8d6d-28ef-0310-b511-8ec308f3f277
-rw-r--r--networking/httpd.c48
1 files changed, 20 insertions, 28 deletions
diff --git a/networking/httpd.c b/networking/httpd.c
index b982cb12f..3b12df673 100644
--- a/networking/httpd.c
+++ b/networking/httpd.c
@@ -161,6 +161,7 @@ typedef struct {
161#endif 161#endif
162 162
163#if ENABLE_FEATURE_HTTPD_WITHOUT_INETD 163#if ENABLE_FEATURE_HTTPD_WITHOUT_INETD
164 int server_socket;
164 int accepted_socket; 165 int accepted_socket;
165# define a_c_r config->accepted_socket 166# define a_c_r config->accepted_socket
166# define a_c_w config->accepted_socket 167# define a_c_w config->accepted_socket
@@ -1038,6 +1039,9 @@ static int sendCgi(const char *url,
1038 close(fromCgi[0]); 1039 close(fromCgi[0]);
1039 close(fromCgi[1]); 1040 close(fromCgi[1]);
1040 1041
1042 close(config->accepted_socket);
1043 close(config->server_socket);
1044
1041 /* 1045 /*
1042 * Find PATH_INFO. 1046 * Find PATH_INFO.
1043 */ 1047 */
@@ -1861,15 +1865,23 @@ static void sighup_handler(int sig)
1861} 1865}
1862#endif 1866#endif
1863 1867
1864enum httpd_opts_nums { 1868enum {
1865 c_opt_config_file = 0, 1869 c_opt_config_file = 0,
1866 d_opt_decode_url, 1870 d_opt_decode_url,
1867 h_opt_home_httpd, 1871 h_opt_home_httpd,
1868 USE_FEATURE_HTTPD_ENCODE_URL_STR(e_opt_encode_url,) 1872 USE_FEATURE_HTTPD_ENCODE_URL_STR(e_opt_encode_url,)
1869 USE_FEATURE_HTTPD_BASIC_AUTH(r_opt_realm,) 1873 USE_FEATURE_HTTPD_BASIC_AUTH( r_opt_realm ,)
1870 USE_FEATURE_HTTPD_AUTH_MD5(m_opt_md5,) 1874 USE_FEATURE_HTTPD_AUTH_MD5( m_opt_md5 ,)
1871 USE_FEATURE_HTTPD_SETUID(u_opt_setuid,) 1875 USE_FEATURE_HTTPD_SETUID( u_opt_setuid ,)
1872 USE_FEATURE_HTTPD_WITHOUT_INETD(p_opt_port,) 1876 USE_FEATURE_HTTPD_WITHOUT_INETD( p_opt_port ,)
1877 OPT_CONFIG_FILE = 1 << c_opt_config_file,
1878 OPT_DECODE_URL = 1 << d_opt_decode_url,
1879 OPT_HOME_HTTPD = 1 << h_opt_home_httpd,
1880 OPT_ENCODE_URL = USE_FEATURE_HTTPD_ENCODE_URL_STR((1 << e_opt_encode_url)) + 0,
1881 OPT_REALM = USE_FEATURE_HTTPD_BASIC_AUTH( (1 << r_opt_realm )) + 0,
1882 OPT_MD5 = USE_FEATURE_HTTPD_AUTH_MD5( (1 << m_opt_md5 )) + 0,
1883 OPT_SETUID = USE_FEATURE_HTTPD_SETUID( (1 << u_opt_setuid )) + 0,
1884 OPT_PORT = USE_FEATURE_HTTPD_WITHOUT_INETD( (1 << p_opt_port )) + 0,
1873}; 1885};
1874 1886
1875static const char httpd_opts[] = "c:d:h:" 1887static const char httpd_opts[] = "c:d:h:"
@@ -1879,25 +1891,6 @@ static const char httpd_opts[] = "c:d:h:"
1879 USE_FEATURE_HTTPD_SETUID("u:") 1891 USE_FEATURE_HTTPD_SETUID("u:")
1880 USE_FEATURE_HTTPD_WITHOUT_INETD("p:"); 1892 USE_FEATURE_HTTPD_WITHOUT_INETD("p:");
1881 1893
1882#define OPT_CONFIG_FILE (1<<c_opt_config_file)
1883#define OPT_DECODE_URL (1<<d_opt_decode_url)
1884#define OPT_HOME_HTTPD (1<<h_opt_home_httpd)
1885
1886#define OPT_ENCODE_URL USE_FEATURE_HTTPD_ENCODE_URL_STR((1<<e_opt_encode_url)) \
1887 SKIP_FEATURE_HTTPD_ENCODE_URL_STR(0)
1888
1889#define OPT_REALM USE_FEATURE_HTTPD_BASIC_AUTH((1<<r_opt_realm)) \
1890 SKIP_FEATURE_HTTPD_BASIC_AUTH(0)
1891
1892#define OPT_MD5 USE_FEATURE_HTTPD_AUTH_MD5((1<<m_opt_md5)) \
1893 SKIP_FEATURE_HTTPD_AUTH_MD5(0)
1894
1895#define OPT_SETUID USE_FEATURE_HTTPD_SETUID((1<<u_opt_setuid)) \
1896 SKIP_FEATURE_HTTPD_SETUID(0)
1897
1898#define OPT_PORT USE_FEATURE_HTTPD_WITHOUT_INETD((1<<p_opt_port)) \
1899 SKIP_FEATURE_HTTPD_WITHOUT_INETD(0)
1900
1901 1894
1902int httpd_main(int argc, char *argv[]) 1895int httpd_main(int argc, char *argv[])
1903{ 1896{
@@ -1906,7 +1899,6 @@ int httpd_main(int argc, char *argv[])
1906 char *url_for_decode; 1899 char *url_for_decode;
1907 USE_FEATURE_HTTPD_ENCODE_URL_STR(const char *url_for_encode;) 1900 USE_FEATURE_HTTPD_ENCODE_URL_STR(const char *url_for_encode;)
1908 USE_FEATURE_HTTPD_WITHOUT_INETD(const char *s_port;) 1901 USE_FEATURE_HTTPD_WITHOUT_INETD(const char *s_port;)
1909 USE_FEATURE_HTTPD_WITHOUT_INETD(int server;)
1910 1902
1911 USE_FEATURE_HTTPD_SETUID(const char *s_ugid = NULL;) 1903 USE_FEATURE_HTTPD_SETUID(const char *s_ugid = NULL;)
1912 USE_FEATURE_HTTPD_SETUID(struct bb_uidgid_t ugid;) 1904 USE_FEATURE_HTTPD_SETUID(struct bb_uidgid_t ugid;)
@@ -1974,7 +1966,7 @@ int httpd_main(int argc, char *argv[])
1974 1966
1975 xchdir(home_httpd); 1967 xchdir(home_httpd);
1976#if ENABLE_FEATURE_HTTPD_WITHOUT_INETD 1968#if ENABLE_FEATURE_HTTPD_WITHOUT_INETD
1977 server = openServer(); 1969 config->server_socket = openServer();
1978# ifdef CONFIG_FEATURE_HTTPD_SETUID 1970# ifdef CONFIG_FEATURE_HTTPD_SETUID
1979 /* drop privileges */ 1971 /* drop privileges */
1980 if (opt & OPT_SETUID) { 1972 if (opt & OPT_SETUID) {
@@ -2012,9 +2004,9 @@ int httpd_main(int argc, char *argv[])
2012 2004
2013#if ENABLE_FEATURE_HTTPD_WITHOUT_INETD 2005#if ENABLE_FEATURE_HTTPD_WITHOUT_INETD
2014# if !DEBUG 2006# if !DEBUG
2015 xdaemon(1, 0); /* don't change curent directory */ 2007 xdaemon(1, 0); /* don't change current directory */
2016# endif 2008# endif
2017 return miniHttpd(server); 2009 return miniHttpd(config->server_socket);
2018#else 2010#else
2019 return miniHttpd(); 2011 return miniHttpd();
2020#endif 2012#endif