[prev in list] [next in list] [prev in thread] [next in thread]
List: busybox
Subject: [PATCH] httpd: support Content-Encoding for CGI scripts
From: Assaf Gordon <assafgordon () gmail ! com>
Date: 2019-03-27 18:24:22
Message-ID: 20190327182422.7715-1-assafgordon () gmail ! com
[Download RAW message or body]
Pass the HTTP_CONTENT_ENCODING header to CGI script (if received from
the client). For example, this can indicate the submitted POST content
is gzipped.
With this patch busybox's httpd server can be used as a frontend
to git's git-http-backend CGI program ('git fetch' sometimes sends
compressed data). Without this patch, extra steps are needed to detect
whether the input is gzipped or not, see:
https://www.openwall.com/lists/musl/2019/03/27/3 .
bloat-check:
function old new delta
handle_incoming_and_exit 2844 2912 +68
.rodata 7562 7602 +40
send_cgi_and_exit 982 1006 +24
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 3/0 up/down: 132/0) Total: 132
bytes
text data bss dec hex filename
83728 3174 1544 88446 1597e busybox_old
83860 3174 1544 88578 15a02 busybox_unstripped
Signed-off-by: Assaf Gordon <assafgordon@gmail.com>
---
networking/httpd.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/networking/httpd.c b/networking/httpd.c
index b52526a78..1a22cd23a 100644
--- a/networking/httpd.c
+++ b/networking/httpd.c
@@ -416,6 +416,7 @@ struct globals {
IF_FEATURE_HTTPD_CGI(char *user_agent;)
IF_FEATURE_HTTPD_CGI(char *host;)
IF_FEATURE_HTTPD_CGI(char *http_accept;)
+ IF_FEATURE_HTTPD_CGI(char *content_encoding;)
IF_FEATURE_HTTPD_CGI(char *http_accept_language;)
off_t file_size; /* -1 - unknown */
@@ -1536,6 +1537,8 @@ static void send_cgi_and_exit(
setenv1("HTTP_ACCEPT", G.http_accept);
if (G.http_accept_language)
setenv1("HTTP_ACCEPT_LANGUAGE", G.http_accept_language);
+ if (G.content_encoding)
+ setenv1("HTTP_CONTENT_ENCODING", G.content_encoding);
if (post_len)
putenv(xasprintf("CONTENT_LENGTH=%u", post_len));
if (cookie)
@@ -2323,6 +2326,9 @@ static void handle_incoming_and_exit(const len_and_sockaddr *fromAddr)
} else if (STRNCASECMP(iobuf, "Accept-Language:") == 0) {
if (!G.http_accept_language)
G.http_accept_language = xstrdup(skip_whitespace(iobuf + sizeof("Accept-Language:")-1));
+ } else if (STRNCASECMP(iobuf, "Content-Encoding:") == 0) {
+ if (!G.content_encoding)
+ G.content_encoding = xstrdup(skip_whitespace(iobuf + sizeof("Content-Encoding:")-1));
}
#endif
#if ENABLE_FEATURE_HTTPD_BASIC_AUTH
--
2.11.0
_______________________________________________
busybox mailing list
busybox@busybox.net
http://lists.busybox.net/mailman/listinfo/busybox
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic