diff options
Diffstat (limited to 'pcr/icinga2/boost-1.74-8575.patch')
-rw-r--r-- | pcr/icinga2/boost-1.74-8575.patch | 192 |
1 files changed, 192 insertions, 0 deletions
diff --git a/pcr/icinga2/boost-1.74-8575.patch b/pcr/icinga2/boost-1.74-8575.patch new file mode 100644 index 000000000..d2557a602 --- /dev/null +++ b/pcr/icinga2/boost-1.74-8575.patch @@ -0,0 +1,192 @@ +From 339b37a985b5f67ce5f0d2e02211d2c5b98a5d45 Mon Sep 17 00:00:00 2001 +From: Julian Brost <julian.brost@icinga.com> +Date: Tue, 22 Dec 2020 14:32:56 +0100 +Subject: [PATCH 1/2] Use content_length method for setting the Content-Length + header + +Boost.Beast changed the signature of the previously used generic `set` +method so that it no longer accepts integer types, however there is +alreay a more specific method for setting the Content-Length header, so +use this one instead. +--- + lib/perfdata/elasticsearchwriter.cpp | 2 +- + lib/perfdata/influxdbwriter.cpp | 2 +- + lib/remote/configfileshandler.cpp | 2 +- + lib/remote/httpserverconnection.cpp | 10 +++++----- + lib/remote/httputility.cpp | 2 +- + lib/remote/infohandler.cpp | 2 +- + 6 files changed, 10 insertions(+), 10 deletions(-) + +diff --git a/lib/perfdata/elasticsearchwriter.cpp b/lib/perfdata/elasticsearchwriter.cpp +index 6870198e45..9ab277f201 100644 +--- a/lib/perfdata/elasticsearchwriter.cpp ++++ b/lib/perfdata/elasticsearchwriter.cpp +@@ -494,7 +494,7 @@ void ElasticsearchWriter::SendRequest(const String& body) + request.set(http::field::authorization, "Basic " + Base64::Encode(username + ":" + password)); + + request.body() = body; +- request.set(http::field::content_length, request.body().size()); ++ request.content_length(request.body().size()); + + /* Don't log the request body to debug log, this is already done above. */ + Log(LogDebug, "ElasticsearchWriter") +diff --git a/lib/perfdata/influxdbwriter.cpp b/lib/perfdata/influxdbwriter.cpp +index 5dbe785f88..3fd955bcf7 100644 +--- a/lib/perfdata/influxdbwriter.cpp ++++ b/lib/perfdata/influxdbwriter.cpp +@@ -517,7 +517,7 @@ void InfluxdbWriter::Flush() + } + + request.body() = body; +- request.set(http::field::content_length, request.body().size()); ++ request.content_length(request.body().size()); + + try { + if (stream.first) { +diff --git a/lib/remote/configfileshandler.cpp b/lib/remote/configfileshandler.cpp +index d714f4d864..6013d9722e 100644 +--- a/lib/remote/configfileshandler.cpp ++++ b/lib/remote/configfileshandler.cpp +@@ -84,7 +84,7 @@ bool ConfigFilesHandler::HandleRequest( + response.result(http::status::ok); + response.set(http::field::content_type, "application/octet-stream"); + response.body() = content; +- response.set(http::field::content_length, response.body().size()); ++ response.content_length(response.body().size()); + } catch (const std::exception& ex) { + HttpUtility::SendJsonError(response, params, 500, "Could not read file.", + DiagnosticInformation(ex)); +diff --git a/lib/remote/httpserverconnection.cpp b/lib/remote/httpserverconnection.cpp +index 182e2a5159..cb07557afe 100644 +--- a/lib/remote/httpserverconnection.cpp ++++ b/lib/remote/httpserverconnection.cpp +@@ -186,7 +186,7 @@ bool EnsureValidHeaders( + } else { + response.set(http::field::content_type, "text/html"); + response.body() = String("<h1>Bad Request</h1><p><pre>") + errorMsg + "</pre></p>"; +- response.set(http::field::content_length, response.body().size()); ++ response.content_length(response.body().size()); + } + + response.set(http::field::connection, "close"); +@@ -259,7 +259,7 @@ bool HandleAccessControl( + response.set(http::field::access_control_allow_methods, "GET, POST, PUT, DELETE"); + response.set(http::field::access_control_allow_headers, "Authorization, Content-Type, X-HTTP-Method-Override"); + response.body() = "Preflight OK"; +- response.set(http::field::content_length, response.body().size()); ++ response.content_length(response.body().size()); + response.set(http::field::connection, "close"); + + boost::system::error_code ec; +@@ -290,7 +290,7 @@ bool EnsureAcceptHeader( + response.result(http::status::bad_request); + response.set(http::field::content_type, "text/html"); + response.body() = "<h1>Accept header is missing or not set to 'application/json'.</h1>"; +- response.set(http::field::content_length, response.body().size()); ++ response.content_length(response.body().size()); + response.set(http::field::connection, "close"); + + boost::system::error_code ec; +@@ -331,7 +331,7 @@ bool EnsureAuthenticatedUser( + } else { + response.set(http::field::content_type, "text/html"); + response.body() = "<h1>Unauthorized. Please check your user credentials.</h1>"; +- response.set(http::field::content_length, response.body().size()); ++ response.content_length(response.body().size()); + } + + boost::system::error_code ec; +@@ -423,7 +423,7 @@ bool EnsureValidBody( + } else { + response.set(http::field::content_type, "text/html"); + response.body() = String("<h1>Bad Request</h1><p><pre>") + ec.message() + "</pre></p>"; +- response.set(http::field::content_length, response.body().size()); ++ response.content_length(response.body().size()); + } + + response.set(http::field::connection, "close"); +diff --git a/lib/remote/httputility.cpp b/lib/remote/httputility.cpp +index 91902ba501..a2142e5d86 100644 +--- a/lib/remote/httputility.cpp ++++ b/lib/remote/httputility.cpp +@@ -58,7 +58,7 @@ void HttpUtility::SendJsonBody(boost::beast::http::response<boost::beast::http:: + + response.set(http::field::content_type, "application/json"); + response.body() = JsonEncode(val, params && GetLastParameter(params, "pretty")); +- response.set(http::field::content_length, response.body().size()); ++ response.content_length(response.body().size()); + } + + void HttpUtility::SendJsonError(boost::beast::http::response<boost::beast::http::string_body>& response, +diff --git a/lib/remote/infohandler.cpp b/lib/remote/infohandler.cpp +index 18c18c0e04..80ebba77be 100644 +--- a/lib/remote/infohandler.cpp ++++ b/lib/remote/infohandler.cpp +@@ -92,7 +92,7 @@ bool InfoHandler::HandleRequest( + + body += R"(<p>More information about API requests is available in the <a href="https://icinga.com/docs/icinga2/latest/" target="_blank">documentation</a>.</p></html>)"; + response.body() = body; +- response.set(http::field::content_length, response.body().size()); ++ response.content_length(response.body().size()); + } + + return true; + +From eab07a7318f9e42157bc21d86585340d762759e7 Mon Sep 17 00:00:00 2001 +From: Julian Brost <julian.brost@icinga.com> +Date: Tue, 22 Dec 2020 14:36:48 +0100 +Subject: [PATCH 2/2] Provide a conversion function from icinga::String to + boost::string_view + +Boost.Beast changed the signature of +boost::beast::http::basic_fields::set in version 1.74 so that no longer +allows passing an icinga::String instance as value. This adds a +conversion function so that it works again. +--- + lib/base/string.cpp | 12 ++++++++++++ + lib/base/string.hpp | 2 ++ + 2 files changed, 14 insertions(+) + +diff --git a/lib/base/string.cpp b/lib/base/string.cpp +index c4617e3578..eec5b8372d 100644 +--- a/lib/base/string.cpp ++++ b/lib/base/string.cpp +@@ -127,6 +127,18 @@ String::operator const std::string&() const + return m_Data; + } + ++/** ++ * Conversion function to boost::string_view. ++ * ++ * This allows using String as the value for HTTP headers in boost::beast::http::basic_fields::set. ++ * ++ * @return A boost::string_view representing this string. ++ */ ++String::operator boost::string_view() const ++{ ++ return boost::string_view(m_Data); ++} ++ + const char *String::CStr() const + { + return m_Data.c_str(); +diff --git a/lib/base/string.hpp b/lib/base/string.hpp +index e9799e7ebc..b9290eeee7 100644 +--- a/lib/base/string.hpp ++++ b/lib/base/string.hpp +@@ -6,6 +6,7 @@ + #include "base/i2-base.hpp" + #include "base/object.hpp" + #include <boost/range/iterator.hpp> ++#include <boost/utility/string_view.hpp> + #include <string> + #include <iosfwd> + +@@ -71,6 +72,7 @@ class String + bool operator<(const String& rhs) const; + + operator const std::string&() const; ++ operator boost::string_view() const; + + const char *CStr() const; + |