summaryrefslogtreecommitdiffstats
path: root/debian/patches/journal-remote-do-not-request-Content-Length-if-Transfer-.patch
diff options
context:
space:
mode:
Diffstat (limited to 'debian/patches/journal-remote-do-not-request-Content-Length-if-Transfer-.patch')
-rw-r--r--debian/patches/journal-remote-do-not-request-Content-Length-if-Transfer-.patch74
1 files changed, 74 insertions, 0 deletions
diff --git a/debian/patches/journal-remote-do-not-request-Content-Length-if-Transfer-.patch b/debian/patches/journal-remote-do-not-request-Content-Length-if-Transfer-.patch
new file mode 100644
index 0000000..a8ab578
--- /dev/null
+++ b/debian/patches/journal-remote-do-not-request-Content-Length-if-Transfer-.patch
@@ -0,0 +1,74 @@
+From: Yu Watanabe <watanabe.yu+github@gmail.com>
+Date: Mon, 11 Mar 2019 12:27:18 +0900
+Subject: journal-remote: do not request Content-Length if Transfer-Encoding
+ is chunked
+
+This fixes a bug introduced by 7fdb237f5473cb8fc2129e57e8a0039526dcb4fd.
+
+Closes #11571.
+
+(cherry picked from commit a289dfd69b3ff4bccdde93e84b67c947bafa27e1)
+---
+ src/journal-remote/journal-remote-main.c | 41 +++++++++++++++++++++-----------
+ 1 file changed, 27 insertions(+), 14 deletions(-)
+
+diff --git a/src/journal-remote/journal-remote-main.c b/src/journal-remote/journal-remote-main.c
+index 802c3ea..2321a91 100644
+--- a/src/journal-remote/journal-remote-main.c
++++ b/src/journal-remote/journal-remote-main.c
+@@ -265,6 +265,7 @@ static int request_handler(
+ const char *header;
+ int r, code, fd;
+ _cleanup_free_ char *hostname = NULL;
++ bool chunked = false;
+ size_t len;
+
+ assert(connection);
+@@ -290,21 +291,33 @@ static int request_handler(
+ return mhd_respond(connection, MHD_HTTP_UNSUPPORTED_MEDIA_TYPE,
+ "Content-Type: application/vnd.fdo.journal is required.");
+
++ header = MHD_lookup_connection_value(connection, MHD_HEADER_KIND, "Transfer-Encoding");
++ if (header) {
++ if (!strcaseeq(header, "chunked"))
++ return mhd_respondf(connection, 0, MHD_HTTP_BAD_REQUEST,
++ "Unsupported Transfer-Encoding type: %s", header);
++
++ chunked = true;
++ }
++
+ header = MHD_lookup_connection_value(connection, MHD_HEADER_KIND, "Content-Length");
+- if (!header)
+- return mhd_respond(connection, MHD_HTTP_LENGTH_REQUIRED,
+- "Content-Length header is required.");
+- r = safe_atozu(header, &len);
+- if (r < 0)
+- return mhd_respondf(connection, r, MHD_HTTP_LENGTH_REQUIRED,
+- "Content-Length: %s cannot be parsed: %m", header);
+-
+- if (len > ENTRY_SIZE_MAX)
+- /* When serialized, an entry of maximum size might be slightly larger,
+- * so this does not correspond exactly to the limit in journald. Oh well.
+- */
+- return mhd_respondf(connection, 0, MHD_HTTP_PAYLOAD_TOO_LARGE,
+- "Payload larger than maximum size of %u bytes", ENTRY_SIZE_MAX);
++ if (header) {
++ if (chunked)
++ return mhd_respond(connection, MHD_HTTP_BAD_REQUEST,
++ "Content-Length must not specified when Transfer-Encoding type is 'chuncked'");
++
++ r = safe_atozu(header, &len);
++ if (r < 0)
++ return mhd_respondf(connection, r, MHD_HTTP_LENGTH_REQUIRED,
++ "Content-Length: %s cannot be parsed: %m", header);
++
++ if (len > ENTRY_SIZE_MAX)
++ /* When serialized, an entry of maximum size might be slightly larger,
++ * so this does not correspond exactly to the limit in journald. Oh well.
++ */
++ return mhd_respondf(connection, 0, MHD_HTTP_PAYLOAD_TOO_LARGE,
++ "Payload larger than maximum size of %u bytes", ENTRY_SIZE_MAX);
++ }
+
+ {
+ const union MHD_ConnectionInfo *ci;