diff --git a/cmd/bucket-versioning-handler.go b/cmd/bucket-versioning-handler.go index da7620507..bc14e1d2b 100644 --- a/cmd/bucket-versioning-handler.go +++ b/cmd/bucket-versioning-handler.go @@ -70,6 +70,14 @@ func (api objectAPIHandlers) PutBucketVersioningHandler(w http.ResponseWriter, r }, r.URL, guessIsBrowserReq(r)) return } + if _, err := getReplicationConfig(ctx, bucket); err == nil && v.Suspended() { + writeErrorResponse(ctx, w, APIError{ + Code: "InvalidBucketState", + Description: "A replication configuration is present on this bucket, so the versioning state cannot be changed.", + HTTPStatusCode: http.StatusConflict, + }, r.URL, guessIsBrowserReq(r)) + return + } configData, err := xml.Marshal(v) if err != nil { diff --git a/cmd/object-api-options.go b/cmd/object-api-options.go index 7f3ee5778..859a34274 100644 --- a/cmd/object-api-options.go +++ b/cmd/object-api-options.go @@ -151,6 +151,13 @@ func putOpts(ctx context.Context, r *http.Request, bucket, object string, metada VersionID: vid, } } + if !versioned { + return opts, InvalidArgument{ + Bucket: bucket, + Object: object, + Err: fmt.Errorf("VersionID specified %s, but versioning not enabled on %s", opts.VersionID, bucket), + } + } } mtime := strings.TrimSpace(r.Header.Get(xhttp.MinIOSourceMTime)) if mtime != "" {