mirror of
https://github.com/minio/minio.git
synced 2025-02-26 12:59:17 -05:00
bucketName: relax bucket names, now allow numbers as starting characters.
This commit is contained in:
parent
1413e761cf
commit
4fc161ddb1
@ -156,6 +156,7 @@ func (api CloudStorageAPI) PutObjectHandler(w http.ResponseWriter, req *http.Req
|
|||||||
var err error
|
var err error
|
||||||
sizeInt64, err = strconv.ParseInt(size, 10, 64)
|
sizeInt64, err = strconv.ParseInt(size, 10, 64)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
errorIf(probe.NewError(err), "Parsing Content-Length failed.", nil)
|
||||||
writeErrorResponse(w, req, InvalidRequest, req.URL.Path)
|
writeErrorResponse(w, req, InvalidRequest, req.URL.Path)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -289,6 +290,7 @@ func (api CloudStorageAPI) PutObjectPartHandler(w http.ResponseWriter, req *http
|
|||||||
var err error
|
var err error
|
||||||
sizeInt64, err = strconv.ParseInt(size, 10, 64)
|
sizeInt64, err = strconv.ParseInt(size, 10, 64)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
errorIf(probe.NewError(err), "Parsing Content-Length failed.", nil)
|
||||||
writeErrorResponse(w, req, InvalidRequest, req.URL.Path)
|
writeErrorResponse(w, req, InvalidRequest, req.URL.Path)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -165,9 +165,12 @@ func IsValidBucketACL(acl string) bool {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// IsValidBucket - verify bucket name in accordance with
|
// IsValidBucketName - verify bucket name in accordance with
|
||||||
// - http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingBucket.html
|
// - http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingBucket.html
|
||||||
func IsValidBucket(bucket string) bool {
|
func IsValidBucketName(bucket string) bool {
|
||||||
|
if strings.TrimSpace(bucket) == "" {
|
||||||
|
return false
|
||||||
|
}
|
||||||
if len(bucket) < 3 || len(bucket) > 63 {
|
if len(bucket) < 3 || len(bucket) > 63 {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
@ -178,7 +181,7 @@ func IsValidBucket(bucket string) bool {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
// We don't support buckets with '.' in them
|
// We don't support buckets with '.' in them
|
||||||
match, _ := regexp.MatchString("^[a-zA-Z][a-zA-Z0-9\\-]+[a-zA-Z0-9]$", bucket)
|
match, _ := regexp.MatchString("^[a-zA-Z0-9][a-zA-Z0-9\\-]+[a-zA-Z0-9]$", bucket)
|
||||||
return match
|
return match
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -31,7 +31,7 @@ import (
|
|||||||
func (fs Filesystem) ListObjects(bucket string, resources BucketResourcesMetadata) ([]ObjectMetadata, BucketResourcesMetadata, *probe.Error) {
|
func (fs Filesystem) ListObjects(bucket string, resources BucketResourcesMetadata) ([]ObjectMetadata, BucketResourcesMetadata, *probe.Error) {
|
||||||
fs.lock.Lock()
|
fs.lock.Lock()
|
||||||
defer fs.lock.Unlock()
|
defer fs.lock.Unlock()
|
||||||
if !IsValidBucket(bucket) {
|
if !IsValidBucketName(bucket) {
|
||||||
return nil, resources, probe.NewError(BucketNameInvalid{Bucket: bucket})
|
return nil, resources, probe.NewError(BucketNameInvalid{Bucket: bucket})
|
||||||
}
|
}
|
||||||
if resources.Prefix != "" && IsValidObjectName(resources.Prefix) == false {
|
if resources.Prefix != "" && IsValidObjectName(resources.Prefix) == false {
|
||||||
|
@ -33,7 +33,7 @@ func (fs Filesystem) DeleteBucket(bucket string) *probe.Error {
|
|||||||
fs.lock.Lock()
|
fs.lock.Lock()
|
||||||
defer fs.lock.Unlock()
|
defer fs.lock.Unlock()
|
||||||
// verify bucket path legal
|
// verify bucket path legal
|
||||||
if !IsValidBucket(bucket) {
|
if !IsValidBucketName(bucket) {
|
||||||
return probe.NewError(BucketNameInvalid{Bucket: bucket})
|
return probe.NewError(BucketNameInvalid{Bucket: bucket})
|
||||||
}
|
}
|
||||||
bucketDir := filepath.Join(fs.path, bucket)
|
bucketDir := filepath.Join(fs.path, bucket)
|
||||||
@ -78,7 +78,7 @@ func (fs Filesystem) ListBuckets() ([]BucketMetadata, *probe.Error) {
|
|||||||
}
|
}
|
||||||
if file.IsDir() {
|
if file.IsDir() {
|
||||||
// if directories found with odd names, skip them too
|
// if directories found with odd names, skip them too
|
||||||
if !IsValidBucket(file.Name()) {
|
if !IsValidBucketName(file.Name()) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -108,7 +108,7 @@ func (fs Filesystem) MakeBucket(bucket, acl string) *probe.Error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// verify bucket path legal
|
// verify bucket path legal
|
||||||
if !IsValidBucket(bucket) {
|
if !IsValidBucketName(bucket) {
|
||||||
return probe.NewError(BucketNameInvalid{Bucket: bucket})
|
return probe.NewError(BucketNameInvalid{Bucket: bucket})
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -157,7 +157,7 @@ func (fs Filesystem) MakeBucket(bucket, acl string) *probe.Error {
|
|||||||
func (fs Filesystem) GetBucketMetadata(bucket string) (BucketMetadata, *probe.Error) {
|
func (fs Filesystem) GetBucketMetadata(bucket string) (BucketMetadata, *probe.Error) {
|
||||||
fs.lock.Lock()
|
fs.lock.Lock()
|
||||||
defer fs.lock.Unlock()
|
defer fs.lock.Unlock()
|
||||||
if !IsValidBucket(bucket) {
|
if !IsValidBucketName(bucket) {
|
||||||
return BucketMetadata{}, probe.NewError(BucketNameInvalid{Bucket: bucket})
|
return BucketMetadata{}, probe.NewError(BucketNameInvalid{Bucket: bucket})
|
||||||
}
|
}
|
||||||
// get bucket path
|
// get bucket path
|
||||||
@ -184,7 +184,7 @@ func (fs Filesystem) GetBucketMetadata(bucket string) (BucketMetadata, *probe.Er
|
|||||||
func (fs Filesystem) SetBucketMetadata(bucket string, metadata map[string]string) *probe.Error {
|
func (fs Filesystem) SetBucketMetadata(bucket string, metadata map[string]string) *probe.Error {
|
||||||
fs.lock.Lock()
|
fs.lock.Lock()
|
||||||
defer fs.lock.Unlock()
|
defer fs.lock.Unlock()
|
||||||
if !IsValidBucket(bucket) {
|
if !IsValidBucketName(bucket) {
|
||||||
return probe.NewError(BucketNameInvalid{Bucket: bucket})
|
return probe.NewError(BucketNameInvalid{Bucket: bucket})
|
||||||
}
|
}
|
||||||
acl := metadata["acl"]
|
acl := metadata["acl"]
|
||||||
|
@ -56,7 +56,7 @@ func (fs Filesystem) isValidUploadID(object, uploadID string) bool {
|
|||||||
func (fs Filesystem) ListMultipartUploads(bucket string, resources BucketMultipartResourcesMetadata) (BucketMultipartResourcesMetadata, *probe.Error) {
|
func (fs Filesystem) ListMultipartUploads(bucket string, resources BucketMultipartResourcesMetadata) (BucketMultipartResourcesMetadata, *probe.Error) {
|
||||||
fs.lock.Lock()
|
fs.lock.Lock()
|
||||||
defer fs.lock.Unlock()
|
defer fs.lock.Unlock()
|
||||||
if !IsValidBucket(bucket) {
|
if !IsValidBucketName(bucket) {
|
||||||
return BucketMultipartResourcesMetadata{}, probe.NewError(BucketNameInvalid{Bucket: bucket})
|
return BucketMultipartResourcesMetadata{}, probe.NewError(BucketNameInvalid{Bucket: bucket})
|
||||||
}
|
}
|
||||||
bucketPath := filepath.Join(fs.path, bucket)
|
bucketPath := filepath.Join(fs.path, bucket)
|
||||||
@ -153,7 +153,7 @@ func (fs Filesystem) NewMultipartUpload(bucket, object string) (string, *probe.E
|
|||||||
return "", probe.NewError(RootPathFull{Path: fs.path})
|
return "", probe.NewError(RootPathFull{Path: fs.path})
|
||||||
}
|
}
|
||||||
|
|
||||||
if !IsValidBucket(bucket) {
|
if !IsValidBucketName(bucket) {
|
||||||
return "", probe.NewError(BucketNameInvalid{Bucket: bucket})
|
return "", probe.NewError(BucketNameInvalid{Bucket: bucket})
|
||||||
}
|
}
|
||||||
if !IsValidObjectName(object) {
|
if !IsValidObjectName(object) {
|
||||||
@ -234,7 +234,7 @@ func (fs Filesystem) CreateObjectPart(bucket, object, uploadID, expectedMD5Sum s
|
|||||||
return "", probe.NewError(errors.New("invalid part id, cannot be zero or less than zero"))
|
return "", probe.NewError(errors.New("invalid part id, cannot be zero or less than zero"))
|
||||||
}
|
}
|
||||||
// check bucket name valid
|
// check bucket name valid
|
||||||
if !IsValidBucket(bucket) {
|
if !IsValidBucketName(bucket) {
|
||||||
return "", probe.NewError(BucketNameInvalid{Bucket: bucket})
|
return "", probe.NewError(BucketNameInvalid{Bucket: bucket})
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -344,7 +344,7 @@ func (fs Filesystem) CompleteMultipartUpload(bucket, object, uploadID string, da
|
|||||||
defer fs.lock.Unlock()
|
defer fs.lock.Unlock()
|
||||||
|
|
||||||
// check bucket name valid
|
// check bucket name valid
|
||||||
if !IsValidBucket(bucket) {
|
if !IsValidBucketName(bucket) {
|
||||||
return ObjectMetadata{}, probe.NewError(BucketNameInvalid{Bucket: bucket})
|
return ObjectMetadata{}, probe.NewError(BucketNameInvalid{Bucket: bucket})
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -446,7 +446,7 @@ func (fs Filesystem) ListObjectParts(bucket, object string, resources ObjectReso
|
|||||||
defer fs.lock.Unlock()
|
defer fs.lock.Unlock()
|
||||||
|
|
||||||
// check bucket name valid
|
// check bucket name valid
|
||||||
if !IsValidBucket(bucket) {
|
if !IsValidBucketName(bucket) {
|
||||||
return ObjectResourcesMetadata{}, probe.NewError(BucketNameInvalid{Bucket: bucket})
|
return ObjectResourcesMetadata{}, probe.NewError(BucketNameInvalid{Bucket: bucket})
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -515,7 +515,7 @@ func (fs Filesystem) AbortMultipartUpload(bucket, object, uploadID string) *prob
|
|||||||
defer fs.lock.Unlock()
|
defer fs.lock.Unlock()
|
||||||
|
|
||||||
// check bucket name valid
|
// check bucket name valid
|
||||||
if !IsValidBucket(bucket) {
|
if !IsValidBucketName(bucket) {
|
||||||
return probe.NewError(BucketNameInvalid{Bucket: bucket})
|
return probe.NewError(BucketNameInvalid{Bucket: bucket})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -43,7 +43,7 @@ func (fs Filesystem) GetObject(w io.Writer, bucket, object string, start, length
|
|||||||
defer fs.lock.Unlock()
|
defer fs.lock.Unlock()
|
||||||
|
|
||||||
// validate bucket
|
// validate bucket
|
||||||
if !IsValidBucket(bucket) {
|
if !IsValidBucketName(bucket) {
|
||||||
return 0, probe.NewError(BucketNameInvalid{Bucket: bucket})
|
return 0, probe.NewError(BucketNameInvalid{Bucket: bucket})
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -96,7 +96,7 @@ func (fs Filesystem) GetObjectMetadata(bucket, object string) (ObjectMetadata, *
|
|||||||
fs.lock.Lock()
|
fs.lock.Lock()
|
||||||
defer fs.lock.Unlock()
|
defer fs.lock.Unlock()
|
||||||
|
|
||||||
if !IsValidBucket(bucket) {
|
if !IsValidBucketName(bucket) {
|
||||||
return ObjectMetadata{}, probe.NewError(BucketNameInvalid{Bucket: bucket})
|
return ObjectMetadata{}, probe.NewError(BucketNameInvalid{Bucket: bucket})
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -182,7 +182,7 @@ func (fs Filesystem) CreateObject(bucket, object, expectedMD5Sum string, size in
|
|||||||
}
|
}
|
||||||
|
|
||||||
// check bucket name valid
|
// check bucket name valid
|
||||||
if !IsValidBucket(bucket) {
|
if !IsValidBucketName(bucket) {
|
||||||
return ObjectMetadata{}, probe.NewError(BucketNameInvalid{Bucket: bucket})
|
return ObjectMetadata{}, probe.NewError(BucketNameInvalid{Bucket: bucket})
|
||||||
}
|
}
|
||||||
// check bucket exists
|
// check bucket exists
|
||||||
@ -304,7 +304,7 @@ func (fs Filesystem) DeleteObject(bucket, object string) *probe.Error {
|
|||||||
defer fs.lock.Unlock()
|
defer fs.lock.Unlock()
|
||||||
|
|
||||||
// check bucket name valid
|
// check bucket name valid
|
||||||
if !IsValidBucket(bucket) {
|
if !IsValidBucketName(bucket) {
|
||||||
return probe.NewError(BucketNameInvalid{Bucket: bucket})
|
return probe.NewError(BucketNameInvalid{Bucket: bucket})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user