mirror of
https://github.com/versity/versitygw.git
synced 2026-08-18 21:26:27 +00:00
fix: validate object lock default retention upper limits
Fixes #2187 Enforce maximum default retention periods when parsing PutObjectLockConfiguration requests. Reject Days values greater than 36500 and Years values greater than 100 with InvalidArgument errors.
This commit is contained in:
@@ -35,6 +35,11 @@ type BucketLockConfig struct {
|
||||
CreatedAt *time.Time
|
||||
}
|
||||
|
||||
const (
|
||||
maxObjectLockRetentionDays int32 = 36500
|
||||
maxObjectLockRetentionYears int32 = 100
|
||||
)
|
||||
|
||||
func ParseBucketLockConfigurationInput(input []byte) ([]byte, error) {
|
||||
var lockConfig types.ObjectLockConfiguration
|
||||
if err := xml.Unmarshal(input, &lockConfig); err != nil {
|
||||
@@ -62,9 +67,15 @@ func ParseBucketLockConfigurationInput(input []byte) ([]byte, error) {
|
||||
if retention.Days != nil && *retention.Days <= 0 {
|
||||
return nil, s3err.GetInvalidArgumentErr(s3err.InvalidArgObjectLockRetentionDays, fmt.Sprint(*retention.Days))
|
||||
}
|
||||
if retention.Days != nil && *retention.Days > maxObjectLockRetentionDays {
|
||||
return nil, s3err.GetInvalidArgumentErr(s3err.InvalidArgObjectLockRetentionDaysTooLarge, fmt.Sprint(*retention.Days))
|
||||
}
|
||||
if retention.Years != nil && *retention.Years <= 0 {
|
||||
return nil, s3err.GetInvalidArgumentErr(s3err.InvalidArgObjectLockRetentionYears, fmt.Sprint(*retention.Years))
|
||||
}
|
||||
if retention.Years != nil && *retention.Years > maxObjectLockRetentionYears {
|
||||
return nil, s3err.GetInvalidArgumentErr(s3err.InvalidArgObjectLockRetentionYearsTooLarge, fmt.Sprint(*retention.Years))
|
||||
}
|
||||
|
||||
config.DefaultRetention = retention
|
||||
now := time.Now()
|
||||
|
||||
Reference in New Issue
Block a user