summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcegger <cegger@pkgsrc.org>2008-10-08 19:13:41 +0000
committercegger <cegger@pkgsrc.org>2008-10-08 19:13:41 +0000
commitad9a396121f2867b20da11da92bf8121c38c8759 (patch)
tree9c3a062ece3003ff3c6aeb894c7d0a1ba591e48b
parent894cf2cebca528a7b4857aa5593d7e2df9d22d3a (diff)
downloadpkgsrc-ad9a396121f2867b20da11da92bf8121c38c8759.tar.gz
Apply changeset 18434 from upstream xen-3.3-testing tree.
This fixes security issue http://secunia.com/advisories/32064/
-rw-r--r--sysutils/xentools33/Makefile4
-rw-r--r--sysutils/xentools33/distinfo6
-rw-r--r--sysutils/xentools33/patches/patch-ga111
-rw-r--r--sysutils/xentools33/patches/patch-gb13
-rw-r--r--sysutils/xentools33/patches/patch-gc152
-rw-r--r--sysutils/xentools33/patches/patch-gd60
6 files changed, 343 insertions, 3 deletions
diff --git a/sysutils/xentools33/Makefile b/sysutils/xentools33/Makefile
index bdba4bb59e2..23d72062f4e 100644
--- a/sysutils/xentools33/Makefile
+++ b/sysutils/xentools33/Makefile
@@ -1,10 +1,10 @@
-# $NetBSD: Makefile,v 1.9 2008/09/30 15:08:34 joerg Exp $
+# $NetBSD: Makefile,v 1.10 2008/10/08 19:13:41 cegger Exp $
#
VERSION= 3.3.0
DISTNAME= xen-${VERSION}
PKGNAME= xentools33-${VERSION}
-PKGREVISION= 1
+PKGREVISION= 2
CATEGORIES= sysutils
MASTER_SITES= http://bits.xensource.com/oss-xen/release/${VERSION}/
EXTRACT_SUFX= .tar.gz
diff --git a/sysutils/xentools33/distinfo b/sysutils/xentools33/distinfo
index 221c285699a..6b6b52a91b5 100644
--- a/sysutils/xentools33/distinfo
+++ b/sysutils/xentools33/distinfo
@@ -1,4 +1,4 @@
-$NetBSD: distinfo,v 1.12 2008/09/30 15:08:34 joerg Exp $
+$NetBSD: distinfo,v 1.13 2008/10/08 19:13:41 cegger Exp $
SHA1 (xen-3.3.0.tar.gz) = b6365864eeb5125e0f66a056c4c72816e1789358
RMD160 (xen-3.3.0.tar.gz) = c98c08617e302ef4004d17cb0ba161d0ed7af59c
@@ -49,3 +49,7 @@ SHA1 (patch-fb) = 22a07628566b43aa786c410927d29a283e8cf141
SHA1 (patch-fc) = 37c9b0897182de93a01f9620ef6346ef68157770
SHA1 (patch-fd) = cb4741bf33050d72cfbcd2eff4a8632d976de643
SHA1 (patch-fe) = 85d42672766fe8ce2dc7f745938722710c6ee5a3
+SHA1 (patch-ga) = c7a32f0feefd9b00993e64e406ad2914e6737fb6
+SHA1 (patch-gb) = 3018ec50cdfcc73effbd53b19387bbed9ce46f9c
+SHA1 (patch-gc) = 26a750ca14bcaa33b3f63c16104d2acfae764c96
+SHA1 (patch-gd) = 78e9bcba7dbd2dbd520c015947240b7e514abf8c
diff --git a/sysutils/xentools33/patches/patch-ga b/sysutils/xentools33/patches/patch-ga
new file mode 100644
index 00000000000..f56287c8730
--- /dev/null
+++ b/sysutils/xentools33/patches/patch-ga
@@ -0,0 +1,111 @@
+$NetBSD: patch-ga,v 1.1 2008/10/08 19:13:41 cegger Exp $
+
+--- python/xen/xend/XendDomainInfo.py.orig 2008-08-22 09:49:08.000000000 +0000
++++ python/xen/xend/XendDomainInfo.py
+@@ -455,8 +455,8 @@ class XendDomainInfo:
+ try:
+ self._constructDomain()
+ self._storeVmDetails()
+- self._createDevices()
+ self._createChannels()
++ self._createDevices()
+ self._storeDomDetails()
+ self._endRestore()
+ except:
+@@ -1232,31 +1232,6 @@ class XendDomainInfo:
+ def permissionsVm(self, *args):
+ return xstransact.SetPermissions(self.vmpath, *args)
+
+-
+- def _readVmTxn(self, transaction, *args):
+- paths = map(lambda x: self.vmpath + "/" + x, args)
+- return transaction.read(*paths)
+-
+- def _writeVmTxn(self, transaction, *args):
+- paths = map(lambda x: self.vmpath + "/" + x, args)
+- return transaction.write(*paths)
+-
+- def _removeVmTxn(self, transaction, *args):
+- paths = map(lambda x: self.vmpath + "/" + x, args)
+- return transaction.remove(*paths)
+-
+- def _gatherVmTxn(self, transaction, *args):
+- paths = map(lambda x: self.vmpath + "/" + x, args)
+- return transaction.gather(paths)
+-
+- def storeVmTxn(self, transaction, *args):
+- paths = map(lambda x: self.vmpath + "/" + x, args)
+- return transaction.store(*paths)
+-
+- def permissionsVmTxn(self, transaction, *args):
+- paths = map(lambda x: self.vmpath + "/" + x, args)
+- return transaction.set_permissions(*paths)
+-
+ #
+ # Function to update xenstore /dom/*
+ #
+@@ -1304,8 +1279,11 @@ class XendDomainInfo:
+ def _recreateDomFunc(self, t):
+ t.remove()
+ t.mkdir()
+- t.set_permissions({'dom' : self.domid})
++ t.set_permissions({'dom' : self.domid, 'read' : True})
+ t.write('vm', self.vmpath)
++ for i in [ 'device', 'control', 'error' ]:
++ t.mkdir(i)
++ t.set_permissions(i, {'dom' : self.domid})
+
+ def _storeDomDetails(self):
+ to_store = {
+@@ -2390,11 +2368,11 @@ class XendDomainInfo:
+
+ paths = self._prepare_phantom_paths()
+
+- self._cleanupVm()
+ if self.dompath is not None:
+ self.destroyDomain()
+
+ self._cleanup_phantom_devs(paths)
++ self._cleanupVm()
+
+ if "transient" in self.info["other_config"] \
+ and bool(self.info["other_config"]["transient"]):
+@@ -2731,7 +2709,6 @@ class XendDomainInfo:
+ self._writeVm(to_store)
+ self._setVmPermissions()
+
+-
+ def _setVmPermissions(self):
+ """Allow the guest domain to read its UUID. We don't allow it to
+ access any other entry, for security."""
+@@ -2750,7 +2727,7 @@ class XendDomainInfo:
+ log.warn("".join(traceback.format_stack()))
+ return self._stateGet()
+ else:
+- raise AttributeError()
++ raise AttributeError(name)
+
+ def __setattr__(self, name, value):
+ if name == "state":
+@@ -2864,12 +2841,6 @@ class XendDomainInfo:
+ ignore_devices = ignore_store,
+ legacy_only = legacy_only)
+
+- #if not ignore_store and self.dompath:
+- # vnc_port = self.readDom('console/vnc-port')
+- # if vnc_port is not None:
+- # result.append(['device',
+- # ['console', ['vnc-port', str(vnc_port)]]])
+-
+ return result
+
+ # Xen API
+@@ -3135,7 +3106,7 @@ class XendDomainInfo:
+ if not config.has_key('device'):
+ devid = config.get('id')
+ if devid != None:
+- config['device'] = 'eth%d' % devid
++ config['device'] = 'eth%s' % devid
+ else:
+ config['device'] = ''
+
diff --git a/sysutils/xentools33/patches/patch-gb b/sysutils/xentools33/patches/patch-gb
new file mode 100644
index 00000000000..d596bed2623
--- /dev/null
+++ b/sysutils/xentools33/patches/patch-gb
@@ -0,0 +1,13 @@
+$NetBSD: patch-gb,v 1.1 2008/10/08 19:13:41 cegger Exp $
+
+--- python/xen/xend/image.py.orig 2008-08-22 09:49:08.000000000 +0000
++++ python/xen/xend/image.py
+@@ -502,7 +502,7 @@ class ImageHandler:
+ if fifo_fd >= 0:
+ self._openSentinel(sentinel_path_fifo)
+ os.close(fifo_fd)
+- self.pid = self.vm.gatherDom(('image/device-model-pid', int))
++ self.pid = self.vm._gatherDom(('image/device-model-pid', int))
+ log.debug("%s device model rediscovered, pid %s sentinel fifo %s",
+ name, self.pid, sentinel_path_fifo)
+ self.sentinel_thread = thread.start_new_thread(self._sentinel_watch,())
diff --git a/sysutils/xentools33/patches/patch-gc b/sysutils/xentools33/patches/patch-gc
new file mode 100644
index 00000000000..ffdda19b1a9
--- /dev/null
+++ b/sysutils/xentools33/patches/patch-gc
@@ -0,0 +1,152 @@
+$NetBSD: patch-gc,v 1.1 2008/10/08 19:13:41 cegger Exp $
+
+--- python/xen/xend/server/DevController.py.orig 2008-08-22 09:49:08.000000000 +0000
++++ python/xen/xend/server/DevController.py
+@@ -126,8 +126,11 @@ class DevController:
+ log.debug(
+ 'DevController: still waiting to write device entries.')
+
++ devpath = self.devicePath(devid)
++
+ t.remove(frontpath)
+ t.remove(backpath)
++ t.remove(devpath)
+
+ t.mkdir(backpath)
+ t.set_permissions(backpath,
+@@ -142,6 +145,14 @@ class DevController:
+ t.write2(frontpath, front)
+ t.write2(backpath, back)
+
++ t.mkdir(devpath)
++ t.write2(devpath, {
++ 'backend' : backpath,
++ 'backend-id' : "%i" % backdom,
++ 'frontend' : frontpath,
++ 'frontend-id' : "%i" % self.vm.getDomid()
++ })
++
+ if t.commit():
+ return devid
+
+@@ -254,11 +265,12 @@ class DevController:
+
+ if force:
+ frontpath = self.frontendPath(dev)
+- backpath = xstransact.Read(frontpath, "backend")
++ backpath = self.readVm(devid, "backend")
+ if backpath:
+ xstransact.Remove(backpath)
+ xstransact.Remove(frontpath)
+
++ # xstransact.Remove(self.devicePath()) ?? Below is the same ?
+ self.vm._removeVm("device/%s/%d" % (self.deviceClass, dev))
+
+ def configurations(self, transaction = None):
+@@ -302,9 +314,10 @@ class DevController:
+ @return: dict
+ """
+ if transaction is None:
+- backdomid = xstransact.Read(self.frontendPath(devid), "backend-id")
++ backdomid = xstransact.Read(self.devicePath(devid), "backend-id")
+ else:
+- backdomid = transaction.read(self.frontendPath(devid) + "/backend-id")
++ backdomid = transaction.read(self.devicePath(devid) + "/backend-id")
++
+ if backdomid is None:
+ raise VmError("Device %s not connected" % devid)
+
+@@ -446,17 +459,22 @@ class DevController:
+ else:
+ raise VmError("Device %s not connected" % devid)
+
++ def readVm(self, devid, *args):
++ devpath = self.devicePath(devid)
++ if devpath:
++ return xstransact.Read(devpath, *args)
++ else:
++ raise VmError("Device config %s not found" % devid)
++
+ def readBackend(self, devid, *args):
+- frontpath = self.frontendPath(devid)
+- backpath = xstransact.Read(frontpath, "backend")
++ backpath = self.readVm(devid, "backend")
+ if backpath:
+ return xstransact.Read(backpath, *args)
+ else:
+ raise VmError("Device %s not connected" % devid)
+
+ def readBackendTxn(self, transaction, devid, *args):
+- frontpath = self.frontendPath(devid)
+- backpath = transaction.read(frontpath + "/backend")
++ backpath = self.readVm(devid, "backend")
+ if backpath:
+ paths = map(lambda x: backpath + "/" + x, args)
+ return transaction.read(*paths)
+@@ -474,7 +492,7 @@ class DevController:
+ """@return The IDs of each of the devices currently configured for
+ this instance's deviceClass.
+ """
+- fe = self.backendRoot()
++ fe = self.deviceRoot()
+
+ if transaction:
+ return map(lambda x: int(x.split('/')[-1]), transaction.list(fe))
+@@ -483,8 +501,7 @@ class DevController:
+
+
+ def writeBackend(self, devid, *args):
+- frontpath = self.frontendPath(devid)
+- backpath = xstransact.Read(frontpath, "backend")
++ backpath = self.readVm(devid, "backend")
+
+ if backpath:
+ xstransact.Write(backpath, *args)
+@@ -549,9 +566,8 @@ class DevController:
+
+
+ def waitForBackend(self, devid):
+-
+ frontpath = self.frontendPath(devid)
+- # lookup a phantom
++ # lookup a phantom
+ phantomPath = xstransact.Read(frontpath, 'phantom_vbd')
+ if phantomPath is not None:
+ log.debug("Waiting for %s's phantom %s.", devid, phantomPath)
+@@ -564,7 +580,7 @@ class DevController:
+ if result['status'] != 'Connected':
+ return (result['status'], err)
+
+- backpath = xstransact.Read(frontpath, "backend")
++ backpath = self.readVm(devid, "backend")
+
+
+ if backpath:
+@@ -629,17 +645,20 @@ class DevController:
+ def frontendRoot(self):
+ return "%s/device/%s" % (self.vm.getDomainPath(), self.deviceClass)
+
+- def backendRoot(self):
+- """Construct backend root path assuming backend is domain 0."""
+- from xen.xend.XendDomain import DOM0_ID
+- from xen.xend.xenstore.xsutil import GetDomainPath
+- return "%s/backend/%s/%s" % (GetDomainPath(DOM0_ID),
+- self.deviceClass, self.vm.getDomid())
+-
+ def frontendMiscPath(self):
+ return "%s/device-misc/%s" % (self.vm.getDomainPath(),
+ self.deviceClass)
+
++ def deviceRoot(self):
++ """Return the /vm/device. Because backendRoot assumes the
++ backend domain is 0"""
++ return "%s/device/%s" % (self.vm.vmpath, self.deviceClass)
++
++ def devicePath(self, devid):
++ """Return the /device entry of the given VM. We use it to store
++ backend/frontend locations"""
++ return "%s/device/%s/%s" % (self.vm.vmpath,
++ self.deviceClass, devid)
+
+ def hotplugStatusCallback(statusPath, ev, result):
+ log.debug("hotplugStatusCallback %s.", statusPath)
diff --git a/sysutils/xentools33/patches/patch-gd b/sysutils/xentools33/patches/patch-gd
new file mode 100644
index 00000000000..25196fcb94a
--- /dev/null
+++ b/sysutils/xentools33/patches/patch-gd
@@ -0,0 +1,60 @@
+$NetBSD: patch-gd,v 1.1 2008/10/08 19:13:41 cegger Exp $
+
+--- python/xen/xend/server/netif.py.orig 2008-08-22 09:49:08.000000000 +0000
++++ python/xen/xend/server/netif.py
+@@ -142,10 +142,6 @@ class NetifController(DevController):
+ if sec_lab:
+ back['security_label'] = sec_lab
+
+- config_path = "device/%s/%d/" % (self.deviceClass, devid)
+- for x in back:
+- self.vm._writeVm(config_path + x, back[x])
+-
+ back['handle'] = "%i" % devid
+ back['script'] = os.path.join(xoptions.network_script_dir, script)
+ if rate:
+@@ -189,40 +185,14 @@ class NetifController(DevController):
+
+ result = DevController.getDeviceConfiguration(self, devid, transaction)
+
+- config_path = "device/%s/%d/" % (self.deviceClass, devid)
+- devinfo = ()
+ for x in ( 'script', 'ip', 'bridge', 'mac',
+ 'type', 'vifname', 'rate', 'uuid', 'model', 'accel',
+ 'security_label'):
+ if transaction is None:
+- y = self.vm._readVm(config_path + x)
++ y = self.readBackend(devid, x)
+ else:
+- y = self.vm._readVmTxn(transaction, config_path + x)
+- devinfo += (y,)
+- (script, ip, bridge, mac, typ, vifname, rate, uuid,
+- model, accel, security_label) = devinfo
+-
+- if script:
+- result['script'] = script
+- if ip:
+- result['ip'] = ip
+- if bridge:
+- result['bridge'] = bridge
+- if mac:
+- result['mac'] = mac
+- if typ:
+- result['type'] = typ
+- if vifname:
+- result['vifname'] = vifname
+- if rate:
+- result['rate'] = rate
+- if uuid:
+- result['uuid'] = uuid
+- if model:
+- result['model'] = model
+- if accel:
+- result['accel'] = accel
+- if security_label:
+- result['security_label'] = security_label
++ y = self.readBackendTxn(transaction, devid, x)
++ if y:
++ result[x] = y
+
+ return result