rgw: Check bucket versioning operations in policy

Add code to check s3:GetBucketVersioning and s3:PutBucketVersioning
operations against bucket policy.

Fixes: http://tracker.ceph.com/issues/21389
Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1490278

Signed-off-by: Adam C. Emerson <aemerson@redhat.com>
This commit is contained in:
Adam C. Emerson 2017-09-27 14:35:59 -04:00
parent f9d1ae1d15
commit 16de0fc1c5

View File

@ -2019,11 +2019,16 @@ void RGWStatAccount::execute()
int RGWGetBucketVersioning::verify_permission()
{
if (false == s->auth.identity->is_owner_of(s->bucket_owner.get_id())) {
return -EACCES;
if (s->iam_policy) {
if (s->iam_policy->eval(s->env, *s->auth.identity,
rgw::IAM::s3GetBucketVersioning,
ARN(s->bucket)) == Effect::Allow) {
return 0;
}
} else if (s->auth.identity->is_owner_of(s->bucket_owner.get_id())) {
return 0;
}
return 0;
return -EACCES;
}
void RGWGetBucketVersioning::pre_exec()
@ -2039,11 +2044,16 @@ void RGWGetBucketVersioning::execute()
int RGWSetBucketVersioning::verify_permission()
{
if (false == s->auth.identity->is_owner_of(s->bucket_owner.get_id())) {
return -EACCES;
if (s->iam_policy) {
if (s->iam_policy->eval(s->env, *s->auth.identity,
rgw::IAM::s3PutBucketVersioning,
ARN(s->bucket)) == Effect::Allow) {
return 0;
}
} else if (s->auth.identity->is_owner_of(s->bucket_owner.get_id())) {
return 0;
}
return 0;
return -EACCES;
}
void RGWSetBucketVersioning::pre_exec()