]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: return valid Location element, PostObj 20330/head
authoryuliyang <yuliyang@cmss.chinamobile.com>
Tue, 6 Feb 2018 04:21:53 +0000 (12:21 +0800)
committeryuliyang <yuliyang@cmss.chinamobile.com>
Fri, 20 Jul 2018 05:21:17 +0000 (13:21 +0800)
PostResponse should contain ETag and urlencode bucket name
object name and tenant name and correct Location uri

Fixes: http://tracker.ceph.com/issues/22927
Signed-off-by: yuliyang <yuliyang@cmss.chinamobile.com>
src/rgw/rgw_rest_s3.cc

index e6e3010a2d5a474a461c270a5c19f7201a35a79b..d0e0b8bb87665693bdc26d546ce57cd982cbf1e8 100644 (file)
@@ -2008,14 +2008,23 @@ done:
     for (auto &it : crypt_http_responses)
       dump_header(s, it.first, it.second);
     s->formatter->open_object_section("PostResponse");
-    if (g_conf()->rgw_dns_name.length())
-      s->formatter->dump_format("Location", "%s/%s",
-                               s->info.script_uri.c_str(),
-                               s->object.name.c_str());
-    if (!s->bucket_tenant.empty())
+    std::string base_uri = compute_domain_uri(s);
+    if (!s->bucket_tenant.empty()){
+      s->formatter->dump_format("Location", "%s/%s:%s/%s",
+                                base_uri.c_str(),
+                                url_encode(s->bucket_tenant).c_str(),
+                                url_encode(s->bucket_name).c_str(),
+                                url_encode(s->object.name).c_str());
       s->formatter->dump_string("Tenant", s->bucket_tenant);
+    } else {
+      s->formatter->dump_format("Location", "%s/%s/%s",
+                                base_uri.c_str(),
+                                url_encode(s->bucket_name).c_str(),
+                                url_encode(s->object.name).c_str());
+    }
     s->formatter->dump_string("Bucket", s->bucket_name);
     s->formatter->dump_string("Key", s->object.name);
+    s->formatter->dump_string("ETag", etag);
     s->formatter->close_section();
   }
   s->err.message = err_msg;