diff options
Diffstat (limited to 'weed/s3api/s3api_object_retention.go')
| -rw-r--r-- | weed/s3api/s3api_object_retention.go | 34 |
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 |
