bool gen_key;
bool suspended;
bool system;
+ bool exclusive;
uint32_t max_buckets;
int32_t key_type = KEY_TYPE_UNDEFINED;
RESTArgs::get_bool(s, "suspended", false, &suspended);
RESTArgs::get_uint32(s, "max-buckets", RGW_DEFAULT_MAX_BUCKETS, &max_buckets);
RESTArgs::get_bool(s, "system", false, &system);
+ RESTArgs::get_bool(s, "exclusive", false, &exclusive);
if (!s->user.system && system) {
ldout(s->cct, 0) << "cannot set system flag by non-system user" << dendl;
if (s->info.args.exists("system"))
op_state.set_system(system);
+ if (s->info.args.exists("exclusive"))
+ op_state.set_exclusive(exclusive);
+
if (gen_key)
op_state.set_generate_key();
// fail if the user exists already
if (op_state.has_existing_user()) {
- if ((user_email.empty() || old_info.user_email == user_email) &&
+ if (!op_state.exclusive &&
+ (user_email.empty() || old_info.user_email == user_email) &&
old_info.display_name == display_name) {
return execute_modify(op_state, err_msg);
}
uint32_t max_buckets;
__u8 suspended;
__u8 system;
+ __u8 exclusive;
std::string caps;
RGWObjVersionTracker objv;
uint32_t op_mask;
system = is_system;
system_specified = true;
}
+ void set_exclusive(__u8 is_exclusive) {
+ exclusive = is_exclusive;
+ }
void set_user_info(RGWUserInfo& user_info) {
user_id = user_info.user_id;
info = user_info;
perm_mask = 0;
suspended = 0;
system = 0;
+ exclusive = 0;
op_mask = 0;
existing_user = false;