summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko2021-05-04 20:15:24 +0200
committerDenys Vlasenko2021-05-04 20:15:24 +0200
commit32a8258be78371154dd66b931a9628aad0efd337 (patch)
tree4e82cad46090a5c2375ba7e4039ead3036483c38
parentff4d898fe6a0f082baff929087df7eb38d4e890c (diff)
downloadbusybox-32a8258be78371154dd66b931a9628aad0efd337.zip
busybox-32a8258be78371154dd66b931a9628aad0efd337.tar.gz
httpd: support HEAD requests even in !CGI config
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r--networking/httpd.c23
1 files changed, 10 insertions, 13 deletions
diff --git a/networking/httpd.c b/networking/httpd.c
index 951213e..958b3c3 100644
--- a/networking/httpd.c
+++ b/networking/httpd.c
@@ -548,7 +548,6 @@ enum {
enum {
SEND_HEADERS = (1 << 0),
SEND_BODY = (1 << 1),
- SEND_HEADERS_AND_BODY = SEND_HEADERS + SEND_BODY,
};
static void send_file_and_exit(const char *url, int what) NORETURN;
@@ -2177,11 +2176,11 @@ static void handle_incoming_and_exit(const len_and_sockaddr *fromAddr)
#if ENABLE_FEATURE_HTTPD_CGI
unsigned total_headers_len;
#endif
-#if ENABLE_FEATURE_HTTPD_CGI
+ const char *prequest;
static const char request_GET[] ALIGN1 = "GET";
static const char request_HEAD[] ALIGN1 = "HEAD";
+#if ENABLE_FEATURE_HTTPD_CGI
static const char request_POST[] ALIGN1 = "POST";
- const char *prequest;
unsigned long POST_length;
enum CGI_type {
CGI_NONE = 0,
@@ -2285,24 +2284,23 @@ static void handle_incoming_and_exit(const len_and_sockaddr *fromAddr)
#endif
/* Determine type of request (GET/POST/...) */
-#if ENABLE_FEATURE_HTTPD_CGI
prequest = request_GET;
if (strcasecmp(iobuf, prequest) == 0)
goto found;
prequest = request_HEAD;
if (strcasecmp(iobuf, prequest) == 0)
goto found;
+#if !ENABLE_FEATURE_HTTPD_CGI
+ send_headers_and_exit(HTTP_NOT_IMPLEMENTED);
+#else
prequest = request_POST;
if (strcasecmp(iobuf, prequest) == 0)
goto found;
/* For CGI, allow DELETE, PUT, OPTIONS, etc too */
prequest = alloca(16);
safe_strncpy((char*)prequest, iobuf, 16);
- found:
-#else
- if (strcasecmp(iobuf, "GET") != 0)
- send_headers_and_exit(HTTP_NOT_IMPLEMENTED);
#endif
+ found:
/* Copy URL to stack-allocated char[] */
urlcopy = alloca((HTTP_slash - urlp) + 2 + strlen(index_page));
strcpy(urlcopy, urlp);
@@ -2592,13 +2590,12 @@ static void handle_incoming_and_exit(const len_and_sockaddr *fromAddr)
/* POST / DELETE / PUT / OPTIONS for files do not make sense */
send_headers_and_exit(HTTP_NOT_IMPLEMENTED);
}
- send_file_and_exit(tptr,
- (prequest != request_HEAD ? SEND_HEADERS_AND_BODY : SEND_HEADERS)
- );
#else
- /* It was verified earlier that it is a "GET" */
- send_file_and_exit(tptr, SEND_HEADERS_AND_BODY);
+ /* !CGI: it can be only GET or HEAD */
#endif
+ send_file_and_exit(tptr,
+ (prequest != request_HEAD ? (SEND_HEADERS + SEND_BODY) : SEND_HEADERS)
+ );
}
/*