summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--glance_store/_drivers/swift/utils.py28
-rw-r--r--glance_store/tests/etc/glance-swift.conf5
-rw-r--r--glance_store/tests/unit/test_swift_store_utils.py34
3 files changed, 65 insertions, 2 deletions
diff --git a/glance_store/_drivers/swift/utils.py b/glance_store/_drivers/swift/utils.py
index bbd8a4c..4a1d8be 100644
--- a/glance_store/_drivers/swift/utils.py
+++ b/glance_store/_drivers/swift/utils.py
@@ -105,9 +105,33 @@ _config_defaults = {'user_domain_id': 'default',
'project_domain_name': 'default'}
if sys.version_info >= (3, 2):
- CONFIG = configparser.ConfigParser(defaults=_config_defaults)
+ parser_class = configparser.ConfigParser
else:
- CONFIG = configparser.SafeConfigParser(defaults=_config_defaults)
+ parser_class = configparser.SafeConfigParser
+
+
+class SwiftConfigParser(parser_class):
+
+ def get(self, *args, **kwargs):
+ value = super(parser_class, self).get(*args, **kwargs)
+ return self._process_quotes(value)
+
+ @staticmethod
+ def _process_quotes(value):
+ if value:
+ if value[0] in "\"'":
+ if len(value) == 1 or value[-1] != value[0]:
+ raise ValueError('Non-closed quote: %s' %
+ value)
+ value = value[1:-1]
+ return value
+
+
+if sys.version_info >= (3,):
+ CONFIG = SwiftConfigParser(defaults=_config_defaults)
+else:
+ CONFIG = parser_class(defaults=_config_defaults)
+
LOG = logging.getLogger(__name__)
diff --git a/glance_store/tests/etc/glance-swift.conf b/glance_store/tests/etc/glance-swift.conf
index c5af3dd..916d676 100644
--- a/glance_store/tests/etc/glance-swift.conf
+++ b/glance_store/tests/etc/glance-swift.conf
@@ -11,6 +11,11 @@ project_domain_id = default
auth_version = 3
auth_address = http://example.com
+[ref3]
+user = "user3"
+key = "key3"
+auth_address = "http://example.com"
+
[store_2]
user = tenant:user1
key = key1
diff --git a/glance_store/tests/unit/test_swift_store_utils.py b/glance_store/tests/unit/test_swift_store_utils.py
index 6651a74..94079ae 100644
--- a/glance_store/tests/unit/test_swift_store_utils.py
+++ b/glance_store/tests/unit/test_swift_store_utils.py
@@ -85,3 +85,37 @@ class TestSwiftParams(base.StoreBaseTest):
self.assertEqual('http://example.com',
swift_params['ref2']['auth_address']
)
+
+ def test_swift_store_config_validates_quotes_removal(self):
+ swift_params = sutils.SwiftParams(self.conf).params
+ self.assertEqual('user3',
+ swift_params['ref3']['user']
+ )
+ self.assertEqual('key3',
+ swift_params['ref3']['key']
+ )
+ self.assertEqual('http://example.com',
+ swift_params['ref3']['auth_address']
+ )
+
+
+class TestSwiftConfigParser(base.StoreBaseTest):
+
+ def setUp(self):
+ super(TestSwiftConfigParser, self).setUp()
+ self.method = sutils.SwiftConfigParser._process_quotes
+
+ def test_quotes_processor(self):
+ self.assertEqual('user', self.method('user'))
+ self.assertEqual('user', self.method('"user"'))
+ self.assertEqual("user", self.method("'user'"))
+ self.assertEqual("user'", self.method("user'"))
+ self.assertEqual('user"', self.method('user"'))
+
+ def test_quotes_processor_negative(self):
+ negative_values = [
+ '\'user"', '"user\'', '\'user', '"user\'',
+ "'user", '"user', '"', "'",
+ ]
+ for value in negative_values:
+ self.assertRaises(ValueError, self.method, value)