Sanitize xenstore keys for metadata injection

Xenstore only allows certain characters in key names.  Change disallowed
characters as well as '/' to '_'.

Fixes bug 1029773

Change-Id: I04055bfbe662f3f3e9d90336d03670aa5468e780
This commit is contained in:
Chris Behrens
2012-07-27 07:04:58 +00:00
parent c9e424c048
commit 35ab6edd00

View File

@@ -2256,7 +2256,10 @@ class XenAPIInjectMetadataTestCase(stubs.XenAPITestBase):
# to xenstore
instance = dict(metadata=[FakeMetaItem("a", 1),
FakeMetaItem("b", 2),
FakeMetaItem("c", 3)],
FakeMetaItem("c", 3),
# Check xenstore key sanitizing
FakeMetaItem("hi.there", 4),
FakeMetaItem("hi!t.e/e", 5)],
system_metadata=[FakeMetaItem("sys_a", 1),
FakeMetaItem("sys_b", 2),
FakeMetaItem("sys_c", 3)])
@@ -2267,12 +2270,15 @@ class XenAPIInjectMetadataTestCase(stubs.XenAPITestBase):
'vm-data/user-metadata/a': '1',
'vm-data/user-metadata/b': '2',
'vm-data/user-metadata/c': '3',
'vm-data/user-metadata/hi_there': '4',
'vm-data/user-metadata/hi_t_e_e': '5',
},
'ephem': {},
})
def test_change_instance_metadata_add(self):
diff = dict(d=['+', 4])
# Test XenStore key sanitizing here, too.
diff = {'test.key': ['+', 4]}
self.xenstore = {
'persist': {
'vm-data/user-metadata/a': '1',
@@ -2293,13 +2299,13 @@ class XenAPIInjectMetadataTestCase(stubs.XenAPITestBase):
'vm-data/user-metadata/a': '1',
'vm-data/user-metadata/b': '2',
'vm-data/user-metadata/c': '3',
'vm-data/user-metadata/d': '4',
'vm-data/user-metadata/test_key': '4',
},
'ephem': {
'vm-data/user-metadata/a': '1',
'vm-data/user-metadata/b': '2',
'vm-data/user-metadata/c': '3',
'vm-data/user-metadata/d': '4',
'vm-data/user-metadata/test_key': '4',
},
})