diff options
author | Denys Vlasenko | 2009-09-08 21:17:49 +0200 |
---|---|---|
committer | Denys Vlasenko | 2009-09-08 21:17:49 +0200 |
commit | 108b8c5367e224568d22e8ef32a56aa166ab1e79 (patch) | |
tree | 5b23013d4cdfba071b6471aee26bbea6ed9267be | |
parent | db57fc22a69cbf6682c5d620fe821d2f0a3a36d0 (diff) | |
download | busybox-108b8c5367e224568d22e8ef32a56aa166ab1e79.zip busybox-108b8c5367e224568d22e8ef32a56aa166ab1e79.tar.gz |
httpd: fix bug 601 "I:index.php does not run interpreter on DIR/ url"
function old new delta
parse_conf 1462 1485 +23
index_html - 11 +11
handle_incoming_and_exit 2762 2749 -13
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 1/1 up/down: 34/-13) Total: 21 bytes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | networking/httpd.c | 36 |
1 files changed, 17 insertions, 19 deletions
diff --git a/networking/httpd.c b/networking/httpd.c index 956eeca..07dcd71 100644 --- a/networking/httpd.c +++ b/networking/httpd.c @@ -231,6 +231,8 @@ static const struct { #endif }; +static const char index_html[] ALIGN1 = "index.html"; + struct globals { int verbose; /* must be int (used by getopt32) */ @@ -328,7 +330,7 @@ enum { SET_PTR_TO_GLOBALS(xzalloc(sizeof(G))); \ IF_FEATURE_HTTPD_BASIC_AUTH(g_realm = "Web Server Authentication";) \ bind_addr_or_port = "80"; \ - index_page = "index.html"; \ + index_page = index_html; \ file_size = -1; \ } while (0) @@ -569,6 +571,8 @@ static void parse_conf(const char *path, int flag) ch = (buf[0] & ~0x20); /* toupper if it's a letter */ if (ch == 'I') { + if (index_page != index_html) + free((char*)index_page); index_page = xstrdup(after_colon); continue; } @@ -2101,8 +2105,12 @@ static void handle_incoming_and_exit(const len_and_sockaddr *fromAddr) } send_cgi_and_exit(urlcopy, prequest, length, cookie, content_type); } +#endif + + if (urlp[-1] == '/') + strcpy(urlp, index_page); + if (stat(tptr, &sb) == 0) { #if ENABLE_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR - { char *suffix = strrchr(tptr, '.'); if (suffix) { Htaccess *cur; @@ -2112,16 +2120,7 @@ static void handle_incoming_and_exit(const len_and_sockaddr *fromAddr) } } } - } #endif - if (prequest != request_GET && prequest != request_HEAD) { - send_headers_and_exit(HTTP_NOT_IMPLEMENTED); - } -#endif /* FEATURE_HTTPD_CGI */ - - if (urlp[-1] == '/') - strcpy(urlp, index_page); - if (stat(tptr, &sb) == 0) { file_size = sb.st_size; last_mod = sb.st_mtime; } @@ -2135,19 +2134,18 @@ static void handle_incoming_and_exit(const len_and_sockaddr *fromAddr) send_cgi_and_exit("/cgi-bin/index.cgi", prequest, length, cookie, content_type); } } -#endif - /* else { - * fall through to send_file, it errors out if open fails - * } - */ + /* else fall through to send_file, it errors out if open fails: */ + if (prequest != request_GET && prequest != request_HEAD) { + /* POST for files does not make sense */ + send_headers_and_exit(HTTP_NOT_IMPLEMENTED); + } send_file_and_exit(tptr, -#if ENABLE_FEATURE_HTTPD_CGI (prequest != request_HEAD ? SEND_HEADERS_AND_BODY : SEND_HEADERS) + ); #else - SEND_HEADERS_AND_BODY + send_file_and_exit(tptr, SEND_HEADERS_AND_BODY); #endif - ); } /* |