From: Javier M. Mellid Date: Thu, 14 Jan 2016 13:14:38 +0000 (+0100) Subject: rgw: raise error on not implemented AWS4 completions X-Git-Tag: v10.1.0~351^2^2~8 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=e183009b5be5ba2bde709007d39f942197ca0523;p=ceph.git rgw: raise error on not implemented AWS4 completions Signed-off-by: Javier M. Mellid --- diff --git a/src/rgw/rgw_common.h b/src/rgw/rgw_common.h index 4e7e3a152185..44f94c514ae0 100644 --- a/src/rgw/rgw_common.h +++ b/src/rgw/rgw_common.h @@ -372,6 +372,40 @@ enum http_op { OP_UNKNOWN, }; +enum RGWOpType { + RGW_OP_UNKNOWN = 0, + RGW_OP_GET_OBJ, + RGW_OP_LIST_BUCKETS, + RGW_OP_STAT_ACCOUNT, + RGW_OP_LIST_BUCKET, + RGW_OP_GET_BUCKET_LOGGING, + RGW_OP_GET_BUCKET_VERSIONING, + RGW_OP_SET_BUCKET_VERSIONING, + RGW_OP_STAT_BUCKET, + RGW_OP_CREATE_BUCKET, + RGW_OP_DELETE_BUCKET, + RGW_OP_PUT_OBJ, + RGW_OP_POST_OBJ, + RGW_OP_PUT_METADATA_ACCOUNT, + RGW_OP_PUT_METADATA_BUCKET, + RGW_OP_PUT_METADATA_OBJECT, + RGW_OP_SET_TEMPURL, + RGW_OP_DELETE_OBJ, + RGW_OP_COPY_OBJ, + RGW_OP_GET_ACLS, + RGW_OP_PUT_ACLS, + RGW_OP_GET_CORS, + RGW_OP_PUT_CORS, + RGW_OP_DELETE_CORS, + RGW_OP_OPTIONS_CORS, + RGW_OP_INIT_MULTIPART, + RGW_OP_COMPLETE_MULTIPART, + RGW_OP_ABORT_MULTIPART, + RGW_OP_LIST_MULTIPART, + RGW_OP_LIST_BUCKET_MULTIPARTS, + RGW_OP_DELETE_MULTI_OBJ, +}; + class RGWAccessControlPolicy; class JSONObj; @@ -1089,6 +1123,7 @@ struct req_state { CephContext *cct; RGWClientIO *cio; http_op op; + RGWOpType op_type; bool content_started; int format; ceph::Formatter *formatter; diff --git a/src/rgw/rgw_main.cc b/src/rgw/rgw_main.cc index 6666ef267a30..f59a79b12255 100644 --- a/src/rgw/rgw_main.cc +++ b/src/rgw/rgw_main.cc @@ -583,6 +583,8 @@ static int process_request(RGWRados *store, RGWREST *rest, RGWRequest *req, RGWC req->op = op; dout(10) << "op=" << typeid(*op).name() << dendl; + s->op_type = op->get_type(); + req->log(s, "authorizing"); ret = handler->authorize(); if (ret < 0) { diff --git a/src/rgw/rgw_op.h b/src/rgw/rgw_op.h index f1989e3f140c..6b69c01ea39f 100644 --- a/src/rgw/rgw_op.h +++ b/src/rgw/rgw_op.h @@ -31,45 +31,6 @@ using namespace std; struct req_state; class RGWHandler; -enum RGWOpType { - RGW_OP_UNKNOWN = 0, - RGW_OP_GET_OBJ, - RGW_OP_LIST_BUCKETS, - RGW_OP_STAT_ACCOUNT, - RGW_OP_LIST_BUCKET, - RGW_OP_GET_BUCKET_LOGGING, - RGW_OP_GET_BUCKET_VERSIONING, - RGW_OP_SET_BUCKET_VERSIONING, - RGW_OP_GET_BUCKET_WEBSITE, - RGW_OP_SET_BUCKET_WEBSITE, - RGW_OP_STAT_BUCKET, - RGW_OP_CREATE_BUCKET, - RGW_OP_DELETE_BUCKET, - RGW_OP_PUT_OBJ, - RGW_OP_POST_OBJ, - RGW_OP_PUT_METADATA_ACCOUNT, - RGW_OP_PUT_METADATA_BUCKET, - RGW_OP_PUT_METADATA_OBJECT, - RGW_OP_SET_TEMPURL, - RGW_OP_DELETE_OBJ, - RGW_OP_COPY_OBJ, - RGW_OP_GET_ACLS, - RGW_OP_PUT_ACLS, - RGW_OP_GET_CORS, - RGW_OP_PUT_CORS, - RGW_OP_DELETE_CORS, - RGW_OP_OPTIONS_CORS, - RGW_OP_GET_REQUEST_PAYMENT, - RGW_OP_SET_REQUEST_PAYMENT, - RGW_OP_INIT_MULTIPART, - RGW_OP_COMPLETE_MULTIPART, - RGW_OP_ABORT_MULTIPART, - RGW_OP_LIST_MULTIPART, - RGW_OP_LIST_BUCKET_MULTIPARTS, - RGW_OP_DELETE_MULTI_OBJ, - RGW_OP_BULK_DELETE -}; - /** * Provide the base class for all ops. */ diff --git a/src/rgw/rgw_rest_s3.cc b/src/rgw/rgw_rest_s3.cc index ab9f14a5f67c..079a6493f1b4 100644 --- a/src/rgw/rgw_rest_s3.cc +++ b/src/rgw/rgw_rest_s3.cc @@ -3117,10 +3117,25 @@ int RGW_Auth_S3::authorize_v4(RGWRados *store, struct req_state *s) /* aws4 auth not completed... delay aws4 auth */ - s->aws4_auth_needs_complete = true; - dout(10) << "body content detected... delaying v4 auth" << dendl; + switch (s->op_type) + { + case RGW_OP_PUT_OBJ: + case RGW_OP_PUT_ACLS: + /* ops requiring aws4 completion but not implemented yet */ + //case RGW_OP_PUT_CORS: + //case RGW_OP_COMPLETE_MULTIPART: + //case RGW_OP_SET_BUCKET_VERSIONING: + //case RGW_OP_DELETE_MULTI_OBJ: + break; + default: + dout(10) << "ERROR: AWS4 completion for this operation NOT IMPLEMENTED" << dendl; + return -ERR_NOT_IMPLEMENTED; + } + + s->aws4_auth_needs_complete = true; + } map::iterator iter = s->user.access_keys.find(s->aws4_auth->access_key_id);