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 ]") \ USE_FEATURE_HTTPD_AUTH_MD5(" [-m pass]") \ " [-h home]" \ - " [-d/-e ]" + " [-d/-e ]" \ + " [-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 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))