From 1216eb2d7451a41c2cb0b3151989fa7ae66480e6 Mon Sep 17 00:00:00 2001 From: Yehuda Sadeh Date: Wed, 12 Oct 2011 11:09:02 -0700 Subject: [PATCH] rgw: some swift api fixes --- src/rgw/rgw_rest.cc | 14 +++++++++--- src/rgw/rgw_rest_swift.cc | 46 ++++++++++++++++++--------------------- src/rgw/rgw_swift.cc | 3 +++ 3 files changed, 35 insertions(+), 28 deletions(-) diff --git a/src/rgw/rgw_rest.cc b/src/rgw/rgw_rest.cc index 7daeb9a8caeef..ace66096f5ed4 100644 --- a/src/rgw/rgw_rest.cc +++ b/src/rgw/rgw_rest.cc @@ -154,18 +154,23 @@ void dump_start(struct req_state *s) void end_header(struct req_state *s, const char *content_type) { + string ctype; + if (!content_type || s->err.is_err()) { switch (s->format) { case RGW_FORMAT_XML: - content_type = "application/xml"; + ctype = "application/xml"; break; case RGW_FORMAT_JSON: - content_type = "application/json"; + ctype = "application/json"; break; default: - content_type = "text/plain"; + ctype = "text/plain"; break; } + if (s->prot_flags & RGW_REST_SWIFT) + ctype.append("; charset=utf-8"); + content_type = ctype.c_str(); } if (s->err.is_err()) { dump_start(s); @@ -635,6 +640,9 @@ static int validate_bucket_name(const char *bucket) return ERR_INVALID_BUCKET_NAME; } +#warning FIXME + return 0; + if (!(isalpha(bucket[0]) || isdigit(bucket[0]))) { // bucket names must start with a number or letter return ERR_INVALID_BUCKET_NAME; diff --git a/src/rgw/rgw_rest_swift.cc b/src/rgw/rgw_rest_swift.cc index 13e73422996a4..702659538e7a2 100644 --- a/src/rgw/rgw_rest_swift.cc +++ b/src/rgw/rgw_rest_swift.cc @@ -9,16 +9,8 @@ void RGWListBuckets_REST_SWIFT::send_response() { - set_req_state_err(s, ret); - dump_errno(s); - dump_start(s); - if (ret < 0) { - end_header(s); - return; - } - s->formatter->open_array_section("account"); // dump_owner(s, s->user.user_id, s->user.display_name); @@ -47,30 +39,23 @@ void RGWListBuckets_REST_SWIFT::send_response() } s->formatter->close_section(); - ostringstream oss; - s->formatter->flush(oss); - std::string outs(oss.str()); - string::size_type outs_size = outs.size(); - dump_content_length(s, outs_size); - end_header(s); - if (!outs.empty()) { - CGI_PutStr(s, outs.c_str(), outs_size); - } - s->formatter->reset(); -} + if (!ret && s->formatter->get_len() == 0) + ret = 204; -void RGWListBucket_REST_SWIFT::send_response() -{ - set_req_state_err(s, (ret < 0 ? ret : 0)); + set_req_state_err(s, ret); dump_errno(s); + end_header(s); - dump_start(s); if (ret < 0) { - end_header(s); return; } - vector::iterator iter = objs.begin(); + flush_formatter_to_req_state(s, s->formatter); +} + +void RGWListBucket_REST_SWIFT::send_response() +{ + vector::iterator iter = objs.begin(); map::iterator pref_iter = common_prefixes.begin(); s->formatter->open_array_section("container"); @@ -114,7 +99,18 @@ void RGWListBucket_REST_SWIFT::send_response() s->formatter->close_section(); + if (!ret && s->formatter->get_len() == 0) + ret = 204; + + set_req_state_err(s, (ret < 0 ? ret : 0)); + dump_errno(s); + + dump_start(s); end_header(s); + if (ret < 0) { + return; + } + flush_formatter_to_req_state(s, s->formatter); } diff --git a/src/rgw/rgw_swift.cc b/src/rgw/rgw_swift.cc index e10c035ac9b72..56df8d8547a43 100644 --- a/src/rgw/rgw_swift.cc +++ b/src/rgw/rgw_swift.cc @@ -83,6 +83,9 @@ static int rgw_swift_validate_token(const char *token, struct rgw_swift_auth_inf bool rgw_verify_os_token(req_state *s) { + if (!s->os_auth_token) + return false; + if (strncmp(s->os_auth_token, "AUTH_rgwtk", 10) == 0) { int ret = rgw_swift_verify_signed_token(s->os_auth_token, s->user); if (ret < 0) -- 2.39.5