mirror of
https://github.com/minio/minio.git
synced 2025-11-10 05:59:43 -05:00
all/windows: Be case in-sensitive about pattern matching. (#3682)
Resource strings and paths are case insensitive on windows deployments but if user happens to use upper case instead of lower case for certain configuration params like bucket policies and bucket notification config. We might not honor them which leads to a wrong behavior on windows. This is windows only behavior, for all other platforms case is still kept sensitive.
This commit is contained in:
@@ -22,6 +22,7 @@ import (
|
||||
"io"
|
||||
"path"
|
||||
"regexp"
|
||||
"runtime"
|
||||
"strings"
|
||||
"unicode/utf8"
|
||||
|
||||
@@ -91,10 +92,10 @@ func IsValidObjectName(object string) bool {
|
||||
if len(object) == 0 {
|
||||
return false
|
||||
}
|
||||
if strings.HasSuffix(object, slashSeparator) {
|
||||
if hasSuffix(object, slashSeparator) {
|
||||
return false
|
||||
}
|
||||
if strings.HasPrefix(object, slashSeparator) {
|
||||
if hasPrefix(object, slashSeparator) {
|
||||
return false
|
||||
}
|
||||
return IsValidObjectPrefix(object)
|
||||
@@ -159,6 +160,26 @@ func getCompleteMultipartMD5(parts []completePart) (string, error) {
|
||||
return s3MD5, nil
|
||||
}
|
||||
|
||||
// Prefix matcher string matches prefix in a platform specific way.
|
||||
// For example on windows since its case insensitive we are supposed
|
||||
// to do case insensitive checks.
|
||||
func hasPrefix(s string, prefix string) bool {
|
||||
if runtime.GOOS == "windows" {
|
||||
return strings.HasPrefix(strings.ToLower(s), strings.ToLower(prefix))
|
||||
}
|
||||
return strings.HasPrefix(s, prefix)
|
||||
}
|
||||
|
||||
// Suffix matcher string matches suffix in a platform specific way.
|
||||
// For example on windows since its case insensitive we are supposed
|
||||
// to do case insensitive checks.
|
||||
func hasSuffix(s string, suffix string) bool {
|
||||
if runtime.GOOS == "windows" {
|
||||
return strings.HasSuffix(strings.ToLower(s), strings.ToLower(suffix))
|
||||
}
|
||||
return strings.HasSuffix(s, suffix)
|
||||
}
|
||||
|
||||
// byBucketName is a collection satisfying sort.Interface.
|
||||
type byBucketName []BucketInfo
|
||||
|
||||
|
||||
Reference in New Issue
Block a user