From d02c1cab5c5e6eb28bd8d12bb379607727ef498a Mon Sep 17 00:00:00 2001 From: Casey Bodley Date: Wed, 7 Aug 2019 10:09:29 -0400 Subject: [PATCH] rgw: add rename_swift_keys for user rename Signed-off-by: Casey Bodley --- src/rgw/rgw_user.cc | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/rgw/rgw_user.cc b/src/rgw/rgw_user.cc index 480dafc0507..2efd31e7612 100644 --- a/src/rgw/rgw_user.cc +++ b/src/rgw/rgw_user.cc @@ -1936,6 +1936,21 @@ int RGWUser::check_op(RGWUserAdminOpState& op_state, std::string *err_msg) return 0; } +// update swift_keys with new user id +static void rename_swift_keys(const rgw_user& user, + std::map& keys) +{ + std::string user_id; + user.to_str(user_id); + + auto modify_keys = std::move(keys); + for (auto& [k, key] : modify_keys) { + std::string id = user_id + ":" + key.subuser; + key.id = id; + keys[id] = std::move(key); + } +} + int RGWUser::execute_rename(RGWUserAdminOpState& op_state, std::string *err_msg) { int ret; @@ -2063,9 +2078,12 @@ int RGWUser::execute_rename(RGWUserAdminOpState& op_state, std::string *err_msg) // update the 'stub user' with all of the other fields and rewrite all of the // associated index objects - op_state.get_user_info().user_id = uid; + RGWUserInfo& user_info = op_state.get_user_info(); + user_info.user_id = uid; op_state.objv = objv; + rename_swift_keys(uid, user_info.swift_keys); + return update(op_state, err_msg); }