]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: don't return partial content response with bad header
authorYehuda Sadeh <yehuda@hq.newdream.net>
Tue, 8 Nov 2011 22:02:47 +0000 (14:02 -0800)
committerYehuda Sadeh <yehuda@hq.newdream.net>
Tue, 8 Nov 2011 22:17:31 +0000 (14:17 -0800)
src/rgw/rgw_op.cc
src/rgw/rgw_op.h
src/rgw/rgw_rest_s3.cc
src/rgw/rgw_rest_swift.cc

index e4b868a5e2bc74b2ba7d6e640a74eb8edaf25892..9ec86551295c1779099775ef507c7b1640d885ad 100644 (file)
@@ -49,12 +49,15 @@ public:
 
 static MultipartMetaFilter mp_filter;
 
-static int parse_range(const char *range, off_t& ofs, off_t& end)
+static int parse_range(const char *range, off_t& ofs, off_t& end, bool *partial_content)
 {
   int r = -ERANGE;
   string s(range);
   string ofs_str;
   string end_str;
+
+  *partial_content = false;
+
   int pos = s.find("bytes=");
   if (pos < 0) {
     pos = 0;
@@ -77,6 +80,8 @@ static int parse_range(const char *range, off_t& ofs, off_t& end)
   if (pos < 0)
     goto done;
 
+  *partial_content = true;
+
   ofs_str = s.substr(0, pos);
   end_str = s.substr(pos + 1);
   if (end_str.length()) {
@@ -338,7 +343,7 @@ done:
 int RGWGetObj::init_common()
 {
   if (range_str) {
-    int r = parse_range(range_str, ofs, end);
+    int r = parse_range(range_str, ofs, end, &partial_content);
     if (r < 0)
       return r;
   }
index 3e70115434016802a6cf84bb44d01108dd33ee0b..e05520c77df3147410894956bcceefa1c880d8bc 100644 (file)
@@ -58,6 +58,7 @@ protected:
   char *data;
   int ret;
   bool get_data;
+  bool partial_content;
 
   int init_common();
 public:
@@ -82,6 +83,7 @@ public:
     unmod_ptr = NULL;
     attrs.clear();
     data = NULL;
+    partial_content = false;
     ret = 0;
 
     /* get_data should not be initialized here! */
index d174daa1b8f47f14d15c939ff9cb307b5e156315..1b9def43122d38499809b04f1c4fbf071f648efa 100644 (file)
@@ -71,7 +71,7 @@ int RGWGetObj_REST_S3::send_response(void *handle)
     }
   }
 
-  if (range_str && !ret)
+  if (partial_content && !ret)
     ret = STATUS_PARTIAL_CONTENT;
 done:
   set_req_state_err(s, ret);
index 9a226f32e8ce3f9eb049956d3383436d27879ab8..cd74f7ef14b60542c98277405b576b79f1cd0fdb 100644 (file)
@@ -351,7 +351,7 @@ int RGWGetObj_REST_SWIFT::send_response(void *handle)
     }
   }
 
-  if (range_str && !ret)
+  if (partial_content && !ret)
     ret = -STATUS_PARTIAL_CONTENT;
 
   if (ret)