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@xxxxxxx>
Index: xen-unstable.hg/tools/python/xen/xend/server/blkif.py
===================================================================
--- xen-unstable.hg.orig/tools/python/xen/xend/server/blkif.py
+++ xen-unstable.hg/tools/python/xen/xend/server/blkif.py
@@ -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')
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|