xend: Fix block device type check

Since changeset 17617 the block device protocols are checked to be
either file or phy. This has later been fixed to also include
tap. This is still not a correct check as there can be arbitrary
additional protocols. Before this check was added you could have a
block-xyz hotplug script and xyz would work as a protocol, now it is
refused. An example for this mechanism is the block-nbd script which
is included in the tree.

This patch changes the check to allow file, phy, tap and all protocol
names for which a block-$protocol hotplug script exists. This should
fix the last regressions introduced by the check.

Signed-off-by: Kevin Wolf <kwolf@suse.de>
This commit is contained in:
Keir Fraser committed 2009-01-29 16:39:56 +00:00
1 parent aab43dddfe
commit 597edba986
1 file changed
+10 -4
+10 -4
View File
@@ -18,6 +18,7 @@
import re
import string
import os
from xen.util import blkif
import xen.util.xsm.xsm as security
@@ -35,6 +36,13 @@ class BlkifController(DevController):
"""
DevController.__init__(self, vm)
def _isValidProtocol(self, protocol):
if protocol in ('phy', 'file', 'tap'):
return True
return os.access('/etc/xen/scripts/block-%s' % protocol, os.X_OK)
def getDeviceDetails(self, config):
"""@see DevController.getDeviceDetails"""
uname = config.get('uname', '')
@@ -56,10 +64,8 @@ class BlkifController(DevController):
else:
try:
(typ, params) = string.split(uname, ':', 1)
if typ not in ('phy', 'file', 'tap'):
raise VmError(
'Block device must have "phy", "file" or "tap" '
'specified to type')
if not self._isValidProtocol(typ):
raise VmError('Block device type "%s" is invalid.' % typ)
except ValueError:
raise VmError(
'Block device must have physical details specified')
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.