mirror of https://github.com/minio/minio.git
Add bucketName checks for azure and s3 gateway in GetBucketInfo. (#4992)
Gateway interface implementations of GetBucketInfo() under azure and s3 gateway did not perform any bucketname input validation resulting in incorrect responses when the tests are expecting InvalidBucketName. Fixes #4983
This commit is contained in:
parent
4c9fae90ff
commit
b415c600e1
|
@ -133,10 +133,12 @@ func (a *azureObjects) AnonGetBucketInfo(bucket string) (bucketInfo BucketInfo,
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return bucketInfo, traceError(err)
|
return bucketInfo, traceError(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
bucketInfo = BucketInfo{
|
bucketInfo = BucketInfo{
|
||||||
Name: bucket,
|
Name: bucket,
|
||||||
Created: t,
|
Created: t,
|
||||||
}
|
}
|
||||||
|
|
||||||
return bucketInfo, nil
|
return bucketInfo, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -327,6 +327,14 @@ func (a *azureObjects) MakeBucketWithLocation(bucket, location string) error {
|
||||||
|
|
||||||
// GetBucketInfo - Get bucket metadata..
|
// GetBucketInfo - Get bucket metadata..
|
||||||
func (a *azureObjects) GetBucketInfo(bucket string) (bi BucketInfo, e error) {
|
func (a *azureObjects) GetBucketInfo(bucket string) (bi BucketInfo, e error) {
|
||||||
|
// Verify if bucket (container-name) is valid.
|
||||||
|
// IsValidBucketName has same restrictions as container names mentioned
|
||||||
|
// in azure documentation, so we will simply use the same function here.
|
||||||
|
// Ref - https://docs.microsoft.com/en-us/rest/api/storageservices/naming-and-referencing-containers--blobs--and-metadata
|
||||||
|
if !IsValidBucketName(bucket) {
|
||||||
|
return bi, traceError(BucketNameInvalid{Bucket: bucket})
|
||||||
|
}
|
||||||
|
|
||||||
// Azure does not have an equivalent call, hence use
|
// Azure does not have an equivalent call, hence use
|
||||||
// ListContainers with prefix
|
// ListContainers with prefix
|
||||||
resp, err := a.client.ListContainers(storage.ListContainersParameters{
|
resp, err := a.client.ListContainers(storage.ListContainersParameters{
|
||||||
|
|
|
@ -135,8 +135,14 @@ func (l *gcsGateway) AnonGetBucketInfo(bucket string) (bucketInfo BucketInfo, er
|
||||||
return bucketInfo, gcsToObjectError(traceError(anonErrToObjectErr(resp.StatusCode, bucket)), bucket)
|
return bucketInfo, gcsToObjectError(traceError(anonErrToObjectErr(resp.StatusCode, bucket)), bucket)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
t, err := time.Parse(time.RFC1123, resp.Header.Get("Last-Modified"))
|
||||||
|
if err != nil {
|
||||||
|
return bucketInfo, traceError(err)
|
||||||
|
}
|
||||||
|
|
||||||
// Last-Modified date being returned by GCS
|
// Last-Modified date being returned by GCS
|
||||||
return BucketInfo{
|
return BucketInfo{
|
||||||
Name: bucket,
|
Name: bucket,
|
||||||
|
Created: t,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,6 +25,7 @@ import (
|
||||||
|
|
||||||
minio "github.com/minio/minio-go"
|
minio "github.com/minio/minio-go"
|
||||||
"github.com/minio/minio-go/pkg/policy"
|
"github.com/minio/minio-go/pkg/policy"
|
||||||
|
"github.com/minio/minio-go/pkg/s3utils"
|
||||||
)
|
)
|
||||||
|
|
||||||
// s3ToObjectError converts Minio errors to minio object layer errors.
|
// s3ToObjectError converts Minio errors to minio object layer errors.
|
||||||
|
@ -161,6 +162,17 @@ func (l *s3Objects) MakeBucketWithLocation(bucket, location string) error {
|
||||||
|
|
||||||
// GetBucketInfo gets bucket metadata..
|
// GetBucketInfo gets bucket metadata..
|
||||||
func (l *s3Objects) GetBucketInfo(bucket string) (bi BucketInfo, e error) {
|
func (l *s3Objects) GetBucketInfo(bucket string) (bi BucketInfo, e error) {
|
||||||
|
// Verify if bucket name is valid.
|
||||||
|
// We are using a separate helper function here to validate bucket
|
||||||
|
// names instead of IsValidBucketName() because there is a possibility
|
||||||
|
// that certains users might have buckets which are non-DNS compliant
|
||||||
|
// in us-east-1 and we might severely restrict them by not allowing
|
||||||
|
// access to these buckets.
|
||||||
|
// Ref - http://docs.aws.amazon.com/AmazonS3/latest/dev/BucketRestrictions.html
|
||||||
|
if s3utils.CheckValidBucketName(bucket) != nil {
|
||||||
|
return bi, traceError(BucketNameInvalid{Bucket: bucket})
|
||||||
|
}
|
||||||
|
|
||||||
buckets, err := l.Client.ListBuckets()
|
buckets, err := l.Client.ListBuckets()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return bi, s3ToObjectError(traceError(err), bucket)
|
return bi, s3ToObjectError(traceError(err), bucket)
|
||||||
|
|
Loading…
Reference in New Issue