浏览代码

HUE-4601 [fb] Creating a bucket with a not allowed name on S3 will HTTP 500

Jenny Kim 9 年之前
父节点
当前提交
059f4ae
共有 1 个文件被更改,包括 7 次插入3 次删除
  1. 7 3
      desktop/libs/aws/src/aws/s3/s3fs.py

+ 7 - 3
desktop/libs/aws/src/aws/s3/s3fs.py

@@ -16,13 +16,13 @@
 
 
 from __future__ import absolute_import
 from __future__ import absolute_import
 
 
-import sys
-
 import errno
 import errno
 import itertools
 import itertools
 import logging
 import logging
 import os
 import os
 import posixpath
 import posixpath
+import re
+import sys
 
 
 from boto.exception import S3ResponseError
 from boto.exception import S3ResponseError
 from boto.s3.key import Key
 from boto.s3.key import Key
@@ -37,6 +37,8 @@ from aws.s3.s3stat import S3Stat
 
 
 DEFAULT_READ_SIZE = 1024 * 1024  # 1MB
 DEFAULT_READ_SIZE = 1024 * 1024  # 1MB
 
 
+BUCKET_NAME_PATTERN = re.compile("^((?:(?:[a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*(?:[A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9]))$")
+
 LOG = logging.getLogger(__name__)
 LOG = logging.getLogger(__name__)
 
 
 
 
@@ -73,7 +75,7 @@ class S3FileSystem(object):
         bucket = self._s3_connection.create_bucket(name)
         bucket = self._s3_connection.create_bucket(name)
         self._bucket_cache[name] = bucket
         self._bucket_cache[name] = bucket
       else:
       else:
-        raise e
+        raise S3FileSystemException(e.message)
     return bucket
     return bucket
 
 
   def _delete_bucket(self, name):
   def _delete_bucket(self, name):
@@ -276,6 +278,8 @@ class S3FileSystem(object):
     Actually it creates an empty object: s3://[bucket]/[path]/
     Actually it creates an empty object: s3://[bucket]/[path]/
     """
     """
     bucket_name, key_name = s3.parse_uri(path)[:2]
     bucket_name, key_name = s3.parse_uri(path)[:2]
+    if not BUCKET_NAME_PATTERN.match(bucket_name):
+      raise S3FileSystemException(_('Invalid bucket name: %s') % bucket_name)
     self._get_or_create_bucket(bucket_name)
     self._get_or_create_bucket(bucket_name)
     stats = self._stats(path)
     stats = self._stats(path)
     if stats:
     if stats: