X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=ceph%2Fsrc%2Frgw%2Frgw_rest_s3.cc;h=9c504ca591023275963e9991c1d6d0568755576e;hb=d2e6a577eb19928d58b31d1b6e096ca0f03c4052;hp=1a8af240f9f8f25f95b9eff0dda8bf609221ea67;hpb=224ce89bce8186937e77bdbda572a650953f8c23;p=ceph.git diff --git a/ceph/src/rgw/rgw_rest_s3.cc b/ceph/src/rgw/rgw_rest_s3.cc index 1a8af240f..9c504ca59 100644 --- a/ceph/src/rgw/rgw_rest_s3.cc +++ b/ceph/src/rgw/rgw_rest_s3.cc @@ -515,6 +515,15 @@ static void dump_usage_categories_info(Formatter *formatter, const rgw_usage_log formatter->close_section(); // Category } +static void dump_usage_bucket_info(Formatter *formatter, const std::string& name, const cls_user_bucket_entry& entry) +{ + formatter->open_object_section("Entry"); + formatter->dump_string("Bucket", name); + formatter->dump_int("Bytes", entry.size); + formatter->dump_int("Bytes_Rounded", entry.size_rounded); + formatter->close_section(); // entry +} + void RGWGetUsage_ObjStore_S3::send_response() { if (op_ret < 0) @@ -570,7 +579,7 @@ void RGWGetUsage_ObjStore_S3::send_response() } formatter->close_section(); // entries } - + if (show_log_sum) { formatter->open_array_section("Summary"); map::iterator siter; @@ -586,26 +595,38 @@ void RGWGetUsage_ObjStore_S3::send_response() formatter->dump_int("BytesReceived", total_usage.bytes_received); formatter->dump_int("Ops", total_usage.ops); formatter->dump_int("SuccessfulOps", total_usage.successful_ops); - formatter->close_section(); // total + formatter->close_section(); // total formatter->close_section(); // user } if (s->cct->_conf->rgw_rest_getusage_op_compat) { - formatter->open_object_section("Stats"); - } - + formatter->open_object_section("Stats"); + } + formatter->dump_int("TotalBytes", header.stats.total_bytes); formatter->dump_int("TotalBytesRounded", header.stats.total_bytes_rounded); formatter->dump_int("TotalEntries", header.stats.total_entries); - - if (s->cct->_conf->rgw_rest_getusage_op_compat) { + + if (s->cct->_conf->rgw_rest_getusage_op_compat) { formatter->close_section(); //Stats } formatter->close_section(); // summary } - formatter->close_section(); // usage - rgw_flush_formatter_and_reset(s, s->formatter); + + formatter->open_array_section("CapacityUsed"); + formatter->open_object_section("User"); + formatter->open_array_section("Buckets"); + for (const auto& biter : buckets_usage) { + const cls_user_bucket_entry& entry = biter.second; + dump_usage_bucket_info(formatter, biter.first, entry); + } + formatter->close_section(); // Buckets + formatter->close_section(); // User + formatter->close_section(); // CapacityUsed + + formatter->close_section(); // usage + rgw_flush_formatter_and_reset(s, s->formatter); } int RGWListBucket_ObjStore_S3::get_params() @@ -1742,7 +1763,7 @@ int RGWPostObj_ObjStore_S3::get_policy() /* Populate the owner info. */ s->owner.set_id(s->user->user_id); s->owner.set_name(s->user->display_name); - ldout(s->cct, 0) << "Successful Signature Verification!" << dendl; + ldout(s->cct, 20) << "Successful Signature Verification!" << dendl; } ceph::bufferlist decoded_policy; @@ -1755,7 +1776,7 @@ int RGWPostObj_ObjStore_S3::get_policy() } decoded_policy.append('\0'); // NULL terminate - ldout(s->cct, 0) << "POST policy: " << decoded_policy.c_str() << dendl; + ldout(s->cct, 20) << "POST policy: " << decoded_policy.c_str() << dendl; int r = post_policy.from_json(decoded_policy, err_msg); @@ -3185,7 +3206,7 @@ int RGWHandler_REST_S3::postauth_init() << " s->bucket=" << rgw_make_bucket_entry_name(s->bucket_tenant, s->bucket_name) << dendl; int ret; - ret = validate_tenant_name(s->bucket_tenant); + ret = rgw_validate_tenant_name(s->bucket_tenant); if (ret) return ret; if (!s->bucket_name.empty()) { @@ -3200,7 +3221,7 @@ int RGWHandler_REST_S3::postauth_init() if (!t->src_bucket.empty()) { rgw_parse_url_bucket(t->src_bucket, s->user->user_id.tenant, s->src_tenant_name, s->src_bucket_name); - ret = validate_tenant_name(s->src_tenant_name); + ret = rgw_validate_tenant_name(s->src_tenant_name); if (ret) return ret; ret = valid_s3_bucket_name(s->src_bucket_name, relaxed_names); @@ -3216,8 +3237,8 @@ int RGWHandler_REST_S3::init(RGWRados *store, struct req_state *s, int ret; s->dialect = "s3"; - - ret = validate_tenant_name(s->bucket_tenant); + + ret = rgw_validate_tenant_name(s->bucket_tenant); if (ret) return ret; bool relaxed_names = s->cct->_conf->rgw_relaxed_s3_bucket_names; @@ -3324,32 +3345,6 @@ int RGW_Auth_S3::authorize(RGWRados* const store, return -EPERM; } - if (s->op == OP_OPTIONS) { - init_anon_user(s); - return 0; - } - - AwsVersion version; - AwsRoute route; - std::tie(version, route) = discover_aws_flavour(s->info); - - if (route == AwsRoute::QUERY_STRING && version == AwsVersion::UNKOWN) { - /* FIXME(rzarzynski): handle anon user. */ - init_anon_user(const_cast(s)); - return 0; - } - - return authorize_v2(store, auth_registry, s); -} - - -/* - * handle v2 signatures - */ -int RGW_Auth_S3::authorize_v2(RGWRados* const store, - const rgw::auth::StrategyRegistry& auth_registry, - struct req_state* const s) -{ const auto ret = rgw::auth::Strategy::apply(auth_registry.get_s3_main(), s); if (ret == 0) { /* Populate the owner info. */ @@ -3826,6 +3821,7 @@ AWSGeneralAbstractor::get_auth_data_v4(const req_state* const s, case RGW_OP_SET_BUCKET_WEBSITE: case RGW_OP_PUT_BUCKET_POLICY: case RGW_OP_PUT_OBJ_TAGGING: + case RGW_OP_PUT_LC: break; default: dout(10) << "ERROR: AWS4 completion for this operation NOT IMPLEMENTED" << dendl; @@ -4185,3 +4181,17 @@ rgw::auth::s3::LocalEngine::authenticate( auto apl = apl_factory->create_apl_local(cct, s, user_info, k.subuser); return result_t::grant(std::move(apl), completer_factory(k.key)); } + +bool rgw::auth::s3::S3AnonymousEngine::is_applicable( + const req_state* s +) const noexcept { + if (s->op == OP_OPTIONS) { + return true; + } + + AwsVersion version; + AwsRoute route; + std::tie(version, route) = discover_aws_flavour(s->info); + + return route == AwsRoute::QUERY_STRING && version == AwsVersion::UNKOWN; +}