summaryrefslogtreecommitdiff
path: root/src/rgw/rgw_json_enc.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/rgw/rgw_json_enc.cc')
-rw-r--r--src/rgw/rgw_json_enc.cc31
1 files changed, 28 insertions, 3 deletions
diff --git a/src/rgw/rgw_json_enc.cc b/src/rgw/rgw_json_enc.cc
index 04dfb67c71d..e26299f24ad 100644
--- a/src/rgw/rgw_json_enc.cc
+++ b/src/rgw/rgw_json_enc.cc
@@ -235,7 +235,7 @@ static struct rgw_flags_desc rgw_perms[] = {
{ 0, NULL }
};
-static void perm_to_str(uint32_t mask, char *buf, int len)
+static void mask_to_str(rgw_flags_desc *mask_list, uint32_t mask, char *buf, int len)
{
const char *sep = "";
int pos = 0;
@@ -245,8 +245,8 @@ static void perm_to_str(uint32_t mask, char *buf, int len)
}
while (mask) {
uint32_t orig_mask = mask;
- for (int i = 0; rgw_perms[i].mask; i++) {
- struct rgw_flags_desc *desc = &rgw_perms[i];
+ for (int i = 0; mask_list[i].mask; i++) {
+ struct rgw_flags_desc *desc = &mask_list[i];
if ((mask & desc->mask) == desc->mask) {
pos += snprintf(buf + pos, len - pos, "%s%s", sep, desc->str);
if (pos == len)
@@ -262,6 +262,23 @@ static void perm_to_str(uint32_t mask, char *buf, int len)
}
}
+static void perm_to_str(uint32_t mask, char *buf, int len)
+{
+ return mask_to_str(rgw_perms, mask, buf, len);
+}
+
+static struct rgw_flags_desc op_type_flags[] = {
+ { RGW_OP_TYPE_READ, "read" },
+ { RGW_OP_TYPE_WRITE, "write" },
+ { RGW_OP_TYPE_DELETE, "delete" },
+ { 0, NULL }
+};
+
+static void op_type_to_str(uint32_t mask, char *buf, int len)
+{
+ return mask_to_str(op_type_flags, mask, buf, len);
+}
+
void RGWSubUser::dump(Formatter *f) const
{
encode_json("id", name, f);
@@ -340,6 +357,10 @@ void RGWUserInfo::dump(Formatter *f) const
encode_json_map("swift_keys", NULL, "key", NULL, user_info_dump_swift_key,(void *)this, swift_keys, f);
encode_json("caps", caps, f);
+
+ char buf[256];
+ op_type_to_str(op_mask, buf, sizeof(buf));
+ encode_json("op_mask", (const char *)buf, f);
}
@@ -380,6 +401,10 @@ void RGWUserInfo::decode_json(JSONObj *obj)
JSONDecoder::decode_json("subusers", subusers, decode_subusers, obj);
JSONDecoder::decode_json("caps", caps, obj);
+
+ string mask_str;
+ JSONDecoder::decode_json("op_mask", mask_str, obj);
+ rgw_parse_op_type_list(mask_str, &op_mask);
}
void rgw_bucket::dump(Formatter *f) const