File reenable-block-protocols.patch of Package xen

Index: xen-3.3.1-testing/tools/python/xen/xend/server/blkif.py
===================================================================
--- xen-3.3.1-testing.orig/tools/python/xen/xend/server/blkif.py
+++ xen-3.3.1-testing/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')
openSUSE Build Service is sponsored by