From mboxrd@z Thu Jan 1 00:00:00 1970 From: Kevin Wolf Subject: [PATCH] xend: Fix block device type check Date: Thu, 29 Jan 2009 14:01:12 +0100 Message-ID: <4981A898.2020700@suse.de> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------070204010306030508070800" Return-path: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: "xen-devel@lists.xensource.com" List-Id: xen-devel@lists.xenproject.org This is a multi-part message in MIME format. --------------070204010306030508070800 Content-Type: text/plain; charset=ISO-8859-15 Content-Transfer-Encoding: 7bit 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 --------------070204010306030508070800 Content-Type: text/x-patch; name="reenable-block-protocols.patch" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="reenable-block-protocols.patch" 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') --------------070204010306030508070800 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel --------------070204010306030508070800--