Shuo Huang created HDDS-16115:
---------------------------------
Summary: Reject invalid lifecycle rule Status values in S3 Gateway
Key: HDDS-16115
URL: https://issues.apache.org/jira/browse/HDDS-16115
Project: Apache Ozone
Issue Type: Sub-task
Reporter: Shuo Huang
Assignee: Shuo Huang
h3. Problem
S3 Gateway accepts invalid values for the lifecycle rule \{{Status}} field.
According to the Amazon S3 API, \{{Status}} is required and only \{{Enabled}}
or \{{Disabled}} is valid. However, Ozone accepts values such as lowercase
\{{enabled}} and returns HTTP 200.
h3. Steps to reproduce
# Create an S3 bucket.
# Send a PutBucketLifecycleConfiguration request containing:
{code:xml}
<LifecycleConfiguration>
<Rule>
<ID>rule1</ID>
<Prefix>test1/</Prefix>
<Status>enabled</Status>
<Expiration>
<Days>2</Days>
</Expiration>
</Rule>
</LifecycleConfiguration>
{code}
h3. Expected result
The request is rejected with HTTP 400 and \{{MalformedXML}}.
h3. Actual result
The request succeeds with HTTP 200. The invalid value is silently converted to
\{{enabled=false}}.
h3. Root cause
{\{S3LifecycleConfiguration.convertToOmRule}} only checks whether Status is
null or empty. It then converts the value using:
{code:java}
.setEnabled("Enabled".equals(rule.getStatus()))
{code}
As a result, every non-\{{Enabled}} value is treated as disabled instead of
being rejected.
h3. Compatibility test
This is detected by:
{\{s3tests/functional/test_s3.py::test_lifecycle_invalid_status}}
https://github.com/ceph/s3-tests/blob/fb8b73092bb1dd8db829f1205a9e52e73bf9a232/s3tests/functional/test_s3.py#L9013
AWS API reference:
https://docs.aws.amazon.com/AmazonS3/latest/API/API_LifecycleRule.html
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]