diff options
Diffstat (limited to 'networking/httpd.c')
-rw-r--r-- | networking/httpd.c | 109 |
1 files changed, 45 insertions, 64 deletions
diff --git a/networking/httpd.c b/networking/httpd.c index 99a87d186..9c8cbb05f 100644 --- a/networking/httpd.c +++ b/networking/httpd.c | |||
@@ -240,16 +240,12 @@ typedef struct | |||
240 | { | 240 | { |
241 | char buf[MAX_MEMORY_BUFF]; | 241 | char buf[MAX_MEMORY_BUFF]; |
242 | 242 | ||
243 | #ifdef CONFIG_FEATURE_HTTPD_BASIC_AUTH | 243 | USE_FEATURE_HTTPD_BASIC_AUTH(const char *realm;) |
244 | const char *realm; | 244 | USE_FEATURE_HTTPD_BASIC_AUTH(char *remoteuser;) |
245 | char *remoteuser; | ||
246 | #endif | ||
247 | 245 | ||
248 | const char *query; | 246 | const char *query; |
249 | 247 | ||
250 | #ifdef CONFIG_FEATURE_HTTPD_CGI | 248 | USE_FEATURE_HTTPD_CGI(char *referer;) |
251 | char *referer; | ||
252 | #endif | ||
253 | 249 | ||
254 | const char *configFile; | 250 | const char *configFile; |
255 | 251 | ||
@@ -1991,39 +1987,42 @@ static void sighup_handler(int sig) | |||
1991 | } | 1987 | } |
1992 | #endif | 1988 | #endif |
1993 | 1989 | ||
1990 | enum httpd_opts_nums { | ||
1991 | c_opt_config_file = 0, | ||
1992 | d_opt_decode_url, | ||
1993 | h_opt_home_httpd, | ||
1994 | USE_FEATURE_HTTPD_ENCODE_URL_STR(e_opt_encode_url,) | ||
1995 | USE_FEATURE_HTTPD_BASIC_AUTH(r_opt_realm,) | ||
1996 | USE_FEATURE_HTTPD_AUTH_MD5(m_opt_md5,) | ||
1997 | USE_FEATURE_HTTPD_SETUID(u_opt_setuid,) | ||
1998 | UNUSE_FEATURE_HTTPD_USAGE_FROM_INETD_ONLY(p_opt_port,) | ||
1999 | }; | ||
1994 | 2000 | ||
1995 | static const char httpd_opts[]="c:d:h:" | 2001 | static const char httpd_opts[]="c:d:h:" |
1996 | #ifdef CONFIG_FEATURE_HTTPD_ENCODE_URL_STR | 2002 | USE_FEATURE_HTTPD_ENCODE_URL_STR("e:") |
1997 | "e:" | 2003 | USE_FEATURE_HTTPD_BASIC_AUTH("r:") |
1998 | #endif | 2004 | USE_FEATURE_HTTPD_AUTH_MD5("m:") |
1999 | #define OPT_INC_1 ENABLE_FEATURE_HTTPD_ENCODE_URL_STR | 2005 | USE_FEATURE_HTTPD_SETUID("u:") |
2006 | UNUSE_FEATURE_HTTPD_USAGE_FROM_INETD_ONLY("p:"); | ||
2000 | 2007 | ||
2001 | #ifdef CONFIG_FEATURE_HTTPD_BASIC_AUTH | 2008 | #define OPT_CONFIG_FILE (1<<c_opt_config_file) |
2002 | "r:" | 2009 | #define OPT_DECODE_URL (1<<d_opt_decode_url) |
2003 | #endif | 2010 | #define OPT_HOME_HTTPD (1<<h_opt_home_httpd) |
2004 | #define OPT_INC_2 ENABLE_FEATURE_HTTPD_BASIC_AUTH | ||
2005 | 2011 | ||
2006 | #ifdef CONFIG_FEATURE_HTTPD_AUTH_MD5 | 2012 | #define OPT_ENCODE_URL USE_FEATURE_HTTPD_ENCODE_URL_STR((1<<e_opt_encode_url)) \ |
2007 | "m:" | 2013 | UNUSE_FEATURE_HTTPD_ENCODE_URL_STR(0) |
2008 | #endif | ||
2009 | #define OPT_INC_3 ENABLE_FEATURE_HTTPD_AUTH_MD5 | ||
2010 | 2014 | ||
2011 | #ifndef CONFIG_FEATURE_HTTPD_USAGE_FROM_INETD_ONLY | 2015 | #define OPT_REALM USE_FEATURE_HTTPD_BASIC_AUTH((1<<r_opt_realm)) \ |
2012 | "p:" | 2016 | UNUSE_FEATURE_HTTPD_BASIC_AUTH(0) |
2013 | #endif | 2017 | |
2014 | #ifdef CONFIG_FEATURE_HTTPD_SETUID | 2018 | #define OPT_MD5 USE_FEATURE_HTTPD_AUTH_MD5((1<<m_opt_md5)) \ |
2015 | "u:" | 2019 | UNUSE_FEATURE_HTTPD_AUTH_MD5(0) |
2016 | #endif | 2020 | |
2017 | ; | 2021 | #define OPT_SETUID USE_FEATURE_HTTPD_SETUID((1<<u_opt_setuid)) \ |
2022 | UNUSE_FEATURE_HTTPD_SETUID(0) | ||
2018 | 2023 | ||
2019 | #define OPT_CONFIG_FILE (1<<0) /* c */ | 2024 | #define OPT_PORT UNUSE_FEATURE_HTTPD_USAGE_FROM_INETD_ONLY((1<<p_opt_port)) \ |
2020 | #define OPT_DECODE_URL (1<<1) /* d */ | 2025 | USE_FEATURE_HTTPD_USAGE_FROM_INETD_ONLY(0) |
2021 | #define OPT_HOME_HTTPD (1<<2) /* h */ | ||
2022 | #define OPT_ENCODE_URL (1<<(2+OPT_INC_1)) /* e */ | ||
2023 | #define OPT_REALM (1<<(2+OPT_INC_1+OPT_INC_2)) /* r */ | ||
2024 | #define OPT_MD5 (1<<(2+OPT_INC_1+OPT_INC_2+OPT_INC_3)) /* m */ | ||
2025 | #define OPT_PORT (1<<(3+OPT_INC_1+OPT_INC_2+OPT_INC_3)) /* p */ | ||
2026 | #define OPT_SETUID (1<<(4+OPT_INC_1+OPT_INC_2+OPT_INC_3)) /* u */ | ||
2027 | 2026 | ||
2028 | 2027 | ||
2029 | #ifdef HTTPD_STANDALONE | 2028 | #ifdef HTTPD_STANDALONE |
@@ -2035,22 +2034,14 @@ int httpd_main(int argc, char *argv[]) | |||
2035 | unsigned long opt; | 2034 | unsigned long opt; |
2036 | const char *home_httpd = home; | 2035 | const char *home_httpd = home; |
2037 | char *url_for_decode; | 2036 | char *url_for_decode; |
2038 | #ifdef CONFIG_FEATURE_HTTPD_ENCODE_URL_STR | 2037 | USE_FEATURE_HTTPD_ENCODE_URL_STR(const char *url_for_encode;) |
2039 | const char *url_for_encode; | 2038 | UNUSE_FEATURE_HTTPD_USAGE_FROM_INETD_ONLY(const char *s_port;) |
2040 | #endif | 2039 | UNUSE_FEATURE_HTTPD_USAGE_FROM_INETD_ONLY(int server;) |
2041 | #ifndef CONFIG_FEATURE_HTTPD_USAGE_FROM_INETD_ONLY | ||
2042 | const char *s_port; | ||
2043 | int server; | ||
2044 | #endif | ||
2045 | 2040 | ||
2046 | #ifdef CONFIG_FEATURE_HTTPD_SETUID | 2041 | USE_FEATURE_HTTPD_SETUID(const char *s_uid;) |
2047 | const char *s_uid; | 2042 | USE_FEATURE_HTTPD_SETUID(long uid = -1;) |
2048 | long uid = -1; | ||
2049 | #endif | ||
2050 | 2043 | ||
2051 | #ifdef CONFIG_FEATURE_HTTPD_AUTH_MD5 | 2044 | USE_FEATURE_HTTPD_AUTH_MD5(const char *pass;) |
2052 | const char *pass; | ||
2053 | #endif | ||
2054 | 2045 | ||
2055 | config = xcalloc(1, sizeof(*config)); | 2046 | config = xcalloc(1, sizeof(*config)); |
2056 | #ifdef CONFIG_FEATURE_HTTPD_BASIC_AUTH | 2047 | #ifdef CONFIG_FEATURE_HTTPD_BASIC_AUTH |
@@ -2065,22 +2056,12 @@ int httpd_main(int argc, char *argv[]) | |||
2065 | 2056 | ||
2066 | opt = bb_getopt_ulflags(argc, argv, httpd_opts, | 2057 | opt = bb_getopt_ulflags(argc, argv, httpd_opts, |
2067 | &(config->configFile), &url_for_decode, &home_httpd | 2058 | &(config->configFile), &url_for_decode, &home_httpd |
2068 | #ifdef CONFIG_FEATURE_HTTPD_ENCODE_URL_STR | 2059 | USE_FEATURE_HTTPD_ENCODE_URL_STR(, &url_for_encode) |
2069 | , &url_for_encode | 2060 | USE_FEATURE_HTTPD_BASIC_AUTH(, &(config->realm)) |
2070 | #endif | 2061 | USE_FEATURE_HTTPD_AUTH_MD5(, &pass) |
2071 | #ifdef CONFIG_FEATURE_HTTPD_BASIC_AUTH | 2062 | USE_FEATURE_HTTPD_SETUID(, &s_uid) |
2072 | , &(config->realm) | 2063 | UNUSE_FEATURE_HTTPD_USAGE_FROM_INETD_ONLY(, &s_port) |
2073 | # ifdef CONFIG_FEATURE_HTTPD_AUTH_MD5 | 2064 | ); |
2074 | , &pass | ||
2075 | # endif | ||
2076 | #endif | ||
2077 | #ifndef CONFIG_FEATURE_HTTPD_USAGE_FROM_INETD_ONLY | ||
2078 | , &s_port | ||
2079 | #endif | ||
2080 | #ifdef CONFIG_FEATURE_HTTPD_SETUID | ||
2081 | , &s_uid | ||
2082 | #endif | ||
2083 | ); | ||
2084 | 2065 | ||
2085 | if(opt & OPT_DECODE_URL) { | 2066 | if(opt & OPT_DECODE_URL) { |
2086 | printf("%s", decodeString(url_for_decode, 1)); | 2067 | printf("%s", decodeString(url_for_decode, 1)); |