From a5cbddb1bef09912211627e338ba6e25f81412b7 Mon Sep 17 00:00:00 2001 From: Yehuda Sadeh Date: Thu, 5 Apr 2018 14:31:41 -0700 Subject: [PATCH] rgw: etag fixes Use string instead of bufferlist to avoid potential issues. Signed-off-by: Yehuda Sadeh --- src/rgw/rgw_op.h | 2 +- src/rgw/rgw_rados.cc | 14 +++++++------- src/rgw/rgw_rados.h | 6 +++--- src/rgw/rgw_rest.cc | 7 ------- src/rgw/rgw_rest.h | 3 --- src/rgw/rgw_rest_s3.cc | 7 +++---- src/rgw/rgw_rest_swift.cc | 2 +- 7 files changed, 15 insertions(+), 26 deletions(-) diff --git a/src/rgw/rgw_op.h b/src/rgw/rgw_op.h index 875004fb391..0d9462b5aa3 100644 --- a/src/rgw/rgw_op.h +++ b/src/rgw/rgw_op.h @@ -1306,7 +1306,7 @@ protected: string source_zone; string client_id; string op_id; - ceph::buffer::list etag; + string etag; off_t last_ofs; diff --git a/src/rgw/rgw_rados.cc b/src/rgw/rgw_rados.cc index 8b041d9b752..be820f3aca1 100644 --- a/src/rgw/rgw_rados.cc +++ b/src/rgw/rgw_rados.cc @@ -7789,7 +7789,7 @@ int RGWRados::fetch_remote_obj(RGWObjectCtx& obj_ctx, real_time delete_at, string *version_id, string *ptag, - ceph::buffer::list *petag, + string *petag, void (*progress_cb)(off_t, void *), void *progress_data, rgw_zone_set *zones_trace) @@ -7938,7 +7938,7 @@ int RGWRados::fetch_remote_obj(RGWObjectCtx& obj_ctx, if (petag) { const auto iter = cb.get_attrs().find(RGW_ATTR_ETAG); if (iter != cb.get_attrs().end()) { - *petag = iter->second; + *petag = iter->second.to_str(); } } @@ -8095,7 +8095,7 @@ int RGWRados::copy_obj(RGWObjectCtx& obj_ctx, real_time delete_at, string *version_id, string *ptag, - ceph::buffer::list *petag, + string *petag, void (*progress_cb)(off_t, void *), void *progress_data) { @@ -8221,7 +8221,7 @@ int RGWRados::copy_obj(RGWObjectCtx& obj_ctx, if (petag) { const auto iter = attrs.find(RGW_ATTR_ETAG); if (iter != attrs.end()) { - *petag = iter->second; + *petag = iter->second.to_str(); } } @@ -8358,7 +8358,7 @@ int RGWRados::copy_obj_data(RGWObjectCtx& obj_ctx, uint64_t olh_epoch, real_time delete_at, string *version_id, - ceph::buffer::list *petag) + string *petag) { string tag; append_rand_alpha(cct, tag, tag, 32); @@ -8407,9 +8407,9 @@ int RGWRados::copy_obj_data(RGWObjectCtx& obj_ctx, auto iter = attrs.find(RGW_ATTR_ETAG); if (iter != attrs.end()) { bufferlist& bl = iter->second; - etag = string(bl.c_str(), bl.length()); + etag = bl.to_str(); if (petag) { - *petag = bl; + *petag = etag; } } diff --git a/src/rgw/rgw_rados.h b/src/rgw/rgw_rados.h index c82b77883e2..7374843dbc1 100644 --- a/src/rgw/rgw_rados.h +++ b/src/rgw/rgw_rados.h @@ -3152,7 +3152,7 @@ public: ceph::real_time delete_at, string *version_id, string *ptag, - ceph::buffer::list *petag, + string *petag, void (*progress_cb)(off_t, void *), void *progress_data, rgw_zone_set *zones_trace= nullptr); @@ -3195,7 +3195,7 @@ public: ceph::real_time delete_at, string *version_id, string *ptag, - ceph::buffer::list *petag, + string *petag, void (*progress_cb)(off_t, void *), void *progress_data); @@ -3209,7 +3209,7 @@ public: uint64_t olh_epoch, ceph::real_time delete_at, string *version_id, - ceph::buffer::list *petag); + string *petag); int check_bucket_empty(RGWBucketInfo& bucket_info); diff --git a/src/rgw/rgw_rest.cc b/src/rgw/rgw_rest.cc index 946d55b3774..6f63517c4a5 100644 --- a/src/rgw/rgw_rest.cc +++ b/src/rgw/rgw_rest.cc @@ -420,13 +420,6 @@ void dump_etag(struct req_state* const s, } } -void dump_etag(struct req_state* const s, - ceph::buffer::list& bl_etag, - const bool quoted) -{ - return dump_etag(s, get_sanitized_hdrval(bl_etag), quoted); -} - void dump_bucket_from_state(struct req_state *s) { if (g_conf->rgw_expose_bucket && ! s->bucket_name.empty()) { diff --git a/src/rgw/rgw_rest.h b/src/rgw/rgw_rest.h index 7da841604de..c171a853fb1 100644 --- a/src/rgw/rgw_rest.h +++ b/src/rgw/rgw_rest.h @@ -734,9 +734,6 @@ extern int64_t parse_content_length(const char *content_length); extern void dump_etag(struct req_state *s, const boost::string_ref& etag, bool quoted = false); -extern void dump_etag(struct req_state *s, - ceph::buffer::list& bl_etag, - bool quoted = false); extern void dump_epoch_header(struct req_state *s, const char *name, real_time t); extern void dump_time_header(struct req_state *s, const char *name, real_time t); extern void dump_last_modified(struct req_state *s, real_time t); diff --git a/src/rgw/rgw_rest_s3.cc b/src/rgw/rgw_rest_s3.cc index ef67fcbbbcf..fb22cb1b461 100644 --- a/src/rgw/rgw_rest_s3.cc +++ b/src/rgw/rgw_rest_s3.cc @@ -258,7 +258,7 @@ int RGWGetObj_ObjStore_S3::send_response_data(bufferlist& bl, off_t bl_ofs, } else { auto iter = attrs.find(RGW_ATTR_ETAG); if (iter != attrs.end()) { - dump_etag(s, iter->second); + dump_etag(s, iter->second.to_str()); } } @@ -2185,9 +2185,8 @@ void RGWCopyObj_ObjStore_S3::send_response() if (op_ret == 0) { dump_time(s, "LastModified", &mtime); - std::string etag_str = etag.c_str(); - if (! etag_str.empty()) { - s->formatter->dump_string("ETag", std::move(etag_str)); + if (! etag.empty()) { + s->formatter->dump_string("ETag", std::move(etag)); } s->formatter->close_section(); rgw_flush_formatter_and_reset(s, s->formatter); diff --git a/src/rgw/rgw_rest_swift.cc b/src/rgw/rgw_rest_swift.cc index 260ee389d70..be023bf5d90 100644 --- a/src/rgw/rgw_rest_swift.cc +++ b/src/rgw/rgw_rest_swift.cc @@ -1436,7 +1436,7 @@ int RGWGetObj_ObjStore_SWIFT::send_response_data(bufferlist& bl, } else { auto iter = attrs.find(RGW_ATTR_ETAG); if (iter != attrs.end()) { - dump_etag(s, iter->second); + dump_etag(s, iter->second.to_str()); } } -- 2.39.5