summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko2009-09-08 21:17:49 +0200
committerDenys Vlasenko2009-09-08 21:17:49 +0200
commit108b8c5367e224568d22e8ef32a56aa166ab1e79 (patch)
tree5b23013d4cdfba071b6471aee26bbea6ed9267be
parentdb57fc22a69cbf6682c5d620fe821d2f0a3a36d0 (diff)
downloadbusybox-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.c36
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
- );
}
/*