patch for busybox httpd that adds an option for redirecting all requests to a specifi...
authorFelix Fietkau <nbd@openwrt.org>
Mon, 2 Apr 2007 09:40:01 +0000 (09:40 +0000)
committerFelix Fietkau <nbd@openwrt.org>
Mon, 2 Apr 2007 09:40:01 +0000 (09:40 +0000)
SVN-Revision: 6818

package/busybox/patches/350-httpd_redir.patch [new file with mode: 0644]

diff --git a/package/busybox/patches/350-httpd_redir.patch b/package/busybox/patches/350-httpd_redir.patch
new file mode 100644 (file)
index 0000000..86338aa
--- /dev/null
@@ -0,0 +1,91 @@
+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 <realm>]") \
+       USE_FEATURE_HTTPD_AUTH_MD5(" [-m pass]") \
+        " [-h home]" \
+-       " [-d/-e <string>]"
++       " [-d/-e <string>]" \
++       " [-R <path> [-H <host>]]"
+ #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 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;)
+       const char *configFile;
++      const char *redirectPath;
++      const char *redirectHost;
+       unsigned int rmt_ip;
+ #if ENABLE_FEATURE_HTTPD_CGI || DEBUG
+@@ -881,8 +883,11 @@
+       }
+ #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 : ""));
+       }
+@@ -1598,8 +1603,12 @@
+               *++purl = '\0';       /* so keep last character */
+               test = purl;          /* end ptr */
++              /* redirect active */
++              if (config->redirectPath && (strncmp(url, config->redirectPath, strlen(config->redirectPath)) != 0))
++                      config->found_moved_temporarily = config->redirectPath;
++
+               /* 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
+ enum {
+-      c_opt_config_file = 0,
++      R_opt_redirect_path = 0,
++      H_opt_redirect_host,
++      c_opt_config_file,
+       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
+                       USE_FEATURE_HTTPD_ENCODE_URL_STR(, &url_for_encode)
+                       USE_FEATURE_HTTPD_BASIC_AUTH(, &(config->realm))