static int parse_grantee_str(RGWRados *store, string& grantee_str,
const struct s3_acl_header *perm, ACLGrant& grant)
{
- string id_type, id_val;
+ string id_type, id_val_quoted;
int rgw_perm = perm->rgw_perm;
int ret;
RGWUserInfo info;
- ret = parse_key_value(grantee_str, id_type, id_val);
+ ret = parse_key_value(grantee_str, id_type, id_val_quoted);
if (ret < 0)
return ret;
+ string id_val = rgw_trim_quotes(id_val_quoted);
+
if (strcasecmp(id_type.c_str(), "emailAddress") == 0) {
ret = rgw_get_user_info_by_email(store, id_val, info);
if (ret < 0)
return true;
}
+string rgw_trim_whitespace(const string& src)
+{
+ if (src.empty()) {
+ return string();
+ }
+
+ int start = 0;
+ for (; start != (int)src.size(); start++) {
+ if (!isspace(src[start]))
+ break;
+ }
+
+ int end = src.size() - 1;
+ if (end <= start) {
+ return string();
+ }
+
+ for (; end > start; end--) {
+ if (!isspace(src[end]))
+ break;
+ }
+
+ return src.substr(start, end - start + 1);
+}
+
+string rgw_trim_quotes(const string& val)
+{
+ string s = rgw_trim_whitespace(val);
+ if (s.size() < 2)
+ return s;
+
+ int start = 0;
+ int end = s.size() - 1;
+ int quotes_count = 0;
+
+ if (s[start] == '"') {
+ start++;
+ quotes_count++;
+ }
+ if (s[end] == '"') {
+ end--;
+ quotes_count++;
+ }
+ if (quotes_count == 2) {
+ return s.substr(start, end - start + 1);
+ }
+ return s;
+}
+
static struct {
const char *type_name;
uint32_t perm;
extern bool parse_rfc2616(const char *s, struct tm *t);
extern bool parse_iso8601(const char *s, struct tm *t);
extern int parse_date(const string& date, uint64_t *epoch, string *out_date = NULL, string *out_time = NULL);
+extern string rgw_trim_whitespace(const string& src);
+extern string rgw_trim_quotes(const string& val);
+
/** Check if the req_state's user has the necessary permissions
* to do the requested action */
end_header(s);
}
-string trim_whitespace(const string& src)
-{
- if (src.empty()) {
- return string();
- }
-
- int start = 0;
- for (; start != (int)src.size(); start++) {
- if (!isspace(src[start]))
- break;
- }
-
- int end = src.size() - 1;
- if (end <= start) {
- return string();
- }
-
- for (; end > start; end--) {
- if (!isspace(src[end]))
- break;
- }
-
- return src.substr(start, end - start + 1);
-}
-
-string trim_quotes(const string& val)
-{
- string s = trim_whitespace(val);
- if (s.size() < 2)
- return s;
-
- int start = 0;
- int end = s.size() - 1;
- int quotes_count = 0;
-
- if (s[start] == '"') {
- start++;
- quotes_count++;
- }
- if (s[end] == '"') {
- end--;
- quotes_count++;
- }
- if (quotes_count == 2) {
- return s.substr(start, end - start + 1);
- }
- return s;
-}
-
/*
* parses params in the format: 'first; param1=foo; param2=bar'
*/
{
int pos = params_str.find(';');
if (pos < 0) {
- first = trim_whitespace(params_str);
+ first = rgw_trim_whitespace(params_str);
return;
}
- first = trim_whitespace(params_str.substr(0, pos));
+ first = rgw_trim_whitespace(params_str.substr(0, pos));
pos++;
int eqpos = param.find('=');
if (eqpos > 0) {
- string param_name = trim_whitespace(param.substr(0, eqpos));
- string val = trim_quotes(param.substr(eqpos + 1));
+ string param_name = rgw_trim_whitespace(param.substr(0, eqpos));
+ string val = rgw_trim_quotes(param.substr(eqpos + 1));
params[param_name] = val;
} else {
- params[trim_whitespace(param)] = "";
+ params[rgw_trim_whitespace(param)] = "";
}
pos = end + 1;
/*
* iterate through fields
*/
- string line = trim_whitespace(string(bl.c_str(), bl.length()));
+ string line = rgw_trim_whitespace(string(bl.c_str(), bl.length()));
if (line.empty())
break;
bufferlist& data = iter->second.data;
string str = string(data.c_str(), data.length());
- *val = trim_whitespace(str);
+ *val = rgw_trim_whitespace(str);
return true;
}