aboutsummaryrefslogtreecommitdiff
path: root/networking/httpd.c
diff options
context:
space:
mode:
Diffstat (limited to 'networking/httpd.c')
-rw-r--r--networking/httpd.c109
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
1990enum 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
1995static const char httpd_opts[]="c:d:h:" 2001static 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));