diff options
author | vda <vda@69ca8d6d-28ef-0310-b511-8ec308f3f277> | 2006-11-05 19:47:33 +0000 |
---|---|---|
committer | vda <vda@69ca8d6d-28ef-0310-b511-8ec308f3f277> | 2006-11-05 19:47:33 +0000 |
commit | c6557001e444a1d816e3925423662ce69d293def (patch) | |
tree | 5f71407f674ace66cce45614966ed2207c09b102 | |
parent | d8df0a9bd2e6fdc7a30156ed4114808b1ff1e3fb (diff) | |
download | busybox-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.c | 48 |
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 | ||
1864 | enum httpd_opts_nums { | 1868 | enum { |
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 | ||
1875 | static const char httpd_opts[] = "c:d:h:" | 1887 | static 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 | ||
1902 | int httpd_main(int argc, char *argv[]) | 1895 | int 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 |