rgw_bucket_object_pre_exec(s);
}
+static void prepare_add_del_attrs(const map<string, bufferlist>& orig_attrs,
+ map<string, bufferlist>& out_attrs,
+ map<string, bufferlist>& out_rmattrs)
+{
+ map<string, bufferlist>::const_iterator iter;
+
+ for (iter = orig_attrs.begin(); iter != orig_attrs.end(); ++iter) {
+ const string& name = iter->first;
+ /* check if the attr is user-defined metadata item */
+ if (name.compare(0, sizeof(RGW_ATTR_META_PREFIX) - 1, RGW_ATTR_META_PREFIX) == 0) {
+ /* for the objects all existing meta attrs have to be removed */
+ out_rmattrs[name] = iter->second;
+ } else if (out_attrs.find(name) == out_attrs.end()) {
+ out_attrs[name] = iter->second;
+ }
+ }
+}
+
+static void prepare_add_del_attrs(const map<string, bufferlist>& orig_attrs,
+ const set<string>& rmattr_names,
+ map<string, bufferlist>& out_attrs,
+ map<string, bufferlist>& out_rmattrs)
+{
+ map<string, bufferlist>::const_iterator iter;
+
+ for (iter = orig_attrs.begin(); iter != orig_attrs.end(); ++iter) {
+ const string& name = iter->first;
+ /* check if the attr is user-defined metadata item */
+ if (name.compare(0, strlen(RGW_ATTR_META_PREFIX), RGW_ATTR_META_PREFIX) == 0) {
+ /* for the buckets all existing meta attrs are preserved,
+ except those that are listed in rmattr_names. */
+ if (rmattr_names.find(name) != rmattr_names.end()) {
+ map<string, bufferlist>::iterator aiter = out_attrs.find(name);
+ if (aiter != out_attrs.end()) {
+ out_attrs.erase(aiter);
+ }
+ out_rmattrs[name] = iter->second;
+ }
+ } else if (out_attrs.find(name) == out_attrs.end()) {
+ out_attrs[name] = iter->second;
+ }
+ }
+}
+
+
+static void populate_with_generic_attrs(const req_state * const s,
+ map<string, bufferlist>& out_attrs)
+{
+ map<string, string>::const_iterator giter;
+
+ for (giter = s->generic_attrs.begin(); giter != s->generic_attrs.end(); ++giter) {
+ bufferlist& attrbl = out_attrs[giter->first];
+ const string& val = giter->second;
+ attrbl.clear();
+ attrbl.append(val.c_str(), val.size() + 1);
+ }
+}
+
+
void RGWCreateBucket::execute()
{
RGWAccessControlPolicy old_policy(s->cct);
- map<string, bufferlist> attrs;
+ map<string, bufferlist> attrs, rmattrs;
bufferlist aclbl;
bufferlist corsbl;
bool existed;
dispose_processor(processor);
}
-
-static void populate_with_generic_attrs(const req_state * const s,
- map<string, bufferlist>& out_attrs)
-{
- map<string, string>::const_iterator giter;
-
- for (giter = s->generic_attrs.begin(); giter != s->generic_attrs.end(); ++giter) {
- bufferlist& attrbl = out_attrs[giter->first];
- const string& val = giter->second;
- attrbl.clear();
- attrbl.append(val.c_str(), val.size() + 1);
- }
-}
-
-static void prepare_add_del_attrs(const map<string, bufferlist>& orig_attrs,
- map<string, bufferlist>& out_attrs,
- map<string, bufferlist>& out_rmattrs)
-{
- map<string, bufferlist>::const_iterator iter;
-
- for (iter = orig_attrs.begin(); iter != orig_attrs.end(); ++iter) {
- const string& name = iter->first;
- /* check if the attr is user-defined metadata item */
- if (name.compare(0, sizeof(RGW_ATTR_META_PREFIX) - 1, RGW_ATTR_META_PREFIX) == 0) {
- /* for the objects all existing meta attrs have to be removed */
- out_rmattrs[name] = iter->second;
- } else if (out_attrs.find(name) == out_attrs.end()) {
- out_attrs[name] = iter->second;
- }
- }
-}
-
-static void prepare_add_del_attrs(const map<string, bufferlist>& orig_attrs,
- const set<string>& rmattr_names,
- map<string, bufferlist>& out_attrs,
- map<string, bufferlist>& out_rmattrs)
-{
- map<string, bufferlist>::const_iterator iter;
-
- for (iter = orig_attrs.begin(); iter != orig_attrs.end(); ++iter) {
- const string& name = iter->first;
- /* check if the attr is user-defined metadata item */
- if (name.compare(0, strlen(RGW_ATTR_META_PREFIX), RGW_ATTR_META_PREFIX) == 0) {
- /* for the buckets all existing meta attrs are preserved,
- except those that are listed in rmattr_names. */
- if (rmattr_names.find(name) != rmattr_names.end()) {
- map<string, bufferlist>::iterator aiter = out_attrs.find(name);
- if (aiter != out_attrs.end()) {
- out_attrs.erase(aiter);
- }
- out_rmattrs[name] = iter->second;
- }
- } else if (out_attrs.find(name) == out_attrs.end()) {
- out_attrs[name] = iter->second;
- }
- }
-}
-
int RGWPutMetadataAccount::handle_temp_url_update(
const map<int, string>& temp_url_keys) {
RGWUserAdminOpState user_op;
return 0;
}
+#define ACCT_REMOVE_ATTR_PREFIX "HTTP_X_REMOVE_ACCOUNT_META_"
+#define ACCT_PUT_ATTR_PREFIX "HTTP_X_ACCOUNT_META_"
+#define CONT_REMOVE_ATTR_PREFIX "HTTP_X_REMOVE_CONTAINER_META_"
+#define CONT_PUT_ATTR_PREFIX "HTTP_X_CONTAINER_META_"
+
+static void get_rmattrs_from_headers(const req_state * const s,
+ const char * const put_prefix,
+ const char * const del_prefix,
+ set<string>& rmattr_names)
+{
+ map<string, string, ltstr_nocase>& m = s->info.env->get_map();
+ map<string, string, ltstr_nocase>::const_iterator iter;
+ const size_t put_prefix_len = strlen(put_prefix);
+ const size_t del_prefix_len = strlen(del_prefix);
+
+ for (iter = m.begin(); iter != m.end(); ++iter) {
+ size_t prefix_len = 0;
+ const char * const p = iter->first.c_str();
+
+ if (strncasecmp(p, del_prefix, del_prefix_len) == 0) {
+ /* Explicitly requested removal. */
+ prefix_len = del_prefix_len;
+ } else if ((strncasecmp(p, put_prefix, put_prefix_len) == 0)
+ && iter->second.empty()) {
+ /* Removal requested by putting an empty value. */
+ prefix_len = put_prefix_len;
+ }
+
+ if (prefix_len > 0) {
+ string name(RGW_ATTR_META_PREFIX);
+ name.append(lowercase_dash_http_attr(p + prefix_len));
+ rmattr_names.insert(name);
+ }
+ }
+}
+
int RGWCreateBucket_ObjStore_SWIFT::get_params()
{
bool has_policy;
rgw_flush_formatter_and_reset(s, s->formatter);
}
-#define ACCT_REMOVE_ATTR_PREFIX "HTTP_X_REMOVE_ACCOUNT_META_"
-#define ACCT_PUT_ATTR_PREFIX "HTTP_X_ACCOUNT_META_"
-#define CONT_REMOVE_ATTR_PREFIX "HTTP_X_REMOVE_CONTAINER_META_"
-#define CONT_PUT_ATTR_PREFIX "HTTP_X_CONTAINER_META_"
-
-static void get_rmattrs_from_headers(const req_state * const s,
- const char * const put_prefix,
- const char * const del_prefix,
- set<string>& rmattr_names)
-{
- map<string, string, ltstr_nocase>& m = s->info.env->get_map();
- map<string, string, ltstr_nocase>::const_iterator iter;
- const size_t put_prefix_len = strlen(put_prefix);
- const size_t del_prefix_len = strlen(del_prefix);
-
- for (iter = m.begin(); iter != m.end(); ++iter) {
- size_t prefix_len = 0;
- const char * const p = iter->first.c_str();
-
- if (strncasecmp(p, del_prefix, del_prefix_len) == 0) {
- /* Explicitly requested removal. */
- prefix_len = del_prefix_len;
- } else if ((strncasecmp(p, put_prefix, put_prefix_len) == 0)
- && iter->second.empty()) {
- /* Removal requested by putting an empty value. */
- prefix_len = put_prefix_len;
- }
-
- if (prefix_len > 0) {
- string name(RGW_ATTR_META_PREFIX);
- name.append(lowercase_dash_http_attr(p + prefix_len));
- rmattr_names.insert(name);
- }
- }
-}
-
int RGWPutMetadataAccount_ObjStore_SWIFT::get_params()
{
if (s->has_bad_meta) {