aboutsummaryrefslogtreecommitdiff
path: root/weed/s3api/s3api_object_retention.go
diff options
context:
space:
mode:
Diffstat (limited to 'weed/s3api/s3api_object_retention.go')
-rw-r--r--weed/s3api/s3api_object_retention.go34
1 files changed, 23 insertions, 11 deletions
diff --git a/weed/s3api/s3api_object_retention.go b/weed/s3api/s3api_object_retention.go
index ca4c38a27..deef7dee1 100644
--- a/weed/s3api/s3api_object_retention.go
+++ b/weed/s3api/s3api_object_retention.go
@@ -226,26 +226,38 @@ func validateDefaultRetention(retention *DefaultRetention) error {
return ErrInvalidDefaultRetentionMode
}
- // Exactly one of Days or Years must be specified
- if retention.Days == 0 && retention.Years == 0 {
- return ErrDefaultRetentionMissingPeriod
+ // Check for invalid Years value (negative values are always invalid)
+ if retention.Years < 0 {
+ return ErrInvalidRetentionPeriod
}
- if retention.Days > 0 && retention.Years > 0 {
- return ErrDefaultRetentionBothDaysAndYears
+ // Check for invalid Days value (negative values are invalid)
+ if retention.Days < 0 {
+ return ErrInvalidRetentionPeriod
}
- // Validate ranges - Days must be greater than 0
- if retention.Days <= 0 {
+ // Check for Days: 0 when Years is also 0 (this should return InvalidRetentionPeriod)
+ if retention.Days == 0 && retention.Years == 0 {
return ErrInvalidRetentionPeriod
}
- if retention.Days > MaxRetentionDays {
- return ErrDefaultRetentionDaysOutOfRange
+ // Check for both Days and Years being specified
+ if retention.Days > 0 && retention.Years > 0 {
+ return ErrDefaultRetentionBothDaysAndYears
+ }
+
+ // Validate Days if specified
+ if retention.Days > 0 {
+ if retention.Days > MaxRetentionDays {
+ return ErrDefaultRetentionDaysOutOfRange
+ }
}
- if retention.Years < 0 || retention.Years > MaxRetentionYears {
- return ErrDefaultRetentionYearsOutOfRange
+ // Validate Years if specified
+ if retention.Years > 0 {
+ if retention.Years > MaxRetentionYears {
+ return ErrDefaultRetentionYearsOutOfRange
+ }
}
return nil