From: Casey Bodley Date: Sat, 11 Mar 2023 18:27:55 +0000 (-0500) Subject: rgw/beast: add extra_response_headers for Server name X-Git-Tag: v19.0.0~1567^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=ffeacc095963436588da749f34c5890ca8c74aa4;p=ceph.git rgw/beast: add extra_response_headers for Server name Signed-off-by: Casey Bodley --- diff --git a/src/rgw/rgw_asio_client.cc b/src/rgw/rgw_asio_client.cc index a0ec0bf5c06..cee16d06a44 100644 --- a/src/rgw/rgw_asio_client.cc +++ b/src/rgw/rgw_asio_client.cc @@ -14,10 +14,12 @@ using namespace rgw::asio; ClientIO::ClientIO(parser_type& parser, bool is_ssl, const endpoint_type& local_endpoint, - const endpoint_type& remote_endpoint) + const endpoint_type& remote_endpoint, + std::string_view extra_response_headers) : parser(parser), is_ssl(is_ssl), local_endpoint(local_endpoint), remote_endpoint(remote_endpoint), + extra_response_headers(extra_response_headers), txbuf(*this) { } @@ -149,6 +151,11 @@ size_t ClientIO::complete_header() sent += txbuf.sputn(timestr, strlen(timestr)); } + if (extra_response_headers.size()) { + sent += txbuf.sputn(extra_response_headers.data(), + extra_response_headers.size()); + } + if (parser.keep_alive()) { constexpr char CONN_KEEP_ALIVE[] = "Connection: Keep-Alive\r\n"; sent += txbuf.sputn(CONN_KEEP_ALIVE, sizeof(CONN_KEEP_ALIVE) - 1); diff --git a/src/rgw/rgw_asio_client.h b/src/rgw/rgw_asio_client.h index e2ab943dd57..b7f0e003a2e 100644 --- a/src/rgw/rgw_asio_client.h +++ b/src/rgw/rgw_asio_client.h @@ -25,6 +25,7 @@ class ClientIO : public io::RestfulClient, using endpoint_type = boost::asio::ip::tcp::endpoint; endpoint_type local_endpoint; endpoint_type remote_endpoint; + std::string_view extra_response_headers; RGWEnv env; @@ -34,7 +35,8 @@ class ClientIO : public io::RestfulClient, public: ClientIO(parser_type& parser, bool is_ssl, const endpoint_type& local_endpoint, - const endpoint_type& remote_endpoint); + const endpoint_type& remote_endpoint, + std::string_view extra_response_headers); ~ClientIO() override; int init_env(CephContext *cct) override; diff --git a/src/rgw/rgw_asio_frontend.cc b/src/rgw/rgw_asio_frontend.cc index 633a2963300..fa05102882f 100644 --- a/src/rgw/rgw_asio_frontend.cc +++ b/src/rgw/rgw_asio_frontend.cc @@ -16,6 +16,7 @@ #include "common/async/shared_mutex.h" #include "common/errno.h" #include "common/strtol.h" +#include "ceph_ver.h" #include "rgw_asio_client.h" #include "rgw_asio_frontend.h" @@ -78,8 +79,10 @@ class StreamIO : public rgw::asio::ClientIO { rgw::asio::parser_type& parser, yield_context yield, parse_buffer& buffer, bool is_ssl, const tcp::endpoint& local_endpoint, - const tcp::endpoint& remote_endpoint) - : ClientIO(parser, is_ssl, local_endpoint, remote_endpoint), + const tcp::endpoint& remote_endpoint, + std::string_view extra_response_headers) + : ClientIO(parser, is_ssl, local_endpoint, remote_endpoint, + extra_response_headers), cct(cct), stream(stream), timeout(timeout), yield(yield), buffer(buffer) {} @@ -193,6 +196,7 @@ void handle_connection(boost::asio::io_context& context, SharedMutex& pause_mutex, rgw::dmclock::Scheduler *scheduler, const std::string& uri_prefix, + std::string_view extra_response_headers, boost::system::error_code& ec, yield_context yield) { @@ -265,7 +269,8 @@ void handle_connection(boost::asio::io_context& context, } StreamIO real_client{cct, stream, timeout, parser, yield, buffer, - is_ssl, local_endpoint, remote_endpoint}; + is_ssl, local_endpoint, remote_endpoint, + extra_response_headers}; auto real_client_io = rgw::io::add_reordering( rgw::io::add_buffering(cct, @@ -437,6 +442,8 @@ class AsioFrontend { std::unique_ptr client_config; void accept(Listener& listener, boost::system::error_code ec); + std::string extra_response_headers; + public: AsioFrontend(RGWProcessEnv& env, RGWFrontendConfig* conf, dmc::SchedulerCtx& sched_ctx) @@ -558,6 +565,9 @@ int AsioFrontend::init() boost::system::error_code ec; auto& config = conf->get_config_map(); + // format the Server response header + extra_response_headers = "Server: Ceph Object Gateway (" CEPH_RELEASE_NAME ")\r\n"; + if (auto i = config.find("prefix"); i != config.end()) { uri_prefix = i->second; } @@ -1035,7 +1045,7 @@ void AsioFrontend::accept(Listener& l, boost::system::error_code ec) conn->buffer.consume(bytes); handle_connection(context, env, stream, timeout, header_limit, conn->buffer, true, pause_mutex, scheduler.get(), - uri_prefix, ec, yield); + uri_prefix, extra_response_headers, ec, yield); if (!ec) { // ssl shutdown (ignoring errors) stream.async_shutdown(yield[ec]); @@ -1054,7 +1064,7 @@ void AsioFrontend::accept(Listener& l, boost::system::error_code ec) boost::system::error_code ec; handle_connection(context, env, conn->socket, timeout, header_limit, conn->buffer, false, pause_mutex, scheduler.get(), - uri_prefix, ec, yield); + uri_prefix, extra_response_headers, ec, yield); conn->socket.shutdown(tcp_socket::shutdown_both, ec); }, make_stack_allocator()); }