From c57159a0fe410a2a103f5118d173ad0bfb8dd2be Mon Sep 17 00:00:00 2001 From: kannappanr <30541348+kannappanr@users.noreply.github.com> Date: Tue, 5 Mar 2019 10:42:32 -0800 Subject: [PATCH] fs mode: List already existing buckets with capital letters (#7244) if a bucket with `Captialized letters` is created, `InvalidBucketName` error will be returned. In the case of pre-existing buckets, it will be listed. Fixes #6938 --- cmd/fs-v1.go | 9 ++++----- cmd/gateway/oss/gateway-oss.go | 3 ++- cmd/object-api-utils.go | 13 ++++++++++--- cmd/web-handlers.go | 2 +- cmd/xl-v1-bucket.go | 6 +++--- 5 files changed, 20 insertions(+), 13 deletions(-) diff --git a/cmd/fs-v1.go b/cmd/fs-v1.go index b37b20ee1..ad83e1999 100644 --- a/cmd/fs-v1.go +++ b/cmd/fs-v1.go @@ -30,6 +30,7 @@ import ( "sync/atomic" "time" + "github.com/minio/minio-go/pkg/s3utils" "github.com/minio/minio/cmd/logger" "github.com/minio/minio/pkg/lock" "github.com/minio/minio/pkg/madmin" @@ -289,10 +290,8 @@ func (fs *FSObjects) MakeBucketWithLocation(ctx context.Context, bucket, locatio } defer bucketLock.Unlock() // Verify if bucket is valid. - if !IsValidBucketName(bucket) { - err := BucketNameInvalid{Bucket: bucket} - logger.LogIf(ctx, err) - return err + if s3utils.CheckValidBucketNameStrict(bucket) != nil { + return BucketNameInvalid{Bucket: bucket} } bucketDir, err := fs.getBucketDir(ctx, bucket) if err != nil { @@ -341,7 +340,7 @@ func (fs *FSObjects) ListBuckets(ctx context.Context) ([]BucketInfo, error) { for _, entry := range entries { // Ignore all reserved bucket names and invalid bucket names. - if isReservedOrInvalidBucket(entry) { + if isReservedOrInvalidBucket(entry, false) { continue } var fi os.FileInfo diff --git a/cmd/gateway/oss/gateway-oss.go b/cmd/gateway/oss/gateway-oss.go index 21a62c6aa..cdb6c4d65 100644 --- a/cmd/gateway/oss/gateway-oss.go +++ b/cmd/gateway/oss/gateway-oss.go @@ -30,6 +30,7 @@ import ( "github.com/minio/cli" miniogopolicy "github.com/minio/minio-go/pkg/policy" + "github.com/minio/minio-go/pkg/s3utils" minio "github.com/minio/minio/cmd" xhttp "github.com/minio/minio/cmd/http" "github.com/minio/minio/cmd/logger" @@ -349,7 +350,7 @@ func ossIsValidBucketName(bucket string) bool { if strings.Contains(bucket, ".") { return false } - if !minio.IsValidBucketName(bucket) { + if s3utils.CheckValidBucketNameStrict(bucket) != nil { return false } return true diff --git a/cmd/object-api-utils.go b/cmd/object-api-utils.go index a98427a41..1bd9fc1b3 100644 --- a/cmd/object-api-utils.go +++ b/cmd/object-api-utils.go @@ -34,6 +34,7 @@ import ( "unicode/utf8" snappy "github.com/golang/snappy" + "github.com/minio/minio-go/pkg/s3utils" "github.com/minio/minio/cmd/crypto" "github.com/minio/minio/cmd/logger" "github.com/minio/minio/pkg/dns" @@ -273,10 +274,16 @@ func isStringEqual(s1 string, s2 string) bool { } // Ignores all reserved bucket names or invalid bucket names. -func isReservedOrInvalidBucket(bucketEntry string) bool { +func isReservedOrInvalidBucket(bucketEntry string, strict bool) bool { bucketEntry = strings.TrimSuffix(bucketEntry, slashSeparator) - if !IsValidBucketName(bucketEntry) { - return true + if strict { + if err := s3utils.CheckValidBucketNameStrict(bucketEntry); err != nil { + return true + } + } else { + if err := s3utils.CheckValidBucketName(bucketEntry); err != nil { + return true + } } return isMinioMetaBucket(bucketEntry) || isMinioReservedBucket(bucketEntry) } diff --git a/cmd/web-handlers.go b/cmd/web-handlers.go index a328eb5ec..50b3211d3 100644 --- a/cmd/web-handlers.go +++ b/cmd/web-handlers.go @@ -157,7 +157,7 @@ func (web *webAPIHandlers) MakeBucket(r *http.Request, args *MakeBucketArgs, rep } // Check if bucket is a reserved bucket name or invalid. - if isReservedOrInvalidBucket(args.BucketName) { + if isReservedOrInvalidBucket(args.BucketName, true) { return toJSONError(errInvalidBucketName) } diff --git a/cmd/xl-v1-bucket.go b/cmd/xl-v1-bucket.go index e368ca3fe..2d90fb3b0 100644 --- a/cmd/xl-v1-bucket.go +++ b/cmd/xl-v1-bucket.go @@ -21,6 +21,7 @@ import ( "sort" "sync" + "github.com/minio/minio-go/pkg/s3utils" "github.com/minio/minio/cmd/logger" "github.com/minio/minio/pkg/policy" ) @@ -36,8 +37,7 @@ var bucketMetadataOpIgnoredErrs = append(bucketOpIgnoredErrs, errVolumeNotFound) // MakeBucket - make a bucket. func (xl xlObjects) MakeBucketWithLocation(ctx context.Context, bucket, location string) error { // Verify if bucket is valid. - if !IsValidBucketName(bucket) { - logger.LogIf(ctx, BucketNameInvalid{Bucket: bucket}) + if err := s3utils.CheckValidBucketNameStrict(bucket); err != nil { return BucketNameInvalid{Bucket: bucket} } @@ -178,7 +178,7 @@ func (xl xlObjects) listBuckets(ctx context.Context) (bucketsInfo []BucketInfo, // should take care of this. var bucketsInfo []BucketInfo for _, volInfo := range volsInfo { - if isReservedOrInvalidBucket(volInfo.Name) { + if isReservedOrInvalidBucket(volInfo.Name, true) { continue } bucketsInfo = append(bucketsInfo, BucketInfo(volInfo))