diff --git a/cmd/bucket-replication.go b/cmd/bucket-replication.go index 17a8097dd..06564bb3e 100644 --- a/cmd/bucket-replication.go +++ b/cmd/bucket-replication.go @@ -39,6 +39,7 @@ import ( "github.com/minio/minio-go/v7/pkg/encrypt" "github.com/minio/minio-go/v7/pkg/tags" "github.com/minio/minio/internal/bucket/bandwidth" + objectlock "github.com/minio/minio/internal/bucket/object/lock" "github.com/minio/minio/internal/bucket/replication" "github.com/minio/minio/internal/config/storageclass" "github.com/minio/minio/internal/crypto" @@ -117,15 +118,22 @@ func validateReplicationDestination(ctx context.Context, bucket string, rCfg *re return sameTarget, toAPIError(ctx, BucketRemoteTargetNotFound{Bucket: bucket}) } if checkRemote { // validate remote bucket - if found, err := clnt.BucketExists(ctx, arn.Bucket); !found { + found, err := clnt.BucketExists(ctx, arn.Bucket) + if err != nil { return sameTarget, errorCodes.ToAPIErrWithErr(ErrRemoteDestinationNotFoundError, err) } + if !found { + return sameTarget, errorCodes.ToAPIErrWithErr(ErrRemoteDestinationNotFoundError, BucketRemoteTargetNotFound{Bucket: arn.Bucket}) + } if ret, err := globalBucketObjectLockSys.Get(bucket); err == nil { if ret.LockEnabled { lock, _, _, _, err := clnt.GetObjectLockConfig(ctx, arn.Bucket) - if err != nil || lock != "Enabled" { + if err != nil { return sameTarget, errorCodes.ToAPIErrWithErr(ErrReplicationDestinationMissingLock, err) } + if lock != objectlock.Enabled { + return sameTarget, errorCodes.ToAPIErrWithErr(ErrReplicationDestinationMissingLock, nil) + } } } } diff --git a/cmd/bucket-targets.go b/cmd/bucket-targets.go index ed6984f76..178f2f333 100644 --- a/cmd/bucket-targets.go +++ b/cmd/bucket-targets.go @@ -30,7 +30,6 @@ import ( miniogo "github.com/minio/minio-go/v7" "github.com/minio/minio-go/v7/pkg/credentials" "github.com/minio/minio/internal/bucket/replication" - "github.com/minio/minio/internal/bucket/versioning" "github.com/minio/minio/internal/crypto" "github.com/minio/minio/internal/kms" "github.com/minio/minio/internal/logger" @@ -220,12 +219,16 @@ func (sys *BucketTargetSys) SetTarget(ctx context.Context, bucket string, tgt *m return BucketRemoteTargetNotFound{Bucket: tgt.TargetBucket} } // validate if target credentials are ok - if _, err = clnt.BucketExists(ctx, tgt.TargetBucket); err != nil { + exists, err := clnt.BucketExists(ctx, tgt.TargetBucket) + if err != nil { if minio.ToErrorResponse(err).Code == "NoSuchBucket" { return BucketRemoteTargetNotFound{Bucket: tgt.TargetBucket} } return RemoteTargetConnectionErr{Bucket: tgt.TargetBucket, Err: err} } + if !exists { + return BucketRemoteTargetNotFound{Bucket: tgt.TargetBucket} + } if tgt.Type == madmin.ReplicationService { if !globalBucketVersioningSys.Enabled(bucket) { return BucketReplicationSourceNotVersioned{Bucket: bucket} @@ -234,7 +237,7 @@ func (sys *BucketTargetSys) SetTarget(ctx context.Context, bucket string, tgt *m if err != nil { return RemoteTargetConnectionErr{Bucket: tgt.TargetBucket, Err: err} } - if vcfg.Status != string(versioning.Enabled) { + if !vcfg.Enabled() { return BucketRemoteTargetNotVersioned{Bucket: tgt.TargetBucket} } } diff --git a/internal/bucket/object/lock/lock.go b/internal/bucket/object/lock/lock.go index d40bf71b8..0eda09aeb 100644 --- a/internal/bucket/object/lock/lock.go +++ b/internal/bucket/object/lock/lock.go @@ -36,6 +36,9 @@ import ( "github.com/minio/pkg/env" ) +// Enabled indicates object locking is enabled +const Enabled = "Enabled" + // RetMode - object retention mode. type RetMode string @@ -239,7 +242,7 @@ func (config *Config) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error return err } - if parsedConfig.ObjectLockEnabled != "Enabled" { + if parsedConfig.ObjectLockEnabled != Enabled { return fmt.Errorf("only 'Enabled' value is allowed to ObjectLockEnabled element") } @@ -250,7 +253,7 @@ func (config *Config) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error // ToRetention - convert to Retention type. func (config *Config) ToRetention() Retention { r := Retention{ - LockEnabled: config.ObjectLockEnabled == "Enabled", + LockEnabled: config.ObjectLockEnabled == Enabled, } if config.Rule != nil { r.Mode = config.Rule.DefaultRetention.Mode @@ -289,7 +292,7 @@ func ParseObjectLockConfig(reader io.Reader) (*Config, error) { // NewObjectLockConfig returns a initialized lock.Config struct func NewObjectLockConfig() *Config { return &Config{ - ObjectLockEnabled: "Enabled", + ObjectLockEnabled: Enabled, } }