Skip to content

Commit 663f52f

Browse files
authored
Merge pull request ceph#58606 from cbodley/wip-66937
rgw/auth: RemoteApplier respects implicit tenants Reviewed-by: Adam Emerson <[email protected]>
2 parents 5dd91d3 + ddbe2c0 commit 663f52f

File tree

2 files changed

+13
-8
lines changed

2 files changed

+13
-8
lines changed

src/rgw/rgw_auth.cc

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -773,7 +773,7 @@ ACLOwner rgw::auth::RemoteApplier::get_aclowner() const
773773
owner.id = account->id;
774774
owner.display_name = account->name;
775775
} else {
776-
owner.id = info.acct_user;
776+
owner.id = owner_acct_user;
777777
owner.display_name = info.acct_name;
778778
}
779779
return owner;
@@ -848,7 +848,7 @@ bool rgw::auth::RemoteApplier::is_identity(const Principal& p) const {
848848

849849
void rgw::auth::RemoteApplier::to_str(std::ostream& out) const
850850
{
851-
out << "rgw::auth::RemoteApplier(acct_user=" << info.acct_user
851+
out << "rgw::auth::RemoteApplier(acct_user=" << owner_acct_user
852852
<< ", acct_name=" << info.acct_name
853853
<< ", perm_mask=" << info.perm_mask
854854
<< ", is_admin=" << info.is_admin << ")";
@@ -898,15 +898,15 @@ void rgw::auth::RemoteApplier::create_account(const DoutPrefixProvider* dpp,
898898
bool implicit_tenant,
899899
RGWUserInfo& user_info) const /* out */
900900
{
901-
rgw_user new_acct_user = acct_user;
901+
owner_acct_user = acct_user;
902902

903903
/* An upper layer may enforce creating new accounts within their own
904904
* tenants. */
905-
if (new_acct_user.tenant.empty() && implicit_tenant) {
906-
new_acct_user.tenant = new_acct_user.id;
905+
if (owner_acct_user.tenant.empty() && implicit_tenant) {
906+
owner_acct_user.tenant = owner_acct_user.id;
907907
}
908908

909-
std::unique_ptr<rgw::sal::User> user = driver->get_user(new_acct_user);
909+
std::unique_ptr<rgw::sal::User> user = driver->get_user(owner_acct_user);
910910
user->get_info().display_name = info.acct_name;
911911
if (info.acct_type) {
912912
//ldap/keystone for s3 users
@@ -967,7 +967,7 @@ void rgw::auth::RemoteApplier::load_acct_info(const DoutPrefixProvider* dpp, RGW
967967
if (split_mode && !implicit_tenant)
968968
; /* suppress lookup for id used by "other" protocol */
969969
else if (acct_user.tenant.empty()) {
970-
const rgw_user tenanted_uid(acct_user.id, acct_user.id);
970+
rgw_user tenanted_uid(acct_user.id, acct_user.id);
971971
user = driver->get_user(tenanted_uid);
972972

973973
if (user->load_user(dpp, null_yield) >= 0) {
@@ -976,6 +976,7 @@ void rgw::auth::RemoteApplier::load_acct_info(const DoutPrefixProvider* dpp, RGW
976976
user->get_attrs(), account, policies);
977977

978978
user_info = std::move(user->get_info());
979+
owner_acct_user = std::move(tenanted_uid);
979980
return;
980981
}
981982
}
@@ -990,6 +991,7 @@ void rgw::auth::RemoteApplier::load_acct_info(const DoutPrefixProvider* dpp, RGW
990991
user->get_attrs(), account, policies);
991992

992993
user_info = std::move(user->get_info());
994+
owner_acct_user = acct_user;
993995
return;
994996
}
995997

src/rgw/rgw_auth.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -621,6 +621,9 @@ class RemoteApplier : public IdentityApplier {
621621
const rgw::auth::ImplicitTenants& implicit_tenant_context;
622622
const rgw::auth::ImplicitTenants::implicit_tenant_flag_bits implicit_tenant_bit;
623623

624+
// AuthInfo::acct_user updated with implicit tenant if necessary
625+
mutable rgw_user owner_acct_user;
626+
624627
// account and policies are loaded by load_acct_info()
625628
mutable std::optional<RGWAccountInfo> account;
626629
mutable std::vector<IAM::Policy> policies;
@@ -660,7 +663,7 @@ class RemoteApplier : public IdentityApplier {
660663
std::string get_acct_name() const override { return info.acct_name; }
661664
std::string get_subuser() const override { return {}; }
662665
const std::string& get_tenant() const override {
663-
return info.acct_user.tenant;
666+
return owner_acct_user.tenant;
664667
}
665668
const std::optional<RGWAccountInfo>& get_account() const override {
666669
return account;

0 commit comments

Comments
 (0)