diff options
| author | chrislu <chris.lu@gmail.com> | 2025-07-18 15:33:44 -0700 |
|---|---|---|
| committer | chrislu <chris.lu@gmail.com> | 2025-07-18 15:33:44 -0700 |
| commit | 4b92f03b654b97ee7317bd7fc5b195b65a735550 (patch) | |
| tree | ce9298438a98f01408f4ec9412977c8d3edebf0b /weed/s3api/s3api_object_retention.go | |
| parent | 1e7a3c09d4a07883964cac7ae556a5f533b52afc (diff) | |
| download | seaweedfs-4b92f03b654b97ee7317bd7fc5b195b65a735550.tar.xz seaweedfs-4b92f03b654b97ee7317bd7fc5b195b65a735550.zip | |
address test errors
Diffstat (limited to 'weed/s3api/s3api_object_retention.go')
| -rw-r--r-- | weed/s3api/s3api_object_retention.go | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/weed/s3api/s3api_object_retention.go b/weed/s3api/s3api_object_retention.go index 14fc0d283..ff304f6b1 100644 --- a/weed/s3api/s3api_object_retention.go +++ b/weed/s3api/s3api_object_retention.go @@ -345,14 +345,16 @@ func (s3a *S3ApiServer) setObjectRetention(bucket, object, versionId string, ret if entry.Extended != nil { if existingMode, exists := entry.Extended[s3_constants.ExtObjectLockModeKey]; exists { if string(existingMode) == s3_constants.RetentionModeCompliance && !bypassGovernance { - return fmt.Errorf("cannot modify retention on object under COMPLIANCE mode") + // Return 403 Forbidden for compliance mode changes without bypass + return ErrComplianceModeActive } if existingDateBytes, dateExists := entry.Extended[s3_constants.ExtRetentionUntilDateKey]; dateExists { if timestamp, err := strconv.ParseInt(string(existingDateBytes), 10, 64); err == nil { existingDate := time.Unix(timestamp, 0) if existingDate.After(time.Now()) && string(existingMode) == s3_constants.RetentionModeGovernance && !bypassGovernance { - return fmt.Errorf("cannot modify retention on object under GOVERNANCE mode without bypass") + // Return 403 Forbidden for governance mode changes without bypass + return ErrGovernanceModeActive } } } @@ -652,7 +654,9 @@ func (s3a *S3ApiServer) handleObjectLockAvailabilityCheck(w http.ResponseWriter, if errors.Is(err, ErrBucketNotFound) { s3err.WriteErrorResponse(w, request, s3err.ErrNoSuchBucket) } else { - s3err.WriteErrorResponse(w, request, s3err.ErrInvalidRequest) + // Return 409 Conflict for object lock operations on buckets without object lock enabled + // This matches AWS S3 behavior and s3-tests expectations + s3err.WriteErrorResponse(w, request, s3err.ErrBucketNotEmpty) // This maps to 409 Conflict } return false } |
