std::string key_type_str;
std::string caps;
std::string tenant_name;
+ std::string op_mask_str;
bool gen_key;
bool suspended;
RESTArgs::get_int32(s, "max-buckets", default_max_buckets, &max_buckets);
RESTArgs::get_bool(s, "system", false, &system);
RESTArgs::get_bool(s, "exclusive", false, &exclusive);
+ RESTArgs::get_string(s, "op-mask", op_mask_str, &op_mask_str);
if (!s->user->system && system) {
ldout(s->cct, 0) << "cannot set system flag by non-system user" << dendl;
op_state.set_access_key(access_key);
op_state.set_secret_key(secret_key);
+ if (!op_mask_str.empty()) {
+ uint32_t op_mask;
+ int ret = rgw_parse_op_type_list(op_mask_str, &op_mask);
+ if (ret < 0) {
+ ldout(s->cct, 0) << "failed to parse op_mask: " << ret << dendl;
+ http_ret = -EINVAL;
+ return;
+ }
+ op_state.set_op_mask(op_mask);
+ }
+
if (!key_type_str.empty()) {
int32_t key_type = KEY_TYPE_UNDEFINED;
if (key_type_str.compare("swift") == 0)
std::string secret_key;
std::string key_type_str;
std::string caps;
+ std::string op_mask_str;
bool gen_key;
bool suspended;
RESTArgs::get_string(s, "key-type", key_type_str, &key_type_str);
RESTArgs::get_bool(s, "system", false, &system);
+ RESTArgs::get_string(s, "op-mask", op_mask_str, &op_mask_str);
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 (!op_mask_str.empty()) {
+ uint32_t op_mask;
+ int ret = rgw_parse_op_type_list(op_mask_str, &op_mask);
+ if (ret < 0) {
+ ldout(s->cct, 0) << "failed to parse op_mask: " << ret << dendl;
+ http_ret = -EINVAL;
+ return;
+ }
+ op_state.set_op_mask(op_mask);
+ }
+
http_ret = RGWUserAdminOp_User::modify(store, op_state, flusher);
}
static RGWMetadataHandler *user_meta_handler = NULL;
-
+extern void op_type_to_str(uint32_t mask, char *buf, int len);
/**
* Get the anonymous (ie, unauthenticated) user info.
f->dump_int("suspended", (int)info.suspended);
f->dump_int("max_buckets", (int)info.max_buckets);
f->dump_bool("system", (bool)info.system);
+ char buf[256];
+ op_type_to_str(info.op_mask, buf, sizeof(buf));
+ f->dump_string("op_mask", (const char *)buf);
dump_subusers_info(f, info);
dump_access_keys_info(f, info);
dump_swift_keys_info(f, info);