static string rgw_uri_all_users = RGW_URI_ALL_USERS;
static string rgw_uri_auth_users = RGW_URI_AUTH_USERS;
-
+
+XMLObjIter::
+XMLObjIter()
+{
+}
+
+XMLObjIter::
+~XMLObjIter()
+{
+}
+
+void XMLObjIter::
+set(const XMLObjIter::map_iter_t &_cur, const XMLObjIter::map_iter_t &_end)
+{
+ cur = _cur;
+ end = _end;
+}
+
+XMLObj *XMLObjIter::
+get_next()
+{
+ XMLObj *obj = NULL;
+ if (cur != end) {
+ obj = cur->second;
+ ++cur;
+ }
+ return obj;
+};
+
ostream& operator<<(ostream& out, XMLObj& obj) {
out << obj.type << ": " << obj.data;
return out;
}
+XMLObj::
+~XMLObj()
+{
+}
+
+bool XMLObj::
+xml_start(XMLObj *parent, const char *el, const char **attr)
+{
+ this->parent = parent;
+ type = el;
+ for (int i = 0; attr[i]; i += 2) {
+ attr_map[attr[i]] = string(attr[i + 1]);
+ }
+ return true;
+}
+
+bool XMLObj::
+xml_end(const char *el)
+{
+ return true;
+}
+
+void XMLObj::
+xml_handle_data(const char *s, int len)
+{
+ data = string(s, len);
+}
+
+string& XMLObj::
+XMLObj::get_data()
+{
+ return data;
+}
+
+XMLObj *XMLObj::
+XMLObj::get_parent()
+{
+ return parent;
+}
+
+void XMLObj::
+add_child(string el, XMLObj *obj)
+{
+ children.insert(pair<string, XMLObj *>(el, obj));
+}
+
+bool XMLObj::
+get_attr(string name, string& attr)
+{
+ map<string, string>::iterator iter = attr_map.find(name);
+ if (iter == attr_map.end())
+ return false;
+ attr = iter->second;
+ return true;
+}
+
+XMLObjIter XMLObj::
+find(string name)
+{
+ XMLObjIter iter;
+ map<string, XMLObj *>::iterator first;
+ map<string, XMLObj *>::iterator last;
+ first = children.find(name);
+ last = children.upper_bound(name);
+ iter.set(first, last);
+ return iter;
+}
+
+XMLObj *XMLObj::
+find_first(string name)
+{
+ XMLObjIter iter;
+ map<string, XMLObj *>::iterator first;
+ first = children.find(name);
+ if (first != children.end())
+ return first->second;
+ return NULL;
+}
+
+ACLPermission::
+ACLPermission() : flags(0)
+{
+}
+
+ACLPermission::~ACLPermission()
+{
+}
+
+int ACLPermission::
+get_permissions()
+{
+ return flags;
+}
+
+void ACLPermission::
+set_permissions(int perm)
+{
+ flags = perm;
+}
+
+void ACLPermission::
+to_xml(ostream& out)
+{
+ if ((flags & RGW_PERM_FULL_CONTROL) == RGW_PERM_FULL_CONTROL) {
+ out << "<Permission>FULL_CONTROL</Permission>";
+ } else {
+ if (flags & RGW_PERM_READ)
+ out << "<Permission>READ</Permission>";
+ if (flags & RGW_PERM_WRITE)
+ out << "<Permission>WRITE</Permission>";
+ if (flags & RGW_PERM_READ_ACP)
+ out << "<Permission>READ_ACP</Permission>";
+ if (flags & RGW_PERM_WRITE_ACP)
+ out << "<Permission>WRITE_ACP</Permission>";
+ }
+}
-bool ACLPermission::xml_end(const char *el) {
+bool ACLPermission::
+xml_end(const char *el)
+{
const char *s = data.c_str();
if (strcasecmp(s, "READ") == 0) {
flags |= RGW_PERM_READ;
return false;
}
+ACLGranteeType::
+ACLGranteeType() : type(ACL_TYPE_UNKNOWN)
+{
+}
+
+ACLGranteeType::
+~ACLGranteeType()
+{
+}
+
+const char *ACLGranteeType::
+to_string()
+{
+ switch (type) {
+ case ACL_TYPE_CANON_USER:
+ return "CanonicalUser";
+ case ACL_TYPE_EMAIL_USER:
+ return "AmazonCustomerByEmail";
+ case ACL_TYPE_GROUP:
+ return "Group";
+ default:
+ return "unknown";
+ }
+}
+
+ACLGranteeTypeEnum ACLGranteeType::
+get_type()
+{
+ return (ACLGranteeTypeEnum)type;
+};
+
+void ACLGranteeType::
+set(ACLGranteeTypeEnum t)
+{
+ type = t;
+}
+
+void ACLGranteeType::
+set(const char *s)
+{
+ if (!s) {
+ type = ACL_TYPE_UNKNOWN;
+ return;
+ }
+ if (strcmp(s, "CanonicalUser") == 0)
+ type = ACL_TYPE_CANON_USER;
+ else if (strcmp(s, "AmazonCustomerByEmail") == 0)
+ type = ACL_TYPE_EMAIL_USER;
+ else if (strcmp(s, "Group") == 0)
+ type = ACL_TYPE_GROUP;
+ else
+ type = ACL_TYPE_UNKNOWN;
+}
+
+ACLGrantee::
+ACLGrantee()
+{
+}
+
+ACLGrantee::
+~ACLGrantee()
+{
+}
+
+string& ACLGrantee::
+get_type()
+{
+ return type;
+}
+
class ACLID : public XMLObj
{
public:
class ACLDisplayName : public XMLObj
{
public:
- ACLDisplayName() {}
+ ACLDisplayName() {}
~ACLDisplayName() {}
};
+ACLOwner::
+ACLOwner()
+{
+}
+
+ACLOwner::
+~ACLOwner()
+{
+}
+
bool ACLOwner::xml_end(const char *el) {
- ACLID *acl_id = (ACLID *)find_first("ID");
+ ACLID *acl_id = (ACLID *)find_first("ID");
ACLID *acl_name = (ACLID *)find_first("DisplayName");
// ID is mandatory
return true;
}
+ACLGrant::
+ACLGrant()
+{
+}
+
+ACLGrant::
+~ACLGrant()
+{
+}
+
bool ACLGrant::xml_end(const char *el) {
ACLGrantee *acl_grantee;
ACLID *acl_id;
return true;
}
+RGWAccessControlList::
+RGWAccessControlList() : user_map_initialized(false)
+{
+}
+
+RGWAccessControlList::
+~RGWAccessControlList()
+{
+}
+
void RGWAccessControlList::init_user_map()
{
multimap<string, ACLGrant>::iterator iter;
}
+RGWAccessControlPolicy::
+RGWAccessControlPolicy()
+{
+}
+
+RGWAccessControlPolicy::
+~RGWAccessControlPolicy()
+{
+}
+
bool RGWAccessControlPolicy::xml_end(const char *el) {
RGWAccessControlList *acl_p =
(RGWAccessControlList *)find_first("AccessControlList");
/* this is the owner, it has implicit permissions */
if (id.compare(owner.get_id()) == 0) {
perm |= RGW_PERM_READ_ACP | RGW_PERM_WRITE_ACP;
- perm &= perm_mask;
+ perm &= perm_mask;
}
}
handler->set_failure();
}
+RGWXMLParser::
+RGWXMLParser() : buf(NULL), buf_len(0), cur_obj(NULL), success(true)
+{
+}
+
+RGWXMLParser::
+~RGWXMLParser()
+{
+ free(buf);
+ vector<XMLObj *>::iterator iter;
+ for (iter = objs.begin(); iter != objs.end(); ++iter) {
+ XMLObj *obj = *iter;
+ delete obj;
+ }
+}
+
bool RGWXMLParser::xml_start(const char *el, const char **attr) {
XMLObj * obj;
if (strcmp(el, "AccessControlPolicy") == 0) {
- obj = new RGWAccessControlPolicy();
+ obj = new RGWAccessControlPolicy();
} else if (strcmp(el, "Owner") == 0) {
- obj = new ACLOwner();
+ obj = new ACLOwner();
} else if (strcmp(el, "AccessControlList") == 0) {
- obj = new RGWAccessControlList();
+ obj = new RGWAccessControlList();
} else if (strcmp(el, "ID") == 0) {
- obj = new ACLID();
+ obj = new ACLID();
} else if (strcmp(el, "DisplayName") == 0) {
- obj = new ACLDisplayName();
+ obj = new ACLDisplayName();
} else if (strcmp(el, "Grant") == 0) {
- obj = new ACLGrant();
+ obj = new ACLGrant();
} else if (strcmp(el, "Grantee") == 0) {
- obj = new ACLGrantee();
+ obj = new ACLGrantee();
} else if (strcmp(el, "Permission") == 0) {
- obj = new ACLPermission();
+ obj = new ACLPermission();
} else if (strcmp(el, "URI") == 0) {
- obj = new ACLURI();
+ obj = new ACLURI();
} else if (strcmp(el, "EmailAddress") == 0) {
- obj = new ACLEmail();
+ obj = new ACLEmail();
} else {
- obj = new XMLObj();
+ obj = new XMLObj();
}
if (!obj->xml_start(cur_obj, el, attr))
return false;
#define RGW_PERM_WRITE_ACP 0x08
#define RGW_PERM_FULL_CONTROL ( RGW_PERM_READ | RGW_PERM_WRITE | \
RGW_PERM_READ_ACP | RGW_PERM_WRITE_ACP )
-#define RGW_PERM_ALL RGW_PERM_FULL_CONTROL
+#define RGW_PERM_ALL RGW_PERM_FULL_CONTROL
class XMLObj;
class XMLObjIter {
- map<string, XMLObj *>::iterator cur;
- map<string, XMLObj *>::iterator end;
+ typedef map<string, XMLObj *>::iterator map_iter_t;
+ map_iter_t cur;
+ map_iter_t end;
public:
- XMLObjIter() {}
- void set(map<string, XMLObj *>::iterator& _cur, map<string, XMLObj *>::iterator& _end) { cur = _cur; end = _end; }
- XMLObj *get_next() {
- XMLObj *obj = NULL;
- if (cur != end) {
- obj = cur->second;
- ++cur;
- }
- return obj;
- };
+ XMLObjIter();
+ ~XMLObjIter();
+ void set(const XMLObjIter::map_iter_t &_cur, const XMLObjIter::map_iter_t &_end);
+ XMLObj *get_next();
};
/**
multimap<string, XMLObj *> children;
map<string, string> attr_map;
public:
- virtual ~XMLObj() { }
- bool xml_start(XMLObj *parent, const char *el, const char **attr) {
- this->parent = parent;
- type = el;
- for (int i = 0; attr[i]; i += 2) {
- attr_map[attr[i]] = string(attr[i + 1]);
- }
- return true;
- }
- virtual bool xml_end(const char *el) { return true; }
- virtual void xml_handle_data(const char *s, int len) { data = string(s, len); }
- string& get_data() { return data; }
- XMLObj *get_parent() { return parent; }
- void add_child(string el, XMLObj *obj) {
- children.insert(pair<string, XMLObj *>(el, obj));
- }
-
- bool get_attr(string name, string& attr) {
- map<string, string>::iterator iter = attr_map.find(name);
- if (iter == attr_map.end())
- return false;
- attr = iter->second;
- return true;
- }
-
- XMLObjIter find(string name) {
- XMLObjIter iter;
- map<string, XMLObj *>::iterator first;
- map<string, XMLObj *>::iterator last;
- first = children.find(name);
- last = children.upper_bound(name);
- iter.set(first, last);
- return iter;
- }
-
- XMLObj *find_first(string name) {
- XMLObjIter iter;
- map<string, XMLObj *>::iterator first;
- first = children.find(name);
- if (first != children.end())
- return first->second;
- return NULL;
- }
+ virtual ~XMLObj();
+ bool xml_start(XMLObj *parent, const char *el, const char **attr);
+ virtual bool xml_end(const char *el);
+ virtual void xml_handle_data(const char *s, int len);
+ string& get_data();
+ XMLObj *get_parent();
+ void add_child(string el, XMLObj *obj);
+ bool get_attr(string name, string& attr);
+ XMLObjIter find(string name);
+ XMLObj *find_first(string name);
friend ostream& operator<<(ostream& out, XMLObj& obj);
};
{
int flags;
public:
- ACLPermission() : flags(0) {}
- ~ACLPermission() {}
+ ACLPermission();
+ ~ACLPermission();
bool xml_end(const char *el);
- int get_permissions() { return flags; }
- void set_permissions(int perm) { flags = perm; }
+ int get_permissions();
+ void set_permissions(int perm);
void encode(bufferlist& bl) const {
__u8 struct_v = 1;
::decode(struct_v, bl);
::decode(flags, bl);
}
- void to_xml(ostream& out) {
- if ((flags & RGW_PERM_FULL_CONTROL) == RGW_PERM_FULL_CONTROL) {
- out << "<Permission>FULL_CONTROL</Permission>";
- } else {
- if (flags & RGW_PERM_READ)
- out << "<Permission>READ</Permission>";
- if (flags & RGW_PERM_WRITE)
- out << "<Permission>WRITE</Permission>";
- if (flags & RGW_PERM_READ_ACP)
- out << "<Permission>READ_ACP</Permission>";
- if (flags & RGW_PERM_WRITE_ACP)
- out << "<Permission>WRITE_ACP</Permission>";
- }
- }
+ void to_xml(ostream& out);
};
WRITE_CLASS_ENCODER(ACLPermission)
{
__u32 type;
public:
- ACLGranteeType() : type(ACL_TYPE_UNKNOWN) {}
- const char *to_string() {
- switch (type) {
- case ACL_TYPE_CANON_USER:
- return "CanonicalUser";
- case ACL_TYPE_EMAIL_USER:
- return "AmazonCustomerByEmail";
- case ACL_TYPE_GROUP:
- return "Group";
- default:
- return "unknown";
- }
- }
- ACLGranteeTypeEnum get_type() { return (ACLGranteeTypeEnum)type; };
- void set(ACLGranteeTypeEnum t) { type = t; }
-
- void set(const char *s) {
- if (!s) {
- type = ACL_TYPE_UNKNOWN;
- return;
- }
- if (strcmp(s, "CanonicalUser") == 0)
- type = ACL_TYPE_CANON_USER;
- else if (strcmp(s, "AmazonCustomerByEmail") == 0)
- type = ACL_TYPE_EMAIL_USER;
- else if (strcmp(s, "Group") == 0)
- type = ACL_TYPE_GROUP;
- else
- type = ACL_TYPE_UNKNOWN;
- }
-
+ ACLGranteeType();
+ ~ACLGranteeType();
+ const char *to_string();
+ ACLGranteeTypeEnum get_type();
+ void set(ACLGranteeTypeEnum t);
+ void set(const char *s);
void encode(bufferlist& bl) const {
__u8 struct_v = 1;
::encode(struct_v, bl);
{
string type;
public:
- ACLGrantee() {}
- ~ACLGrantee() {}
+ ACLGrantee();
+ ~ACLGrantee();
bool xml_start(const char *el, const char **attr);
- string& get_type() { return type; }
+ string& get_type();
};
class ACLGrant : public XMLObj
{
ACLGranteeType type;
-
+
string id;
string uri;
string email;
ACLPermission permission;
string name;
public:
- ACLGrant() {}
- ~ACLGrant() {}
+ ACLGrant();
+ ~ACLGrant();
bool xml_end(const char *el);
void init_user_map();
public:
- RGWAccessControlList() : user_map_initialized(false) {}
- ~RGWAccessControlList() {}
+ RGWAccessControlList();
+ ~RGWAccessControlList();
bool xml_end(const char *el);
int get_perm(string& id, int perm_mask);
string id;
string display_name;
public:
- ACLOwner() {}
- ~ACLOwner() {}
+ ACLOwner();
+ ~ACLOwner();
bool xml_end(const char *el);
void encode(bufferlist& bl) const {
ACLOwner owner;
public:
- RGWAccessControlPolicy() {}
- ~RGWAccessControlPolicy() {}
+ RGWAccessControlPolicy();
+ ~RGWAccessControlPolicy();
bool xml_end(const char *el);
XMLObj *cur_obj;
vector<XMLObj *> objs;
public:
- RGWXMLParser() : buf(NULL), buf_len(0), cur_obj(NULL), success(true) {}
- ~RGWXMLParser() {
- free(buf);
- vector<XMLObj *>::iterator iter;
- for (iter = objs.begin(); iter != objs.end(); ++iter) {
- XMLObj *obj = *iter;
- delete obj;
- }
- }
+ RGWXMLParser();
+ ~RGWXMLParser();
bool init();
bool xml_start(const char *el, const char **attr);
bool xml_end(const char *el);