From 2baed294ce1ed94a1b42fe131a396f8873b931b5 Mon Sep 17 00:00:00 2001 From: Radoslaw Zarzynski Date: Fri, 23 Jun 2017 06:05:54 -0400 Subject: [PATCH] rgw: use a struct instead of std::tuple in AWS's VersionAbstractor. The C++11 standard mandates the variadic constructor of std::tuple to be explicit. As a result, we can't use the uniform initialization syntax in return statements. Moreover, the tuples became too verbose after the AWSv4 rework. See: https://stackoverflow.com/a/14961849 Signed-off-by: Radoslaw Zarzynski --- src/rgw/rgw_rest_s3.cc | 61 ++++++++++-------------------------------- src/rgw/rgw_rest_s3.h | 50 +++++++++------------------------- 2 files changed, 27 insertions(+), 84 deletions(-) diff --git a/src/rgw/rgw_rest_s3.cc b/src/rgw/rgw_rest_s3.cc index 293d21133f7..79fc07f4ca4 100644 --- a/src/rgw/rgw_rest_s3.cc +++ b/src/rgw/rgw_rest_s3.cc @@ -3492,13 +3492,7 @@ null_completer_factory(const boost::optional& secret_key) } -using AWSVerAbstractor = AWSEngine::VersionAbstractor; - -std::tuple +AWSEngine::VersionAbstractor::auth_data_t AWSGeneralAbstractor::get_auth_data(const req_state* const s) const { AwsVersion version; @@ -3525,11 +3519,7 @@ AWSGeneralAbstractor::get_v4_canonical_headers( using_qs, false); } -std::tuple +AWSEngine::VersionAbstractor::auth_data_t AWSGeneralAbstractor::get_auth_data_v4(const req_state* const s, /* FIXME: const. */ bool using_qs) const @@ -3711,11 +3701,7 @@ AWSGeneralBoto2Abstractor::get_v4_canonical_headers( } -std::tuple +AWSEngine::VersionAbstractor::auth_data_t AWSGeneralAbstractor::get_auth_data_v2(const req_state* const s) const { boost::string_view access_key_id; @@ -3779,11 +3765,7 @@ AWSGeneralAbstractor::get_auth_data_v2(const req_state* const s) const } -std::tuple +AWSEngine::VersionAbstractor::auth_data_t AWSBrowserUploadAbstractor::get_auth_data_v2(const req_state* const s) const { return { @@ -3795,11 +3777,7 @@ AWSBrowserUploadAbstractor::get_auth_data_v2(const req_state* const s) const }; } -std::tuple +AWSEngine::VersionAbstractor::auth_data_t AWSBrowserUploadAbstractor::get_auth_data_v4(const req_state* const s) const { const boost::string_view credential = s->auth.s3_postobj_creds.x_amz_credential; @@ -3828,11 +3806,7 @@ AWSBrowserUploadAbstractor::get_auth_data_v4(const req_state* const s) const }; } -std::tuple +AWSEngine::VersionAbstractor::auth_data_t AWSBrowserUploadAbstractor::get_auth_data(const req_state* const s) const { if (s->auth.s3_postobj_creds.x_amz_algorithm == AWS4_HMAC_SHA256_STR) { @@ -3849,25 +3823,18 @@ AWSBrowserUploadAbstractor::get_auth_data(const req_state* const s) const AWSEngine::result_t AWSEngine::authenticate(const req_state* const s) const { - boost::string_view access_key_id; - boost::string_view signature; - VersionAbstractor::string_to_sign_t string_to_sign; - - VersionAbstractor::signature_factory_t signature_factory; - VersionAbstractor::completer_factory_t completer_factory; - /* Small reminder: an ver_abstractor is allowed to throw! */ - std::tie(access_key_id, - signature, - string_to_sign, - signature_factory, - completer_factory) = ver_abstractor.get_auth_data(s); + const auto auth_data = ver_abstractor.get_auth_data(s); - if (access_key_id.empty() || signature.empty()) { + if (auth_data.access_key_id.empty() || auth_data.client_signature.empty()) { return result_t::deny(-EINVAL); } else { - return authenticate(access_key_id, signature, string_to_sign, - signature_factory, completer_factory, s); + return authenticate(auth_data.access_key_id, + auth_data.client_signature, + auth_data.string_to_sign, + auth_data.signature_factory, + auth_data.completer_factory, + s); } } diff --git a/src/rgw/rgw_rest_s3.h b/src/rgw/rgw_rest_s3.h index 65d1b36ad15..556dee12d1b 100644 --- a/src/rgw/rgw_rest_s3.h +++ b/src/rgw/rgw_rest_s3.h @@ -697,12 +697,15 @@ public: std::function& secret_key)>; - virtual std::tuple - get_auth_data(const req_state* s) const = 0; + struct auth_data_t { + access_key_id_t access_key_id; + client_signature_t client_signature; + string_to_sign_t string_to_sign; + signature_factory_t signature_factory; + completer_factory_t completer_factory; + }; + + virtual auth_data_t get_auth_data(const req_state* s) const = 0; }; protected: @@ -745,31 +748,15 @@ class AWSGeneralAbstractor : public AWSEngine::VersionAbstractor { const boost::string_view& signedheaders, const bool using_qs) const; - std::tuple - get_auth_data_v2(const req_state* s) const; - - std::tuple - get_auth_data_v4(const req_state* s, bool using_qs) const; + auth_data_t get_auth_data_v2(const req_state* s) const; + auth_data_t get_auth_data_v4(const req_state* s, bool using_qs) const; public: AWSGeneralAbstractor(CephContext* const cct) : cct(cct) { } - std::tuple - get_auth_data(const req_state* s) const override; + auth_data_t get_auth_data(const req_state* s) const override; }; class AWSGeneralBoto2Abstractor : public AWSGeneralAbstractor { @@ -788,12 +775,6 @@ class AWSBrowserUploadAbstractor : public AWSEngine::VersionAbstractor { static_cast(bl.length())); } - using auth_data_t = std::tuple; - auth_data_t get_auth_data_v2(const req_state* s) const; auth_data_t get_auth_data_v4(const req_state* s) const; @@ -801,12 +782,7 @@ public: AWSBrowserUploadAbstractor(CephContext*) { } - std::tuple - get_auth_data(const req_state* s) const override; + auth_data_t get_auth_data(const req_state* s) const override; }; -- 2.39.5