|
@@ -1,6 +1,71 @@
|
|
|
|
+diff -urpN busybox-1.14.1/include/libbb.h busybox-1.14.1-httpd/include/libbb.h
|
|
|
|
+--- busybox-1.14.1/include/libbb.h 2009-05-27 18:01:37.000000000 +0200
|
|
|
|
++++ busybox-1.14.1-httpd/include/libbb.h 2009-06-12 09:07:39.000000000 +0200
|
|
|
|
+@@ -1099,6 +1099,8 @@ const char *get_signame(int number) FAST
|
|
|
|
+ void print_signames(void) FAST_FUNC;
|
|
|
|
+
|
|
|
|
+ char *bb_simplify_path(const char *path) FAST_FUNC;
|
|
|
|
++/* Returns ptr to NUL */
|
|
|
|
++char *bb_simplify_abs_path_inplace(char *path) FAST_FUNC;
|
|
|
|
+
|
|
|
|
+ #define FAIL_DELAY 3
|
|
|
|
+ extern void bb_do_delay(int seconds) FAST_FUNC;
|
|
|
|
+diff -urpN busybox-1.14.1/libbb/simplify_path.c busybox-1.14.1-httpd/libbb/simplify_path.c
|
|
|
|
+--- busybox-1.14.1/libbb/simplify_path.c 2009-05-27 18:00:23.000000000 +0200
|
|
|
|
++++ busybox-1.14.1-httpd/libbb/simplify_path.c 2009-06-03 12:50:48.000000000 +0200
|
|
|
|
+@@ -6,22 +6,13 @@
|
|
|
|
+ *
|
|
|
|
+ * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
|
|
|
|
+ */
|
|
|
|
+-
|
|
|
|
+ #include "libbb.h"
|
|
|
|
+
|
|
|
|
+-char* FAST_FUNC bb_simplify_path(const char *path)
|
|
|
|
++char* FAST_FUNC bb_simplify_abs_path_inplace(char *start)
|
|
|
|
+ {
|
|
|
|
+- char *s, *start, *p;
|
|
|
|
++ char *s, *p;
|
|
|
|
+
|
|
|
|
+- if (path[0] == '/')
|
|
|
|
+- start = xstrdup(path);
|
|
|
|
+- else {
|
|
|
|
+- s = xrealloc_getcwd_or_warn(NULL);
|
|
|
|
+- start = concat_path_file(s, path);
|
|
|
|
+- free(s);
|
|
|
|
+- }
|
|
|
|
+ p = s = start;
|
|
|
|
+-
|
|
|
|
+ do {
|
|
|
|
+ if (*p == '/') {
|
|
|
|
+ if (*s == '/') { /* skip duplicate (or initial) slash */
|
|
|
|
+@@ -47,7 +38,22 @@ char* FAST_FUNC bb_simplify_path(const c
|
|
|
|
+ if ((p == start) || (*p != '/')) { /* not a trailing slash */
|
|
|
|
+ ++p; /* so keep last character */
|
|
|
|
+ }
|
|
|
|
+- *p = 0;
|
|
|
|
++ *p = '\0';
|
|
|
|
++ return p;
|
|
|
|
++}
|
|
|
|
++
|
|
|
|
++char* FAST_FUNC bb_simplify_path(const char *path)
|
|
|
|
++{
|
|
|
|
++ char *s, *p;
|
|
|
|
++
|
|
|
|
++ if (path[0] == '/')
|
|
|
|
++ s = xstrdup(path);
|
|
|
|
++ else {
|
|
|
|
++ p = xrealloc_getcwd_or_warn(NULL);
|
|
|
|
++ s = concat_path_file(p, path);
|
|
|
|
++ free(p);
|
|
|
|
++ }
|
|
|
|
+
|
|
|
|
+- return start;
|
|
|
|
++ bb_simplify_abs_path_inplace(s);
|
|
|
|
++ return s;
|
|
|
|
+ }
|
|
diff -urpN busybox-1.14.1/networking/httpd.c busybox-1.14.1-httpd/networking/httpd.c
|
|
diff -urpN busybox-1.14.1/networking/httpd.c busybox-1.14.1-httpd/networking/httpd.c
|
|
--- busybox-1.14.1/networking/httpd.c 2009-05-27 18:00:23.000000000 +0200
|
|
--- busybox-1.14.1/networking/httpd.c 2009-05-27 18:00:23.000000000 +0200
|
|
-+++ busybox-1.14.1-httpd/networking/httpd.c 2009-06-09 20:40:57.000000000 +0200
|
|
|
|
|
|
++++ busybox-1.14.1-httpd/networking/httpd.c 2009-06-12 08:53:46.000000000 +0200
|
|
@@ -32,7 +32,7 @@
|
|
@@ -32,7 +32,7 @@
|
|
* foo=`httpd -d $foo` # decode "Hello%20World" as "Hello World"
|
|
* foo=`httpd -d $foo` # decode "Hello%20World" as "Hello World"
|
|
* bar=`httpd -e "<Hello World>"` # encode as "<Hello World>"
|
|
* bar=`httpd -e "<Hello World>"` # encode as "<Hello World>"
|
|
@@ -54,27 +119,6 @@ diff -urpN busybox-1.14.1/networking/httpd.c busybox-1.14.1-httpd/networking/htt
|
|
const char *home_httpd;
|
|
const char *home_httpd;
|
|
const char *index_page;
|
|
const char *index_page;
|
|
|
|
|
|
-@@ -250,13 +250,13 @@ struct globals {
|
|
|
|
- const char *found_moved_temporarily;
|
|
|
|
- Htaccess_IP *ip_a_d; /* config allow/deny lines */
|
|
|
|
-
|
|
|
|
-- USE_FEATURE_HTTPD_BASIC_AUTH(const char *g_realm;)
|
|
|
|
-- USE_FEATURE_HTTPD_BASIC_AUTH(char *remoteuser;)
|
|
|
|
-- USE_FEATURE_HTTPD_CGI(char *referer;)
|
|
|
|
-- USE_FEATURE_HTTPD_CGI(char *user_agent;)
|
|
|
|
-- USE_FEATURE_HTTPD_CGI(char *host;)
|
|
|
|
-- USE_FEATURE_HTTPD_CGI(char *http_accept;)
|
|
|
|
-- USE_FEATURE_HTTPD_CGI(char *http_accept_language;)
|
|
|
|
-+ IF_FEATURE_HTTPD_BASIC_AUTH(const char *g_realm;)
|
|
|
|
-+ IF_FEATURE_HTTPD_BASIC_AUTH(char *remoteuser;)
|
|
|
|
-+ IF_FEATURE_HTTPD_CGI(char *referer;)
|
|
|
|
-+ IF_FEATURE_HTTPD_CGI(char *user_agent;)
|
|
|
|
-+ IF_FEATURE_HTTPD_CGI(char *host;)
|
|
|
|
-+ IF_FEATURE_HTTPD_CGI(char *http_accept;)
|
|
|
|
-+ IF_FEATURE_HTTPD_CGI(char *http_accept_language;)
|
|
|
|
-
|
|
|
|
- off_t file_size; /* -1 - unknown */
|
|
|
|
- #if ENABLE_FEATURE_HTTPD_RANGES
|
|
|
|
@@ -289,7 +289,7 @@ struct globals {
|
|
@@ -289,7 +289,7 @@ struct globals {
|
|
#define rmt_ip (G.rmt_ip )
|
|
#define rmt_ip (G.rmt_ip )
|
|
#define bind_addr_or_port (G.bind_addr_or_port)
|
|
#define bind_addr_or_port (G.bind_addr_or_port)
|
|
@@ -84,15 +128,6 @@ diff -urpN busybox-1.14.1/networking/httpd.c busybox-1.14.1-httpd/networking/htt
|
|
#define home_httpd (G.home_httpd )
|
|
#define home_httpd (G.home_httpd )
|
|
#define index_page (G.index_page )
|
|
#define index_page (G.index_page )
|
|
#define found_mime_type (G.found_mime_type )
|
|
#define found_mime_type (G.found_mime_type )
|
|
-@@ -326,7 +326,7 @@ enum {
|
|
|
|
- #define proxy (G.proxy )
|
|
|
|
- #define INIT_G() do { \
|
|
|
|
- SET_PTR_TO_GLOBALS(xzalloc(sizeof(G))); \
|
|
|
|
-- USE_FEATURE_HTTPD_BASIC_AUTH(g_realm = "Web Server Authentication";) \
|
|
|
|
-+ IF_FEATURE_HTTPD_BASIC_AUTH(g_realm = "Web Server Authentication";) \
|
|
|
|
- bind_addr_or_port = "80"; \
|
|
|
|
- index_page = "index.html"; \
|
|
|
|
- file_size = -1; \
|
|
|
|
@@ -452,14 +452,6 @@ static int scan_ip_mask(const char *str,
|
|
@@ -452,14 +452,6 @@ static int scan_ip_mask(const char *str,
|
|
/*
|
|
/*
|
|
* Parse configuration file into in-memory linked list.
|
|
* Parse configuration file into in-memory linked list.
|
|
@@ -571,58 +606,6 @@ diff -urpN busybox-1.14.1/networking/httpd.c busybox-1.14.1-httpd/networking/htt
|
|
#if ENABLE_FEATURE_HTTPD_RANGES
|
|
#if ENABLE_FEATURE_HTTPD_RANGES
|
|
if (what == SEND_BODY)
|
|
if (what == SEND_BODY)
|
|
range_start = 0; /* err pages and ranges don't mix */
|
|
range_start = 0; /* err pages and ranges don't mix */
|
|
-@@ -1587,14 +1599,14 @@ static NOINLINE void send_file_and_exit(
|
|
|
|
- while (1) {
|
|
|
|
- /* sz is rounded down to 64k */
|
|
|
|
- ssize_t sz = MAXINT(ssize_t) - 0xffff;
|
|
|
|
-- USE_FEATURE_HTTPD_RANGES(if (sz > range_len) sz = range_len;)
|
|
|
|
-+ IF_FEATURE_HTTPD_RANGES(if (sz > range_len) sz = range_len;)
|
|
|
|
- count = sendfile(STDOUT_FILENO, fd, &offset, sz);
|
|
|
|
- if (count < 0) {
|
|
|
|
- if (offset == range_start)
|
|
|
|
- break; /* fall back to read/write loop */
|
|
|
|
- goto fin;
|
|
|
|
- }
|
|
|
|
-- USE_FEATURE_HTTPD_RANGES(range_len -= sz;)
|
|
|
|
-+ IF_FEATURE_HTTPD_RANGES(range_len -= sz;)
|
|
|
|
- if (count == 0 || range_len == 0)
|
|
|
|
- log_and_exit();
|
|
|
|
- }
|
|
|
|
-@@ -1602,16 +1614,16 @@ static NOINLINE void send_file_and_exit(
|
|
|
|
- #endif
|
|
|
|
- while ((count = safe_read(fd, iobuf, IOBUF_SIZE)) > 0) {
|
|
|
|
- ssize_t n;
|
|
|
|
-- USE_FEATURE_HTTPD_RANGES(if (count > range_len) count = range_len;)
|
|
|
|
-+ IF_FEATURE_HTTPD_RANGES(if (count > range_len) count = range_len;)
|
|
|
|
- n = full_write(STDOUT_FILENO, iobuf, count);
|
|
|
|
- if (count != n)
|
|
|
|
- break;
|
|
|
|
-- USE_FEATURE_HTTPD_RANGES(range_len -= count;)
|
|
|
|
-+ IF_FEATURE_HTTPD_RANGES(range_len -= count;)
|
|
|
|
- if (range_len == 0)
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
- if (count < 0) {
|
|
|
|
-- USE_FEATURE_HTTPD_USE_SENDFILE(fin:)
|
|
|
|
-+ IF_FEATURE_HTTPD_USE_SENDFILE(fin:)
|
|
|
|
- if (verbose > 1)
|
|
|
|
- bb_perror_msg("error");
|
|
|
|
- }
|
|
|
|
-@@ -1839,12 +1851,12 @@ static void handle_incoming_and_exit(con
|
|
|
|
-
|
|
|
|
- /* Find end of URL and parse HTTP version, if any */
|
|
|
|
- http_major_version = '0';
|
|
|
|
-- USE_FEATURE_HTTPD_PROXY(http_minor_version = '0';)
|
|
|
|
-+ IF_FEATURE_HTTPD_PROXY(http_minor_version = '0';)
|
|
|
|
- tptr = strchrnul(urlp, ' ');
|
|
|
|
- /* Is it " HTTP/"? */
|
|
|
|
- if (tptr[0] && strncmp(tptr + 1, HTTP_200, 5) == 0) {
|
|
|
|
- http_major_version = tptr[6];
|
|
|
|
-- USE_FEATURE_HTTPD_PROXY(http_minor_version = tptr[8];)
|
|
|
|
-+ IF_FEATURE_HTTPD_PROXY(http_minor_version = tptr[8];)
|
|
|
|
- }
|
|
|
|
- *tptr = '\0';
|
|
|
|
-
|
|
|
|
@@ -2031,8 +2043,8 @@ static void handle_incoming_and_exit(con
|
|
@@ -2031,8 +2043,8 @@ static void handle_incoming_and_exit(con
|
|
/* We are done reading headers, disable peer timeout */
|
|
/* We are done reading headers, disable peer timeout */
|
|
alarm(0);
|
|
alarm(0);
|
|
@@ -643,7 +626,7 @@ diff -urpN busybox-1.14.1/networking/httpd.c busybox-1.14.1-httpd/networking/htt
|
|
cgi_io_loop_and_exit(proxy_fd, dup(proxy_fd), length);
|
|
cgi_io_loop_and_exit(proxy_fd, dup(proxy_fd), length);
|
|
}
|
|
}
|
|
#endif
|
|
#endif
|
|
-@@ -2245,17 +2257,17 @@ static void mini_httpd_inetd(void)
|
|
|
|
|
|
+@@ -2245,7 +2257,7 @@ static void mini_httpd_inetd(void)
|
|
|
|
|
|
static void sighup_handler(int sig UNUSED_PARAM)
|
|
static void sighup_handler(int sig UNUSED_PARAM)
|
|
{
|
|
{
|
|
@@ -652,76 +635,15 @@ diff -urpN busybox-1.14.1/networking/httpd.c busybox-1.14.1-httpd/networking/htt
|
|
}
|
|
}
|
|
|
|
|
|
enum {
|
|
enum {
|
|
- c_opt_config_file = 0,
|
|
|
|
- d_opt_decode_url,
|
|
|
|
- h_opt_home_httpd,
|
|
|
|
-- USE_FEATURE_HTTPD_ENCODE_URL_STR(e_opt_encode_url,)
|
|
|
|
-- USE_FEATURE_HTTPD_BASIC_AUTH( r_opt_realm ,)
|
|
|
|
-- USE_FEATURE_HTTPD_AUTH_MD5( m_opt_md5 ,)
|
|
|
|
-- USE_FEATURE_HTTPD_SETUID( u_opt_setuid ,)
|
|
|
|
-+ IF_FEATURE_HTTPD_ENCODE_URL_STR(e_opt_encode_url,)
|
|
|
|
-+ IF_FEATURE_HTTPD_BASIC_AUTH( r_opt_realm ,)
|
|
|
|
-+ IF_FEATURE_HTTPD_AUTH_MD5( m_opt_md5 ,)
|
|
|
|
-+ IF_FEATURE_HTTPD_SETUID( u_opt_setuid ,)
|
|
|
|
- p_opt_port ,
|
|
|
|
- p_opt_inetd ,
|
|
|
|
- p_opt_foreground,
|
|
|
|
-@@ -2263,10 +2275,10 @@ enum {
|
|
|
|
- OPT_CONFIG_FILE = 1 << c_opt_config_file,
|
|
|
|
- OPT_DECODE_URL = 1 << d_opt_decode_url,
|
|
|
|
- OPT_HOME_HTTPD = 1 << h_opt_home_httpd,
|
|
|
|
-- OPT_ENCODE_URL = USE_FEATURE_HTTPD_ENCODE_URL_STR((1 << e_opt_encode_url)) + 0,
|
|
|
|
-- OPT_REALM = USE_FEATURE_HTTPD_BASIC_AUTH( (1 << r_opt_realm )) + 0,
|
|
|
|
-- OPT_MD5 = USE_FEATURE_HTTPD_AUTH_MD5( (1 << m_opt_md5 )) + 0,
|
|
|
|
-- OPT_SETUID = USE_FEATURE_HTTPD_SETUID( (1 << u_opt_setuid )) + 0,
|
|
|
|
-+ OPT_ENCODE_URL = IF_FEATURE_HTTPD_ENCODE_URL_STR((1 << e_opt_encode_url)) + 0,
|
|
|
|
-+ OPT_REALM = IF_FEATURE_HTTPD_BASIC_AUTH( (1 << r_opt_realm )) + 0,
|
|
|
|
-+ OPT_MD5 = IF_FEATURE_HTTPD_AUTH_MD5( (1 << m_opt_md5 )) + 0,
|
|
|
|
-+ OPT_SETUID = IF_FEATURE_HTTPD_SETUID( (1 << u_opt_setuid )) + 0,
|
|
|
|
- OPT_PORT = 1 << p_opt_port,
|
|
|
|
- OPT_INETD = 1 << p_opt_inetd,
|
|
|
|
- OPT_FOREGROUND = 1 << p_opt_foreground,
|
|
|
|
-@@ -2280,10 +2292,10 @@ int httpd_main(int argc UNUSED_PARAM, ch
|
|
|
|
- int server_socket = server_socket; /* for gcc */
|
|
|
|
- unsigned opt;
|
|
|
|
- char *url_for_decode;
|
|
|
|
-- USE_FEATURE_HTTPD_ENCODE_URL_STR(const char *url_for_encode;)
|
|
|
|
-- USE_FEATURE_HTTPD_SETUID(const char *s_ugid = NULL;)
|
|
|
|
-- USE_FEATURE_HTTPD_SETUID(struct bb_uidgid_t ugid;)
|
|
|
|
-- USE_FEATURE_HTTPD_AUTH_MD5(const char *pass;)
|
|
|
|
-+ IF_FEATURE_HTTPD_ENCODE_URL_STR(const char *url_for_encode;)
|
|
|
|
-+ IF_FEATURE_HTTPD_SETUID(const char *s_ugid = NULL;)
|
|
|
|
-+ IF_FEATURE_HTTPD_SETUID(struct bb_uidgid_t ugid;)
|
|
|
|
-+ IF_FEATURE_HTTPD_AUTH_MD5(const char *pass;)
|
|
|
|
-
|
|
|
|
- INIT_G();
|
|
|
|
-
|
|
|
|
-@@ -2299,16 +2311,16 @@ int httpd_main(int argc UNUSED_PARAM, ch
|
|
|
|
- * If user gives relative path in -h,
|
|
|
|
- * $SCRIPT_FILENAME will not be set. */
|
|
|
|
- opt = getopt32(argv, "c:d:h:"
|
|
|
|
-- USE_FEATURE_HTTPD_ENCODE_URL_STR("e:")
|
|
|
|
-- USE_FEATURE_HTTPD_BASIC_AUTH("r:")
|
|
|
|
-- USE_FEATURE_HTTPD_AUTH_MD5("m:")
|
|
|
|
-- USE_FEATURE_HTTPD_SETUID("u:")
|
|
|
|
-+ IF_FEATURE_HTTPD_ENCODE_URL_STR("e:")
|
|
|
|
-+ IF_FEATURE_HTTPD_BASIC_AUTH("r:")
|
|
|
|
-+ IF_FEATURE_HTTPD_AUTH_MD5("m:")
|
|
|
|
-+ IF_FEATURE_HTTPD_SETUID("u:")
|
|
|
|
|
|
+@@ -2304,7 +2316,7 @@ int httpd_main(int argc UNUSED_PARAM, ch
|
|
|
|
+ USE_FEATURE_HTTPD_AUTH_MD5("m:")
|
|
|
|
+ USE_FEATURE_HTTPD_SETUID("u:")
|
|
"p:ifv",
|
|
"p:ifv",
|
|
- &configFile, &url_for_decode, &home_httpd
|
|
- &configFile, &url_for_decode, &home_httpd
|
|
-- USE_FEATURE_HTTPD_ENCODE_URL_STR(, &url_for_encode)
|
|
|
|
-- USE_FEATURE_HTTPD_BASIC_AUTH(, &g_realm)
|
|
|
|
-- USE_FEATURE_HTTPD_AUTH_MD5(, &pass)
|
|
|
|
-- USE_FEATURE_HTTPD_SETUID(, &s_ugid)
|
|
|
|
+ &opt_c_configFile, &url_for_decode, &home_httpd
|
|
+ &opt_c_configFile, &url_for_decode, &home_httpd
|
|
-+ IF_FEATURE_HTTPD_ENCODE_URL_STR(, &url_for_encode)
|
|
|
|
-+ IF_FEATURE_HTTPD_BASIC_AUTH(, &g_realm)
|
|
|
|
-+ IF_FEATURE_HTTPD_AUTH_MD5(, &pass)
|
|
|
|
-+ IF_FEATURE_HTTPD_SETUID(, &s_ugid)
|
|
|
|
- , &bind_addr_or_port
|
|
|
|
- , &verbose
|
|
|
|
- );
|
|
|
|
|
|
+ USE_FEATURE_HTTPD_ENCODE_URL_STR(, &url_for_encode)
|
|
|
|
+ USE_FEATURE_HTTPD_BASIC_AUTH(, &g_realm)
|
|
|
|
+ USE_FEATURE_HTTPD_AUTH_MD5(, &pass)
|
|
@@ -2375,7 +2387,7 @@ int httpd_main(int argc UNUSED_PARAM, ch
|
|
@@ -2375,7 +2387,7 @@ int httpd_main(int argc UNUSED_PARAM, ch
|
|
}
|
|
}
|
|
#endif
|
|
#endif
|