]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
WIP x-amz-website-redirect-location.
authorRobin H. Johnson <robin.johnson@dreamhost.com>
Thu, 7 Jan 2016 19:40:51 +0000 (11:40 -0800)
committerYehuda Sadeh <yehuda@redhat.com>
Wed, 20 Jan 2016 00:14:30 +0000 (16:14 -0800)
Signed-off-by: Robin H. Johnson <robin.johnson@dreamhost.com>
Conflicts:
src/rgw/rgw_op.h
src/rgw/rgw_rest.cc
src/rocksdb

src/rgw/rgw_main.cc
src/rgw/rgw_op.cc
src/rgw/rgw_op.h
src/rgw/rgw_rest.cc
src/rgw/rgw_rest_s3.cc
src/rgw/rgw_rest_s3website.h

index 246f0163671145a1c902a6e3702c99c9213786e6..522128219cca7fdd491bdb3e35e105b45a63d0e4 100644 (file)
@@ -655,9 +655,24 @@ static int process_request(RGWRados *store, RGWREST *rest, RGWRequest *req, RGWC
     goto done;
   }
 
-  req->log(s, "executing");
+  req->log(s, "pre-executing");
   op->pre_exec();
+  ret = op->get_ret();
+  if (ret < 0) {
+    dout(2) << "pre_exec ret=" << ret << dendl;
+    abort_early(s, op, ret, handler);
+    goto done;
+  }
+
+  req->log(s, "executing");
   op->execute();
+  ret = op->get_ret();
+  if (ret < 0) {
+    dout(2) << "execute ret=" << ret << dendl;
+    abort_early(s, op, ret, handler);
+    goto done;
+  }
+  req->log(s, "completing");
   op->complete();
 done:
   int r = client_io->complete_request();
index 4225c69166131201ee8f7913dda05c1d005cd2fa..747c224d04d02a93eb4d610507d9200f0f1505ba 100644 (file)
@@ -1137,6 +1137,7 @@ bool RGWGetObj::prefetch_data()
 void RGWGetObj::pre_exec()
 {
   rgw_bucket_object_pre_exec(s);
+  ret = 0;
 }
 
 static bool object_is_expired(map<string, bufferlist>& attrs) {
@@ -1244,7 +1245,10 @@ void RGWGetObj::execute()
     goto done_err;
   }
 
-  send_response_data(bl, 0, 0);
+  ret = send_response_data(bl, 0, 0);
+  if (ret < 0) {
+    goto done_err;
+  }
   return;
 
 done_err:
@@ -1404,6 +1408,7 @@ int RGWGetBucketVersioning::verify_permission()
 void RGWGetBucketVersioning::pre_exec()
 {
   rgw_bucket_object_pre_exec(s);
+  ret = 0;
 }
 
 void RGWGetBucketVersioning::execute()
@@ -1423,6 +1428,7 @@ int RGWSetBucketVersioning::verify_permission()
 void RGWSetBucketVersioning::pre_exec()
 {
   rgw_bucket_object_pre_exec(s);
+  ret = 0;
 }
 
 void RGWSetBucketVersioning::execute()
@@ -1457,6 +1463,7 @@ int RGWGetBucketWebsite::verify_permission()
 void RGWGetBucketWebsite::pre_exec()
 {
   rgw_bucket_object_pre_exec(s);
+  ret = 0;
 }
 
 void RGWGetBucketWebsite::execute()
@@ -1477,6 +1484,7 @@ int RGWSetBucketWebsite::verify_permission()
 void RGWSetBucketWebsite::pre_exec()
 {
   rgw_bucket_object_pre_exec(s);
+  ret = 0;
 }
 
 void RGWSetBucketWebsite::execute()
@@ -1507,6 +1515,7 @@ int RGWDeleteBucketWebsite::verify_permission()
 void RGWDeleteBucketWebsite::pre_exec()
 {
   rgw_bucket_object_pre_exec(s);
+  ret = 0;
 }
 
 void RGWDeleteBucketWebsite::execute()
@@ -1532,6 +1541,7 @@ int RGWStatBucket::verify_permission()
 void RGWStatBucket::pre_exec()
 {
   rgw_bucket_object_pre_exec(s);
+  ret = 0;
 }
 
 void RGWStatBucket::execute()
@@ -1584,6 +1594,7 @@ int RGWListBucket::parse_max_keys()
 void RGWListBucket::pre_exec()
 {
   rgw_bucket_object_pre_exec(s);
+  ret = 0;
 }
 
 void RGWListBucket::execute()
@@ -1687,6 +1698,7 @@ static int forward_request_to_master(struct req_state *s, obj_version *objv, RGW
 void RGWCreateBucket::pre_exec()
 {
   rgw_bucket_object_pre_exec(s);
+  ret = 0;
 }
 
 void RGWCreateBucket::execute()
@@ -1836,6 +1848,7 @@ int RGWDeleteBucket::verify_permission()
 void RGWDeleteBucket::pre_exec()
 {
   rgw_bucket_object_pre_exec(s);
+  ret = 0;
 }
 
 void RGWDeleteBucket::execute()
@@ -2070,6 +2083,7 @@ void RGWPutObj::dispose_processor(RGWPutObjProcessor *processor)
 void RGWPutObj::pre_exec()
 {
   rgw_bucket_object_pre_exec(s);
+  ret = 0;
 }
 
 static int put_data_and_throttle(RGWPutObjProcessor *processor, bufferlist& data, off_t ofs,
@@ -2399,6 +2413,7 @@ void RGWPostObj::dispose_processor(RGWPutObjProcessor *processor)
 void RGWPostObj::pre_exec()
 {
   rgw_bucket_object_pre_exec(s);
+  ret = 0;
 }
 
 void RGWPostObj::execute()
@@ -2670,6 +2685,7 @@ int RGWPutMetadataBucket::verify_permission()
 void RGWPutMetadataBucket::pre_exec()
 {
   rgw_bucket_object_pre_exec(s);
+  ret = 0;
 }
 
 void RGWPutMetadataBucket::execute()
@@ -2721,6 +2737,7 @@ int RGWPutMetadataObject::verify_permission()
 void RGWPutMetadataObject::pre_exec()
 {
   rgw_bucket_object_pre_exec(s);
+  ret = 0;
 }
 
 void RGWPutMetadataObject::execute()
@@ -2831,6 +2848,7 @@ int RGWDeleteObj::verify_permission()
 void RGWDeleteObj::pre_exec()
 {
   rgw_bucket_object_pre_exec(s);
+  ret = 0;
 }
 
 void RGWDeleteObj::execute()
@@ -3075,6 +3093,7 @@ void RGWCopyObj::progress_cb(off_t ofs)
 void RGWCopyObj::pre_exec()
 {
   rgw_bucket_object_pre_exec(s);
+  ret = 0;
 }
 
 void RGWCopyObj::execute()
@@ -3136,6 +3155,7 @@ int RGWGetACLs::verify_permission()
 void RGWGetACLs::pre_exec()
 {
   rgw_bucket_object_pre_exec(s);
+  ret = 0;
 }
 
 void RGWGetACLs::execute()
@@ -3166,6 +3186,7 @@ int RGWPutACLs::verify_permission()
 void RGWPutACLs::pre_exec()
 {
   rgw_bucket_object_pre_exec(s);
+  ret = 0;
 }
 
 void RGWPutACLs::execute()
@@ -3433,6 +3454,7 @@ int RGWGetRequestPayment::verify_permission()
 void RGWGetRequestPayment::pre_exec()
 {
   rgw_bucket_object_pre_exec(s);
+  ret = 0;
 }
 
 void RGWGetRequestPayment::execute()
@@ -3479,6 +3501,7 @@ int RGWInitMultipart::verify_permission()
 void RGWInitMultipart::pre_exec()
 {
   rgw_bucket_object_pre_exec(s);
+  ret = 0;
 }
 
 void RGWInitMultipart::execute()
@@ -3679,6 +3702,7 @@ int RGWCompleteMultipart::verify_permission()
 void RGWCompleteMultipart::pre_exec()
 {
   rgw_bucket_object_pre_exec(s);
+  ret = 0;
 }
 
 void RGWCompleteMultipart::execute()
@@ -3878,6 +3902,7 @@ int RGWAbortMultipart::verify_permission()
 void RGWAbortMultipart::pre_exec()
 {
   rgw_bucket_object_pre_exec(s);
+  ret = 0;
 }
 
 void RGWAbortMultipart::execute()
@@ -3979,6 +4004,7 @@ int RGWListMultipart::verify_permission()
 void RGWListMultipart::pre_exec()
 {
   rgw_bucket_object_pre_exec(s);
+  ret = 0;
 }
 
 void RGWListMultipart::execute()
@@ -4012,6 +4038,7 @@ int RGWListBucketMultiparts::verify_permission()
 void RGWListBucketMultiparts::pre_exec()
 {
   rgw_bucket_object_pre_exec(s);
+  ret = 0;
 }
 
 void RGWListBucketMultiparts::execute()
@@ -4072,6 +4099,7 @@ int RGWDeleteMultiObj::verify_permission()
 void RGWDeleteMultiObj::pre_exec()
 {
   rgw_bucket_object_pre_exec(s);
+  ret = 0;
 }
 
 void RGWDeleteMultiObj::execute()
index f0555d26a9341fa7dcf2e2dca38de16d5c168dc1..5598c4b495648fa9f3ba3829785f2b021ee58846 100644 (file)
@@ -82,6 +82,7 @@ protected:
   bool cors_exist;
   RGWQuotaInfo bucket_quota;
   RGWQuotaInfo user_quota;
+  int ret;
 
   virtual int init_quota();
 public:
@@ -120,6 +121,7 @@ public:
   virtual uint32_t op_mask() { return 0; }
 
   virtual int error_handler(int err_no, string *error_content);
+  int get_ret() { return ret; };
 };
 
 class RGWGetObj : public RGWOp {
@@ -139,7 +141,6 @@ protected:
   time_t *mod_ptr;
   time_t *unmod_ptr;
   map<string, bufferlist> attrs;
-  int ret;
   bool get_data;
   bool partial_content;
   bool range_parsed;
@@ -169,7 +170,6 @@ public:
     partial_content = false;
     range_parsed = false;
     skip_manifest = false;
-    ret = 0;
     is_slo = false;
  }
 
@@ -298,7 +298,6 @@ inline ostream& operator<<(ostream& out, const RGWBulkDelete::acct_path_t &o) {
 
 class RGWListBuckets : public RGWOp {
 protected:
-  int ret;
   bool sent_data;
   string marker;
   string end_marker;
@@ -311,7 +310,7 @@ protected:
   map<string, bufferlist> attrs;
 
 public:
-  RGWListBuckets() : ret(0), sent_data(false) {
+  RGWListBuckets() : sent_data(false) {
     limit = limit_max = RGW_LIST_BUCKETS_LIMIT_MAX;
     buckets_count = 0;
     buckets_objcount = 0;
@@ -338,7 +337,6 @@ public:
 
 class RGWStatAccount : public RGWOp {
 protected:
-  int ret;
   uint32_t buckets_count;
   uint64_t buckets_objcount;
   uint64_t buckets_size;
@@ -374,7 +372,6 @@ protected:
   string encoding_type;
   bool list_versions;
   int max;
-  int ret;
   vector<RGWObjEnt> objs;
   map<string, bool> common_prefixes;
 
@@ -384,7 +381,7 @@ protected:
   int parse_max_keys();
 
 public:
-  RGWListBucket() : list_versions(false), max(0), ret(0),
+  RGWListBucket() : list_versions(false), max(0),
                     default_max(0), is_truncated(false) {}
   int verify_permission();
   void pre_exec();
@@ -402,7 +399,7 @@ class RGWGetBucketLogging : public RGWOp {
 public:
   RGWGetBucketLogging() {}
   int verify_permission();
-  void execute() {}
+  void execute() { ret = 0; }
 
   virtual void send_response() = 0;
   virtual const string name() { return "get_bucket_logging"; }
@@ -415,7 +412,7 @@ public:
   RGWGetBucketLocation() {}
   ~RGWGetBucketLocation() {}
   int verify_permission();
-  void execute() {}
+  void execute() { ret = 0; }
 
   virtual void send_response() = 0;
   virtual const string name() { return "get_bucket_location"; }
@@ -442,9 +439,8 @@ public:
 class RGWSetBucketVersioning : public RGWOp {
 protected:
   bool enable_versioning;
-  int ret;
 public:
-  RGWSetBucketVersioning() : enable_versioning(false), ret(0) {}
+  RGWSetBucketVersioning() : enable_versioning(false) {}
 
   int verify_permission();
   void pre_exec();
@@ -459,10 +455,8 @@ public:
 };
 
 class RGWGetBucketWebsite : public RGWOp {
-protected:
-  int ret;
 public:
-  RGWGetBucketWebsite() : ret(0) {}
+  RGWGetBucketWebsite() {}
 
   int verify_permission();
   void pre_exec();
@@ -476,10 +470,9 @@ public:
 
 class RGWSetBucketWebsite : public RGWOp {
 protected:
-  int ret;
   RGWBucketWebsiteConf website_conf;
 public:
-  RGWSetBucketWebsite() : ret(0) {}
+  RGWSetBucketWebsite() {}
 
   int verify_permission();
   void pre_exec();
@@ -494,10 +487,8 @@ public:
 };
 
 class RGWDeleteBucketWebsite : public RGWOp {
-protected:
-  int ret;
 public:
-  RGWDeleteBucketWebsite() : ret(0) {}
+  RGWDeleteBucketWebsite() {}
 
   int verify_permission();
   void pre_exec();
@@ -511,11 +502,10 @@ public:
 
 class RGWStatBucket : public RGWOp {
 protected:
-  int ret;
   RGWBucketEnt bucket;
 
 public:
-  RGWStatBucket() : ret(0) {}
+  RGWStatBucket() {}
   ~RGWStatBucket() {}
 
   int verify_permission();
@@ -530,7 +520,6 @@ public:
 
 class RGWCreateBucket : public RGWOp {
 protected:
-  int ret;
   RGWAccessControlPolicy policy;
   string location_constraint;
   string placement_rule;
@@ -542,7 +531,7 @@ protected:
   bufferlist in_data;
 
 public:
-  RGWCreateBucket() : ret(0), has_cors(false) {}
+  RGWCreateBucket() : has_cors(false) {}
 
   int verify_permission();
   void pre_exec();
@@ -560,12 +549,10 @@ public:
 
 class RGWDeleteBucket : public RGWOp {
 protected:
-  int ret;
-
   RGWObjVersionTracker objv_tracker;
 
 public:
-  RGWDeleteBucket() : ret(0) {}
+  RGWDeleteBucket() {}
 
   int verify_permission();
   void pre_exec();
@@ -638,7 +625,6 @@ class RGWPutObj : public RGWOp {
   friend class RGWPutObjProcessor;
 
 protected:
-  int ret;
   off_t ofs;
   const char *supplied_md5_b64;
   const char *supplied_etag;
@@ -657,7 +643,7 @@ protected:
   time_t delete_at;
 
 public:
-  RGWPutObj() : ret(0), ofs(0),
+  RGWPutObj() : ofs(0),
                 supplied_md5_b64(NULL),
                 supplied_etag(NULL),
                 if_match(NULL),
@@ -700,7 +686,6 @@ class RGWPostObj : public RGWOp {
 protected:
   off_t min_len;
   off_t max_len;
-  int ret;
   int len;
   off_t ofs;
   const char *supplied_md5_b64;
@@ -714,7 +699,7 @@ protected:
   time_t delete_at;
 
 public:
-  RGWPostObj() : min_len(0), max_len(LLONG_MAX), ret(0), len(0), ofs(0),
+  RGWPostObj() : min_len(0), max_len(LLONG_MAX), len(0), ofs(0),
                 supplied_md5_b64(NULL), supplied_etag(NULL),
                 data_pending(false), delete_at(0) {}
 
@@ -740,21 +725,18 @@ public:
 
 class RGWPutMetadataAccount : public RGWOp {
 protected:
-  int ret;
   set<string> rmattr_names;
   RGWAccessControlPolicy policy;
 
 public:
-  RGWPutMetadataAccount()
-    : ret(0)
-  {}
+  RGWPutMetadataAccount() {}
 
   virtual void init(RGWRados *store, struct req_state *s, RGWHandler *h) {
     RGWOp::init(store, s, h);
     policy.set_ctx(s->cct);
   }
   int verify_permission();
-  void pre_exec() { return; }
+  void pre_exec() { ret = 0; }
   void execute();
 
   virtual int get_params() = 0;
@@ -770,7 +752,6 @@ public:
 
 class RGWPutMetadataBucket : public RGWOp {
 protected:
-  int ret;
   set<string> rmattr_names;
   bool has_policy, has_cors;
   RGWAccessControlPolicy policy;
@@ -779,7 +760,7 @@ protected:
 
 public:
   RGWPutMetadataBucket()
-    : ret(0), has_policy(false), has_cors(false)
+    : has_policy(false), has_cors(false)
   {}
 
   virtual void init(RGWRados *store, struct req_state *s, RGWHandler *h) {
@@ -799,7 +780,6 @@ public:
 
 class RGWPutMetadataObject : public RGWOp {
 protected:
-  int ret;
   RGWAccessControlPolicy policy;
   string placement_rule;
   time_t delete_at;
@@ -807,8 +787,7 @@ protected:
 
 public:
   RGWPutMetadataObject()
-    : ret(0),
-      delete_at(0),
+    : delete_at(0),
       dlo_manifest(NULL)
   {}
 
@@ -830,7 +809,6 @@ public:
 
 class RGWDeleteObj : public RGWOp {
 protected:
-  int ret;
   bool delete_marker;
   bool multipart_delete;
   string version_id;
@@ -838,8 +816,7 @@ protected:
 
 public:
   RGWDeleteObj()
-    : ret(0),
-      delete_marker(false),
+    : delete_marker(false),
       multipart_delete(false),
       deleter(nullptr) {
   }
@@ -871,7 +848,6 @@ protected:
   time_t unmod_time;
   time_t *mod_ptr;
   time_t *unmod_ptr;
-  int ret;
   map<string, bufferlist> attrs;
   string src_tenant_name, src_bucket_name;
   rgw_bucket src_bucket;
@@ -944,11 +920,10 @@ public:
 
 class RGWGetACLs : public RGWOp {
 protected:
-  int ret;
   string acls;
 
 public:
-  RGWGetACLs() : ret(0) {}
+  RGWGetACLs() {}
 
   int verify_permission();
   void pre_exec();
@@ -962,7 +937,6 @@ public:
 
 class RGWPutACLs : public RGWOp {
 protected:
-  int ret;
   size_t len;
   char *data;
   ACLOwner owner;
@@ -991,10 +965,9 @@ public:
 
 class RGWGetCORS : public RGWOp {
 protected:
-  int ret;
 
 public:
-  RGWGetCORS() : ret(0) {}
+  RGWGetCORS() {}
 
   int verify_permission();
   void execute();
@@ -1007,7 +980,6 @@ public:
 
 class RGWPutCORS : public RGWOp {
 protected:
-  int ret;
   bufferlist cors_bl;
 
 public:
@@ -1028,10 +1000,9 @@ public:
 
 class RGWDeleteCORS : public RGWOp {
 protected:
-  int ret;
 
 public:
-  RGWDeleteCORS() : ret(0) {}
+  RGWDeleteCORS() {}
 
   int verify_permission();
   void execute();
@@ -1044,12 +1015,11 @@ public:
 
 class RGWOptionsCORS : public RGWOp {
 protected:
-  int ret;
   RGWCORSRule *rule;
   const char *origin, *req_hdrs, *req_meth;
 
 public:
-  RGWOptionsCORS() : ret(0), rule(NULL), origin(NULL),
+  RGWOptionsCORS() : rule(NULL), origin(NULL),
                      req_hdrs(NULL), req_meth(NULL) {
   }
 
@@ -1083,9 +1053,8 @@ public:
 class RGWSetRequestPayment : public RGWOp {
 protected:
   bool requester_pays;
-  int ret;
 public:
- RGWSetRequestPayment() : requester_pays(false), ret(0) {}
+ RGWSetRequestPayment() : requester_pays(false) {}
 
   int verify_permission();
   void pre_exec();
@@ -1101,7 +1070,6 @@ public:
 
 class RGWInitMultipart : public RGWOp {
 protected:
-  int ret;
   string upload_id;
   RGWAccessControlPolicy policy;
 
@@ -1127,7 +1095,6 @@ public:
 
 class RGWCompleteMultipart : public RGWOp {
 protected:
-  int ret;
   string upload_id;
   string etag;
   char *data;
@@ -1156,10 +1123,8 @@ public:
 
 class RGWAbortMultipart : public RGWOp {
 protected:
-  int ret;
-
 public:
-  RGWAbortMultipart() : ret(0) {}
+  RGWAbortMultipart() {}
 
   int verify_permission();
   void pre_exec();
@@ -1173,7 +1138,6 @@ public:
 
 class RGWListMultipart : public RGWOp {
 protected:
-  int ret;
   string upload_id;
   map<uint32_t, RGWUploadPartInfo> parts;
   int max_parts;
@@ -1282,7 +1246,6 @@ protected:
   RGWMultipartUploadEntry next_marker; 
   int max_uploads;
   string delimiter;
-  int ret;
   vector<RGWMultipartUploadEntry> uploads;
   map<string, bool> common_prefixes;
   bool is_truncated;
@@ -1315,7 +1278,6 @@ public:
 
 class RGWDeleteMultiObj : public RGWOp {
 protected:
-  int ret;
   int max_to_delete;
   size_t len;
   char *data;
index b97d8b810176f988e303445a7a8f42ecd5d279b5..6be1f73d0f95dd3ac1608f58f0575ddddc92c6b8 100644 (file)
@@ -42,7 +42,11 @@ static const struct rgw_http_attr base_rgw_to_http_attrs[] = {
   { RGW_ATTR_CONTENT_DISP,      "Content-Disposition" },
   { RGW_ATTR_CONTENT_ENC,       "Content-Encoding" },
   { RGW_ATTR_USER_MANIFEST,     "X-Object-Manifest" },
-  { RGW_ATTR_AMZ_WEBSITE_REDIRECT_LOCATION, "Location"},
+  /* RGW_ATTR_AMZ_WEBSITE_REDIRECT_LOCATION header depends on access mode:
+   * S3 endpoint: x-amz-website-redirect-location
+   * S3Website endpoint: Location
+   */
+  { RGW_ATTR_AMZ_WEBSITE_REDIRECT_LOCATION, "x-amz-website-redirect-location" },
 };
 
 
index 6eaad59ed98fab250fc581a05209f7083bab455a..2e4b6322ecfd380aee9315c56b13f1ebeda8015f 100644 (file)
@@ -75,6 +75,26 @@ static struct response_attr_param resp_attr_params[] = {
   {NULL, NULL},
 };
 
+int RGWGetObj_ObjStore_S3Website::send_response_data(bufferlist& bl, off_t bl_ofs, off_t bl_len) {
+  map<string, bufferlist>::iterator iter;
+  iter = attrs.find(RGW_ATTR_AMZ_WEBSITE_REDIRECT_LOCATION);
+  if (iter != attrs.end()) {
+    bufferlist &bl = iter->second;
+    s->redirect = string(bl.c_str(), bl.length());
+    s->err.http_ret = 301;
+    ldout(s->cct, 20) << __CEPH_ASSERT_FUNCTION << " redirectng per x-amz-website-redirect-location=" << s->redirect << dendl;
+    ret = -ERR_WEBSITE_REDIRECT;
+    return ret;
+  } else {
+    return RGWGetObj_ObjStore_S3::send_response_data(bl, bl_ofs, bl_len);
+  }
+}
+
+int RGWGetObj_ObjStore_S3Website::send_response_data_error()
+{
+  return RGWGetObj_ObjStore_S3::send_response_data_error();
+}
+
 int RGWGetObj_ObjStore_S3::send_response_data_error()
 {
   bufferlist bl;
index 18f00ee99e55d1874e482ebda10d8ac9cb914e1b..06a22ccda22d7867b3e8c208ba3aaa5638fab199 100644 (file)
@@ -75,6 +75,8 @@ public:
   RGWGetObj_ObjStore_S3Website() : is_errordoc_request(false) {}
   RGWGetObj_ObjStore_S3Website(bool is_errordoc_request) : is_errordoc_request(false) { this->is_errordoc_request = is_errordoc_request; }
   ~RGWGetObj_ObjStore_S3Website() {}
+  int send_response_data_error();
+  int send_response_data(bufferlist& bl, off_t ofs, off_t len);
   // We override RGWGetObj_ObjStore::get_params here, to allow ignoring all
   // conditional params for error pages.
   int get_params() {
@@ -84,7 +86,7 @@ public:
         if_unmod = NULL;
         if_match = NULL;
         if_nomatch = NULL;
-               return 0;
+               return 0;
       } else {
         return RGWGetObj_ObjStore_S3::get_params();
       }