diff options
| author | Denis Vlasenko <vda.linux@googlemail.com> | 2007-12-29 02:16:23 +0000 |
|---|---|---|
| committer | Denis Vlasenko <vda.linux@googlemail.com> | 2007-12-29 02:16:23 +0000 |
| commit | fcd878efcd6df8a8d052cef753305c34c1297267 (patch) | |
| tree | 6af774d5a6ca3d890f3eefad8372001c3a01d57e | |
| parent | 3f9c84857617b0cf0d1824664e371fb6a4cac2e3 (diff) | |
| download | busybox-w32-fcd878efcd6df8a8d052cef753305c34c1297267.tar.gz busybox-w32-fcd878efcd6df8a8d052cef753305c34c1297267.tar.bz2 busybox-w32-fcd878efcd6df8a8d052cef753305c34c1297267.zip | |
httpd: support for "I:index.xml" syntax (Peter Korsgaard <jacmet@uclibc.org>)
function old new delta
parse_conf 1481 1507 +26
handle_incoming_and_exit 2650 2663 +13
httpd_main 749 759 +10
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 3/0 up/down: 49/0) Total: 49 bytes
| -rw-r--r-- | networking/httpd.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/networking/httpd.c b/networking/httpd.c index b31b73687..87dc4b7da 100644 --- a/networking/httpd.c +++ b/networking/httpd.c | |||
| @@ -43,6 +43,7 @@ | |||
| 43 | * A:127.0.0.1 # Allow local loopback connections | 43 | * A:127.0.0.1 # Allow local loopback connections |
| 44 | * D:* # Deny from other IP connections | 44 | * D:* # Deny from other IP connections |
| 45 | * E404:/path/e404.html # /path/e404.html is the 404 (not found) error page | 45 | * E404:/path/e404.html # /path/e404.html is the 404 (not found) error page |
| 46 | * I:index.html # Show index.html when a directory is requested | ||
| 46 | * | 47 | * |
| 47 | * P:/url:[http://]hostname[:port]/new/path | 48 | * P:/url:[http://]hostname[:port]/new/path |
| 48 | * # When /urlXXXXXX is requested, reverse proxy | 49 | * # When /urlXXXXXX is requested, reverse proxy |
| @@ -250,6 +251,7 @@ struct globals { | |||
| 250 | const char *g_query; | 251 | const char *g_query; |
| 251 | const char *configFile; | 252 | const char *configFile; |
| 252 | const char *home_httpd; | 253 | const char *home_httpd; |
| 254 | const char *index_page; | ||
| 253 | 255 | ||
| 254 | const char *found_mime_type; | 256 | const char *found_mime_type; |
| 255 | const char *found_moved_temporarily; | 257 | const char *found_moved_temporarily; |
| @@ -295,6 +297,7 @@ struct globals { | |||
| 295 | #define g_query (G.g_query ) | 297 | #define g_query (G.g_query ) |
| 296 | #define configFile (G.configFile ) | 298 | #define configFile (G.configFile ) |
| 297 | #define home_httpd (G.home_httpd ) | 299 | #define home_httpd (G.home_httpd ) |
| 300 | #define index_page (G.index_page ) | ||
| 298 | #define found_mime_type (G.found_mime_type ) | 301 | #define found_mime_type (G.found_mime_type ) |
| 299 | #define found_moved_temporarily (G.found_moved_temporarily) | 302 | #define found_moved_temporarily (G.found_moved_temporarily) |
| 300 | #define last_mod (G.last_mod ) | 303 | #define last_mod (G.last_mod ) |
| @@ -688,6 +691,11 @@ static void parse_conf(const char *path, int flag) | |||
| 688 | } | 691 | } |
| 689 | #endif | 692 | #endif |
| 690 | 693 | ||
| 694 | if (*p0 == 'I') { | ||
| 695 | index_page = xstrdup(c); | ||
| 696 | continue; | ||
| 697 | } | ||
| 698 | |||
| 691 | #if ENABLE_FEATURE_HTTPD_BASIC_AUTH \ | 699 | #if ENABLE_FEATURE_HTTPD_BASIC_AUTH \ |
| 692 | || ENABLE_FEATURE_HTTPD_CONFIG_WITH_MIME_TYPES \ | 700 | || ENABLE_FEATURE_HTTPD_CONFIG_WITH_MIME_TYPES \ |
| 693 | || ENABLE_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR | 701 | || ENABLE_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR |
| @@ -1836,7 +1844,7 @@ static void handle_incoming_and_exit(const len_and_sockaddr *fromAddr) | |||
| 1836 | *tptr = '\0'; | 1844 | *tptr = '\0'; |
| 1837 | 1845 | ||
| 1838 | /* Copy URL from after "GET "/"POST " to stack-allocated char[] */ | 1846 | /* Copy URL from after "GET "/"POST " to stack-allocated char[] */ |
| 1839 | urlcopy = alloca((tptr - urlp) + sizeof("/index.html")); | 1847 | urlcopy = alloca((tptr - urlp) + 2 + strlen(index_page)); |
| 1840 | /*if (urlcopy == NULL) | 1848 | /*if (urlcopy == NULL) |
| 1841 | * send_headers_and_exit(HTTP_INTERNAL_SERVER_ERROR);*/ | 1849 | * send_headers_and_exit(HTTP_INTERNAL_SERVER_ERROR);*/ |
| 1842 | strcpy(urlcopy, urlp); | 1850 | strcpy(urlcopy, urlp); |
| @@ -2087,7 +2095,7 @@ static void handle_incoming_and_exit(const len_and_sockaddr *fromAddr) | |||
| 2087 | #endif /* FEATURE_HTTPD_CGI */ | 2095 | #endif /* FEATURE_HTTPD_CGI */ |
| 2088 | 2096 | ||
| 2089 | if (urlp[-1] == '/') | 2097 | if (urlp[-1] == '/') |
| 2090 | strcpy(urlp, "index.html"); | 2098 | strcpy(urlp, index_page); |
| 2091 | if (stat(tptr, &sb) == 0) { | 2099 | if (stat(tptr, &sb) == 0) { |
| 2092 | file_size = sb.st_size; | 2100 | file_size = sb.st_size; |
| 2093 | last_mod = sb.st_mtime; | 2101 | last_mod = sb.st_mtime; |
| @@ -2367,6 +2375,7 @@ int httpd_main(int argc, char **argv) | |||
| 2367 | sighup_handler(0); | 2375 | sighup_handler(0); |
| 2368 | else /* do not install HUP handler in inetd mode */ | 2376 | else /* do not install HUP handler in inetd mode */ |
| 2369 | #endif | 2377 | #endif |
| 2378 | index_page = "index.html"; | ||
| 2370 | parse_conf(default_path_httpd_conf, FIRST_PARSE); | 2379 | parse_conf(default_path_httpd_conf, FIRST_PARSE); |
| 2371 | 2380 | ||
| 2372 | xfunc_error_retval = 0; | 2381 | xfunc_error_retval = 0; |
