X-Git-Url: http://git.rohieb.name/openwrt.git/blobdiff_plain/508a635e89649eb273ba7a6f059e4a7b0210ef52..5a76cd437c8b0271c03ade8ad07335b2e8f590a3:/package/busybox/patches/350-httpd_redir.patch?ds=sidebyside diff --git a/package/busybox/patches/350-httpd_redir.patch b/package/busybox/patches/350-httpd_redir.patch index 86338aaed..912cb6d49 100644 --- a/package/busybox/patches/350-httpd_redir.patch +++ b/package/busybox/patches/350-httpd_redir.patch @@ -1,68 +1,73 @@ -diff -ur bb.old/include/usage.h bb.dev/include/usage.h ---- bb.old/include/usage.h 2007-03-29 13:25:55.080325000 +0200 -+++ bb.dev/include/usage.h 2007-03-29 13:31:04.241326192 +0200 -@@ -1333,7 +1333,8 @@ - USE_FEATURE_HTTPD_BASIC_AUTH(" [-r ]") \ +--- a/include/usage.h ++++ b/include/usage.h +@@ -1638,7 +1638,8 @@ + USE_FEATURE_HTTPD_BASIC_AUTH(" [-r realm]") \ USE_FEATURE_HTTPD_AUTH_MD5(" [-m pass]") \ " [-h home]" \ -- " [-d/-e ]" -+ " [-d/-e ]" \ +- " [-d/-e string]" ++ " [-d/-e string]" \ + " [-R [-H ]]" - #define httpd_full_usage \ - "Listen for incoming http server requests" \ - "\n\nOptions:\n" \ -@@ -1349,7 +1350,9 @@ - " -m PASS Crypt PASS with md5 algorithm\n") \ - " -h HOME Specifies http HOME directory (default ./)\n" \ - " -e STRING HTML encode STRING\n" \ -- " -d STRING URL decode STRING" -+ " -d STRING URL decode STRING\n" \ -+ " -R PATH Redirect target path\n" \ -+ " -H HOST Redirect target host" + #define httpd_full_usage "\n\n" \ + "Listen for incoming HTTP requests\n" \ + "\nOptions:" \ +@@ -1656,6 +1657,8 @@ + "\n -h HOME Home directory (default .)" \ + "\n -e STRING HTML encode STRING" \ + "\n -d STRING URL decode STRING" \ ++ "\n -R PATH Redirect target path" \ ++ "\n -H HOST Redirect target host" \ #define hwclock_trivial_usage \ - "[-r|--show] [-s|--hctosys] [-w|--systohc] [-l|--localtime] [-u|--utc]" -diff -ur bb.old/networking/httpd.c bb.dev/networking/httpd.c ---- bb.old/networking/httpd.c 2007-03-29 13:25:55.016335000 +0200 -+++ bb.dev/networking/httpd.c 2007-03-29 13:40:05.353064704 +0200 -@@ -141,6 +141,8 @@ - USE_FEATURE_HTTPD_CGI(char *user_agent;) + USE_FEATURE_HWCLOCK_LONG_OPTIONS( \ +--- a/networking/httpd.c ++++ b/networking/httpd.c +@@ -248,6 +248,8 @@ struct globals { - const char *configFile; -+ const char *redirectPath; -+ const char *redirectHost; + const char *found_mime_type; + const char *found_moved_temporarily; ++ const char *redirect_path; ++ const char *redirect_host; + Htaccess_IP *ip_a_d; /* config allow/deny lines */ - unsigned int rmt_ip; - #if ENABLE_FEATURE_HTTPD_CGI || DEBUG -@@ -881,8 +883,11 @@ + USE_FEATURE_HTTPD_BASIC_AUTH(const char *g_realm;) +@@ -294,6 +296,8 @@ struct globals { + #define index_page (G.index_page ) + #define found_mime_type (G.found_mime_type ) + #define found_moved_temporarily (G.found_moved_temporarily) ++#define redirect_path (G.redirect_path ) ++#define redirect_host (G.redirect_host ) + #define last_mod (G.last_mod ) + #define ip_a_d (G.ip_a_d ) + #define g_realm (G.g_realm ) +@@ -993,8 +997,11 @@ static void send_headers(int responseNum } #endif if (responseNum == HTTP_MOVED_TEMPORARILY) { -- len += sprintf(buf+len, "Location: %s/%s%s\r\n", -+ len += sprintf(buf+len, "Location: %s%s%s%s%s%s\r\n", -+ (config->redirectHost ? "http://" : ""), -+ (config->redirectHost ? config->redirectHost : ""), - config->found_moved_temporarily, -+ (config->redirectHost ? "" : "/"), - (config->query ? "?" : ""), - (config->query ? config->query : "")); +- len += sprintf(iobuf + len, "Location: %s/%s%s\r\n", ++ len += sprintf(iobuf + len, "Location: %s%s%s%s%s%s\r\n", ++ (redirect_host ? "http://" : ""), ++ (redirect_host ? redirect_host : ""), + found_moved_temporarily, ++ (redirect_host ? "" : "/"), + (g_query ? "?" : ""), + (g_query ? g_query : "")); } -@@ -1598,8 +1603,12 @@ - *++purl = '\0'; /* so keep last character */ - test = purl; /* end ptr */ +@@ -1924,8 +1931,12 @@ static void handle_incoming_and_exit(con + } while (*++tptr); + *++urlp = '\0'; /* terminate after last character */ -+ /* redirect active */ -+ if (config->redirectPath && (strncmp(url, config->redirectPath, strlen(config->redirectPath)) != 0)) -+ config->found_moved_temporarily = config->redirectPath; ++ /* redirect active */ ++ if (redirect_path && (strncmp(urlcopy, redirect_path, strlen(redirect_path)) != 0)) ++ found_moved_temporarily = redirect_path; + - /* If URL is directory, adding '/' */ -- if (test[-1] != '/') { -+ if(!config->redirectPath && (test[-1] != '/')) { - if (is_directory(url + 1, 1, &sb)) { - config->found_moved_temporarily = url; - } -@@ -1901,7 +1910,9 @@ - #endif + /* If URL is a directory, add '/' */ +- if (urlp[-1] != '/') { ++ if (!redirect_path && (urlp[-1] != '/')) { + if (is_directory(urlcopy + 1, 1, &sb)) { + found_moved_temporarily = urlcopy; + } +@@ -2266,7 +2277,9 @@ static void sighup_handler(int sig UNUSE + } enum { - c_opt_config_file = 0, @@ -72,20 +77,18 @@ diff -ur bb.old/networking/httpd.c bb.dev/networking/httpd.c d_opt_decode_url, h_opt_home_httpd, USE_FEATURE_HTTPD_ENCODE_URL_STR(e_opt_encode_url,) -@@ -1923,7 +1934,7 @@ - OPT_FOREGROUND = 1 << p_opt_foreground, - }; - --static const char httpd_opts[] = "c:d:h:" -+static const char httpd_opts[] = "R:H:c:d:h:" - USE_FEATURE_HTTPD_ENCODE_URL_STR("e:") - USE_FEATURE_HTTPD_BASIC_AUTH("r:") - USE_FEATURE_HTTPD_AUTH_MD5("m:") -@@ -1954,6 +1965,7 @@ - config->ContentLength = -1; - - opt = getopt32(argc, argv, httpd_opts, -+ &(config->redirectPath), &(config->redirectHost), - &(config->configFile), &url_for_decode, &home_httpd +@@ -2315,12 +2328,13 @@ int httpd_main(int argc UNUSED_PARAM, ch + /* We do not "absolutize" path given by -h (home) opt. + * If user gives relative path in -h, + * $SCRIPT_FILENAME will not be set. */ +- opt = getopt32(argv, "c:d:h:" ++ opt = getopt32(argv, "R:H: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:") + "p:ifv", ++ &redirect_path, &redirect_host, + &opt_c_configFile, &url_for_decode, &home_httpd USE_FEATURE_HTTPD_ENCODE_URL_STR(, &url_for_encode) - USE_FEATURE_HTTPD_BASIC_AUTH(, &(config->realm)) + USE_FEATURE_HTTPD_BASIC_AUTH(, &g_realm)