summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYehuda Sadeh <yehuda@hq.newdream.net>2011-09-06 16:57:17 -0700
committerYehuda Sadeh <yehuda@hq.newdream.net>2011-09-06 16:58:43 -0700
commit78a364662f5bb5cf66880705fcc2e795dba2c24f (patch)
tree2e654b343913a43a1927274ad358f4b0adde9a10
parent0f87638d615cf76ad75cfadb717867906e740613 (diff)
downloadceph-78a364662f5bb5cf66880705fcc2e795dba2c24f.tar.gz
rgw: prepare for supporting other meta headers
-rw-r--r--src/rgw/rgw_op.cc19
-rw-r--r--src/rgw/rgw_rest.cc75
2 files changed, 53 insertions, 41 deletions
diff --git a/src/rgw/rgw_op.cc b/src/rgw/rgw_op.cc
index 2fe571d56ed..641c89be2bf 100644
--- a/src/rgw/rgw_op.cc
+++ b/src/rgw/rgw_op.cc
@@ -117,17 +117,14 @@ void get_request_metadata(struct req_state *s, map<string, bufferlist>& attrs)
for (iter = s->x_meta_map.begin(); iter != s->x_meta_map.end(); ++iter) {
const string &name(iter->first);
string &xattr(iter->second);
-#define X_AMZ_META "x-amz-meta"
- if (name.find(X_AMZ_META) == 0) {
- RGW_LOG(10) << "x>> " << name << ":" << xattr << dendl;
- format_xattr(xattr);
- string attr_name(RGW_ATTR_PREFIX);
- attr_name.append(name);
- map<string, bufferlist>::value_type v(attr_name, bufferlist());
- std::pair < map<string, bufferlist>::iterator, bool > rval(attrs.insert(v));
- bufferlist& bl(rval.first->second);
- bl.append(xattr.c_str(), xattr.size() + 1);
- }
+ RGW_LOG(10) << "x>> " << name << ":" << xattr << dendl;
+ format_xattr(xattr);
+ string attr_name(RGW_ATTR_PREFIX);
+ attr_name.append(name);
+ map<string, bufferlist>::value_type v(attr_name, bufferlist());
+ std::pair < map<string, bufferlist>::iterator, bool > rval(attrs.insert(v));
+ bufferlist& bl(rval.first->second);
+ bl.append(xattr.c_str(), xattr.size() + 1);
}
}
diff --git a/src/rgw/rgw_rest.cc b/src/rgw/rgw_rest.cc
index 9cf35c555af..fa3c7a9d299 100644
--- a/src/rgw/rgw_rest.cc
+++ b/src/rgw/rgw_rest.cc
@@ -542,6 +542,18 @@ static void line_unfold(const char *line, string& sdest)
sdest = dest;
}
+struct str_len {
+ const char *str;
+ int len;
+};
+
+#define STR_LEN_ENTRY(s) { s, sizeof(s) - 1 }
+
+struct str_len meta_prefixes[] = { STR_LEN_ENTRY("HTTP_X_AMZ"),
+ STR_LEN_ENTRY("HTTP_X_GOOG"),
+ STR_LEN_ENTRY("HTTP_X_DHO"),
+ {NULL, 0} };
+
static void init_auth_info(struct req_state *s)
{
const char *p;
@@ -549,36 +561,39 @@ static void init_auth_info(struct req_state *s)
s->x_meta_map.clear();
for (int i=0; (p = s->fcgx->envp[i]); ++i) {
-#define HTTP_X_AMZ "HTTP_X_AMZ"
- if (strncmp(p, HTTP_X_AMZ, sizeof(HTTP_X_AMZ) - 1) == 0) {
- RGW_LOG(10) << "meta>> " << p << dendl;
- const char *name = p+5; /* skip the HTTP_ part */
- const char *eq = strchr(name, '=');
- if (!eq) /* shouldn't happen! */
- continue;
- int len = eq - name;
- char name_low[len + 1];
- int j;
- for (j=0; j<len; j++) {
- name_low[j] = tolower(name[j]);
- if (name_low[j] == '_')
- name_low[j] = '-';
- }
- name_low[j] = 0;
- string val;
- line_unfold(eq + 1, val);
-
- map<string, string>::iterator iter;
- iter = s->x_meta_map.find(name_low);
- if (iter != s->x_meta_map.end()) {
- string old = iter->second;
- int pos = old.find_last_not_of(" \t"); /* get rid of any whitespaces after the value */
- old = old.substr(0, pos + 1);
- old.append(",");
- old.append(val);
- s->x_meta_map[name_low] = old;
- } else {
- s->x_meta_map[name_low] = val;
+ const char *prefix;
+ for (int prefix_num = 0; prefix = meta_prefixes[prefix_num].str; prefix_num++) {
+ int len = meta_prefixes[prefix_num].len;
+ if (strncmp(p, prefix, len) == 0) {
+ RGW_LOG(10) << "meta>> " << p << dendl;
+ const char *name = p+5; /* skip the HTTP_ part */
+ const char *eq = strchr(name, '=');
+ if (!eq) /* shouldn't happen! */
+ continue;
+ int len = eq - name;
+ char name_low[len + 1];
+ int j;
+ for (j=0; j<len; j++) {
+ name_low[j] = tolower(name[j]);
+ if (name_low[j] == '_')
+ name_low[j] = '-';
+ }
+ name_low[j] = 0;
+ string val;
+ line_unfold(eq + 1, val);
+
+ map<string, string>::iterator iter;
+ iter = s->x_meta_map.find(name_low);
+ if (iter != s->x_meta_map.end()) {
+ string old = iter->second;
+ int pos = old.find_last_not_of(" \t"); /* get rid of any whitespaces after the value */
+ old = old.substr(0, pos + 1);
+ old.append(",");
+ old.append(val);
+ s->x_meta_map[name_low] = old;
+ } else {
+ s->x_meta_map[name_low] = val;
+ }
}
}
}