]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: user rename overwrites new user with --yes-i-really-mean-it
authorCasey Bodley <cbodley@redhat.com>
Tue, 6 Aug 2019 14:35:19 +0000 (10:35 -0400)
committerCasey Bodley <cbodley@redhat.com>
Wed, 7 Aug 2019 20:25:12 +0000 (16:25 -0400)
if a previous rename attempt fails to complete, it can be restarted with
--yes-i-really-mean-it to overwrite the 'stub' user created previously

Signed-off-by: Casey Bodley <cbodley@redhat.com>
src/rgw/rgw_admin.cc
src/rgw/rgw_user.cc
src/rgw/rgw_user.h

index 591a7d895ceade03cf52b16db6c3ccc6da7f94aa..c18acd52f7e6687d5ad45cc729654887a317dfc9 100644 (file)
@@ -5073,8 +5073,14 @@ int main(int argc, const char **argv)
     output_user_info = false;
     break;
   case OPT_USER_RENAME:
+    if (yes_i_really_mean_it) {
+      user_op.set_overwrite_new_user(true);
+    }
     ret = user.rename(user_op, &err_msg);
     if (ret < 0) {
+      if (ret == -EEXIST) {
+        err_msg += ". to overwrite this user, add --yes-i-really-mean-it";
+      }
       cerr << "could not rename user: " << err_msg << std::endl;
       return -ret;
     }
index a43ac58dc004ea6b86ca8ce71f72e397fea1868a..4d8be2198d5d69b74e4a9795ff905b0677c016f7 100644 (file)
@@ -1969,8 +1969,9 @@ int RGWUser::execute_user_rename(RGWUserAdminOpState& op_state, std::string *err
   stub_user_info.user_id = uid;
 
   RGWObjVersionTracker objv;
+  const bool exclusive = !op_state.get_overwrite_new_user(); // overwrite if requested
 
-  ret = rgw_store_user_info(store, stub_user_info, nullptr, &objv, real_time(), true);
+  ret = rgw_store_user_info(store, stub_user_info, nullptr, &objv, real_time(), exclusive);
   if (ret == -EEXIST) {
     set_err_msg(err_msg, "user name given by --new-uid already exists");
     return ret;
index fe5a7fbd4353197ffaedcc51edbfc43c969af1e8..4b0644582f703a0feb4891c6f715e5b0f49db87b 100644 (file)
@@ -161,6 +161,7 @@ struct RGWUserAdminOpState {
   std::string user_email;
   std::string display_name;
   rgw_user new_user_id;
+  bool overwrite_new_user = false;
   int32_t max_buckets;
   __u8 suspended;
   __u8 admin;
@@ -265,6 +266,9 @@ struct RGWUserAdminOpState {
 
     new_user_id = id;
   }
+  void set_overwrite_new_user(bool b) {
+    overwrite_new_user = b;
+  }
 
   void set_user_email(std::string& email) {
    /* always lowercase email address */
@@ -456,6 +460,7 @@ struct RGWUserAdminOpState {
   std::string get_user_email() { return user_email; }
   std::string get_display_name() { return display_name; }
   rgw_user& get_new_uid() { return new_user_id; }
+  bool get_overwrite_new_user() const { return overwrite_new_user; }
   map<int, std::string>& get_temp_url_keys() { return temp_url_keys; }
 
   RGWUserInfo&  get_user_info() { return info; }