diff --git a/.cvsignore b/.cvsignore
index 084dc3d..db70509 100644
--- a/.cvsignore
+++ b/.cvsignore
@@ -5,3 +5,4 @@ x86_64
 libvirt-*.tar.gz
 libvirt-0.6.0.tar.gz
 libvirt-0.6.1.tar.gz
+libvirt-0.6.2.tar.gz
diff --git a/libvirt-0.6.1-events-dispatch.patch b/libvirt-0.6.1-events-dispatch.patch
deleted file mode 100644
index 49da108..0000000
--- a/libvirt-0.6.1-events-dispatch.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-From: Daniel P. Berrange <berrange@redhat.com>
-Date: Mon, 16 Mar 2009 10:35:21 +0000 (+0000)
-Subject: Fix dispatch of FD events when one or more handles are marked deleted
-X-Git-Url: http://git.et.redhat.com/?p=libvirt.git;a=commitdiff_plain;h=10baf3deb8588f5902b6f2eb362fb408707e3d95
-
-Fix dispatch of FD events when one or more handles are marked deleted
----
-
-diff --git a/qemud/event.c b/qemud/event.c
-index c9ea563..0887008 100644
---- a/qemud/event.c
-+++ b/qemud/event.c
-@@ -409,25 +409,26 @@ static int virEventDispatchTimeouts(void) {
-  * Returns 0 upon success, -1 if an error occurred
-  */
- static int virEventDispatchHandles(int nfds, struct pollfd *fds) {
--    int i;
-+    int i, n;
- 
--    for (i = 0 ; i < nfds ; i++) {
-+    for (i = 0, n = 0 ; i < eventLoop.handlesCount && n < nfds ; i++) {
-         if (eventLoop.handles[i].deleted) {
-             EVENT_DEBUG("Skip deleted %d", eventLoop.handles[i].fd);
-             continue;
-         }
- 
--        if (fds[i].revents) {
-+        if (fds[n].revents) {
-             virEventHandleCallback cb = eventLoop.handles[i].cb;
-             void *opaque = eventLoop.handles[i].opaque;
--            int hEvents = virPollEventToEventHandleType(fds[i].revents);
--            EVENT_DEBUG("Dispatch %d %d %p", fds[i].fd,
--                        fds[i].revents, eventLoop.handles[i].opaque);
-+            int hEvents = virPollEventToEventHandleType(fds[n].revents);
-+            EVENT_DEBUG("Dispatch %d %d %p", fds[n].fd,
-+                        fds[n].revents, eventLoop.handles[i].opaque);
-             virEventUnlock();
-             (cb)(eventLoop.handles[i].watch,
--                 fds[i].fd, hEvents, opaque);
-+                 fds[n].fd, hEvents, opaque);
-             virEventLock();
-         }
-+        n++;
-     }
- 
-     return 0;
diff --git a/libvirt-0.6.1-fd-leaks.patch b/libvirt-0.6.1-fd-leaks.patch
deleted file mode 100644
index 07d3c4c..0000000
--- a/libvirt-0.6.1-fd-leaks.patch
+++ /dev/null
@@ -1,78 +0,0 @@
-From: Daniel Veillard <veillard@redhat.com>
-Date: Mon, 16 Mar 2009 10:41:37 +0000 (+0000)
-Subject: Avoid some potential FILE * leaks
-X-Git-Url: http://git.et.redhat.com/?p=libvirt.git;a=commitdiff_plain;h=39429bab2d55807698d9aed0112200ae532799b8
-
-Avoid some potential FILE * leaks
-* qemud/qemud.c src/cgroup.c src/uml_driver.c src/util.c: close
-  some potential FILE * leaks
-Daniel
----
-
-diff --git a/qemud/qemud.c b/qemud/qemud.c
-index fd315fc..4f04355 100644
---- a/qemud/qemud.c
-+++ b/qemud/qemud.c
-@@ -488,7 +488,7 @@ static int qemudWritePidFile(const char *pidFile) {
-     if (fprintf(fh, "%lu\n", (unsigned long)getpid()) < 0) {
-         VIR_ERROR(_("Failed to write to pid file '%s' : %s"),
-                   pidFile, virStrerror(errno, ebuf, sizeof ebuf));
--        close(fd);
-+        fclose(fh);
-         return -1;
-     }
- 
-diff --git a/src/cgroup.c b/src/cgroup.c
-index 5af44bd..d1d44a2 100644
---- a/src/cgroup.c
-+++ b/src/cgroup.c
-@@ -57,7 +57,7 @@ void virCgroupFree(virCgroupPtr *group)
- 
- static virCgroupPtr virCgroupGetMount(const char *controller)
- {
--    FILE *mounts;
-+    FILE *mounts = NULL;
-     struct mntent entry;
-     char buf[CGROUP_MAX_VAL];
-     virCgroupPtr root = NULL;
-@@ -90,6 +90,8 @@ static virCgroupPtr virCgroupGetMount(const char *controller)
- 
-     return root;
- err:
-+    if (mounts != NULL)
-+        fclose(mounts);
-     virCgroupFree(&root);
- 
-     return NULL;
-diff --git a/src/uml_driver.c b/src/uml_driver.c
-index 1dc7ccd..f7400f9 100644
---- a/src/uml_driver.c
-+++ b/src/uml_driver.c
-@@ -547,6 +547,7 @@ reopen:
- 
-     if (fscanf(file, "%d", &vm->pid) != 1) {
-         errno = EINVAL;
-+        fclose(file);
-         goto cleanup;
-     }
- 
-@@ -1040,6 +1041,7 @@ static int umlGetProcessInfo(unsigned long long *cpuTime, int pid) {
- 
-     if (fscanf(pidinfo, "%*d %*s %*c %*d %*d %*d %*d %*d %*u %*u %*u %*u %*u %llu %llu", &usertime, &systime) != 2) {
-         umlDebug("not enough arg");
-+        fclose(pidinfo);
-         return -1;
-     }
- 
-diff --git a/src/util.c b/src/util.c
-index 9b74757..66ad9a4 100644
---- a/src/util.c
-+++ b/src/util.c
-@@ -1058,6 +1058,7 @@ int virFileReadPid(const char *dir,
- 
-     if (fscanf(file, "%d", pid) != 1) {
-         rc = EINVAL;
-+        fclose(file);
-         goto cleanup;
-     }
- 
diff --git a/libvirt-0.6.1-fd-leaks2.patch b/libvirt-0.6.1-fd-leaks2.patch
deleted file mode 100644
index e2914aa..0000000
--- a/libvirt-0.6.1-fd-leaks2.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-Index: src/remote_internal.c
-===================================================================
-RCS file: /data/cvs/libxen/src/remote_internal.c,v
-retrieving revision 1.141
-diff -u -u -p -r1.141 remote_internal.c
---- src/remote_internal.c	3 Mar 2009 19:33:34 -0000	1.141
-+++ src/remote_internal.c	16 Mar 2009 16:57:17 -0000
-@@ -332,7 +332,7 @@ doRemoteOpen (virConnectPtr conn,
-               virConnectAuthPtr auth ATTRIBUTE_UNUSED,
-               int flags)
- {
--    int wakeupFD[2];
-+    int wakeupFD[2] = { -1, -1 };
-     char *transport_str = NULL;
- 
-     if (conn->uri) {
-@@ -885,6 +885,11 @@ doRemoteOpen (virConnectPtr conn,
- #endif
-     }
- 
-+    if (wakeupFD[0] >= 0) {
-+        close(wakeupFD[0]);
-+	close(wakeupFD[1]);
-+    }
-+
-     VIR_FREE(priv->hostname);
-     goto cleanup;
- }
-@@ -1350,6 +1355,11 @@ doRemoteClose (virConnectPtr conn, struc
-         } while (reap != -1 && reap != priv->pid);
-     }
- #endif
-+    if (priv->wakeupReadFD >= 0) {
-+        close(priv->wakeupReadFD);
-+	close(priv->wakeupSendFD);
-+    }
-+
- 
-     /* Free hostname copy */
-     free (priv->hostname);
diff --git a/libvirt-0.6.1-getvcpus-remote.patch b/libvirt-0.6.1-getvcpus-remote.patch
deleted file mode 100644
index 9b38d24..0000000
--- a/libvirt-0.6.1-getvcpus-remote.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-From: Daniel P. Berrange <berrange@redhat.com>
-Date: Mon, 16 Mar 2009 10:33:01 +0000 (+0000)
-Subject: Fix handling of cpumaps arg to virDomainGetVcpus RPC dispatcher
-X-Git-Url: http://git.et.redhat.com/?p=libvirt.git;a=commitdiff_plain;h=2d75d954f52a740470f85ceece4eb995d79968ca
-
-Fix handling of cpumaps arg to virDomainGetVcpus RPC dispatcher
----
-
-diff --git a/qemud/remote.c b/qemud/remote.c
-index 8eaa7d6..44a274a 100644
---- a/qemud/remote.c
-+++ b/qemud/remote.c
-@@ -1475,7 +1475,8 @@ remoteDispatchDomainGetVcpus (struct qemud_server *server ATTRIBUTE_UNUSED,
-     /* Allocate buffers to take the results. */
-     if (VIR_ALLOC_N(info, args->maxinfo) < 0)
-         goto oom;
--    if (VIR_ALLOC_N(cpumaps, args->maxinfo) < 0)
-+    if (args->maplen > 0 &&
-+        VIR_ALLOC_N(cpumaps, args->maxinfo * args->maplen) < 0)
-         goto oom;
- 
-     info_len = virDomainGetVcpus (dom,
diff --git a/libvirt-0.6.1-pool-mode-parse.patch b/libvirt-0.6.1-pool-mode-parse.patch
deleted file mode 100644
index 4c400b6..0000000
--- a/libvirt-0.6.1-pool-mode-parse.patch
+++ /dev/null
@@ -1,188 +0,0 @@
-From: Daniel Veillard <veillard@redhat.com>
-Date: Thu, 12 Mar 2009 20:15:32 +0000 (+0000)
-Subject: * src/storage_conf.c: fix storage pool mode parsing, and refactoring
-X-Git-Url: http://git.et.redhat.com/?p=libvirt.git;a=commitdiff_plain;h=bc962f5d7c6e2c2cfc233ea6deea95dba2b7c6eb
-
-* src/storage_conf.c: fix storage pool mode parsing, and refactoring
-  patch by Ryota Ozaki
-Daniel
----
-
-diff --git a/src/storage_conf.c b/src/storage_conf.c
-index 9c13e07..1c9a4e5 100644
---- a/src/storage_conf.c
-+++ b/src/storage_conf.c
-@@ -371,15 +371,33 @@ virStoragePoolDefParseAuthChap(virConnectPtr conn,
- 
- 
- static int
--virStoragePoolDefParsePerms(virConnectPtr conn,
--                            xmlXPathContextPtr ctxt,
--                            virStoragePermsPtr perms) {
-+virStorageDefParsePerms(virConnectPtr conn,
-+                        xmlXPathContextPtr ctxt,
-+                        virStoragePermsPtr perms,
-+                        const char *permxpath,
-+                        int defaultmode) {
-     char *mode;
-     long v;
-+    int ret = -1;
-+    xmlNodePtr relnode;
-+    xmlNodePtr node;
- 
--    mode = virXPathString(conn, "string(/pool/permissions/mode)", ctxt);
-+    node = virXPathNode(conn, permxpath, ctxt);
-+    if (node == NULL) {
-+        /* Set default values if there is not <permissions> element */
-+        perms->mode = defaultmode;
-+        perms->uid = getuid();
-+        perms->gid = getgid();
-+        perms->label = NULL;
-+        return 0;
-+    }
-+
-+    relnode = ctxt->node;
-+    ctxt->node = node;
-+
-+    mode = virXPathString(conn, "string(./mode)", ctxt);
-     if (!mode) {
--        perms->mode = 0700;
-+        perms->mode = defaultmode;
-     } else {
-         char *end = NULL;
-         perms->mode = strtol(mode, &end, 8);
-@@ -387,36 +405,39 @@ virStoragePoolDefParsePerms(virConnectPtr conn,
-         if (*end || perms->mode < 0 || perms->mode > 0777) {
-             virStorageReportError(conn, VIR_ERR_XML_ERROR,
-                                   "%s", _("malformed octal mode"));
--            return -1;
-+            goto error;
-         }
-     }
- 
--    if (virXPathNode(conn, "/pool/permissions/owner", ctxt) == NULL) {
-+    if (virXPathNode(conn, "./owner", ctxt) == NULL) {
-         perms->uid = getuid();
-     } else {
--        if (virXPathLong(conn, "number(/pool/permissions/owner)", ctxt, &v) < 0) {
-+        if (virXPathLong(conn, "number(./owner)", ctxt, &v) < 0) {
-             virStorageReportError(conn, VIR_ERR_XML_ERROR,
-                                   "%s", _("malformed owner element"));
--            return -1;
-+            goto error;
-         }
-         perms->uid = (int)v;
-     }
- 
--    if (virXPathNode(conn, "/pool/permissions/group", ctxt) == NULL) {
-+    if (virXPathNode(conn, "./group", ctxt) == NULL) {
-         perms->gid = getgid();
-     } else {
--        if (virXPathLong(conn, "number(/pool/permissions/group)", ctxt, &v) < 0) {
-+        if (virXPathLong(conn, "number(./group)", ctxt, &v) < 0) {
-             virStorageReportError(conn, VIR_ERR_XML_ERROR,
-                                   "%s", _("malformed group element"));
--            return -1;
-+            goto error;
-         }
-         perms->gid = (int)v;
-     }
- 
-     /* NB, we're ignoring missing labels here - they'll simply inherit */
--    perms->label = virXPathString(conn, "string(/pool/permissions/label)", ctxt);
-+    perms->label = virXPathString(conn, "string(./label)", ctxt);
- 
--    return 0;
-+    ret = 0;
-+error:
-+    ctxt->node = relnode;
-+    return ret;
- }
- 
- 
-@@ -579,7 +600,8 @@ virStoragePoolDefParseDoc(virConnectPtr conn,
-         goto cleanup;
-     }
- 
--    if (virStoragePoolDefParsePerms(conn, ctxt, &ret->target.perms) < 0)
-+    if (virStorageDefParsePerms(conn, ctxt, &ret->target.perms,
-+                                "/pool/target/permissions", 0700) < 0)
-         goto cleanup;
- 
-     return ret;
-@@ -801,55 +823,6 @@ virStoragePoolDefFormat(virConnectPtr conn,
- 
- 
- static int
--virStorageVolDefParsePerms(virConnectPtr conn,
--                           xmlXPathContextPtr ctxt,
--                           virStoragePermsPtr perms) {
--    char *mode;
--    long v;
--
--    mode = virXPathString(conn, "string(/volume/permissions/mode)", ctxt);
--    if (!mode) {
--        perms->mode = 0600;
--    } else {
--        char *end = NULL;
--        perms->mode = strtol(mode, &end, 8);
--        VIR_FREE(mode);
--        if (*end || perms->mode < 0 || perms->mode > 0777) {
--            virStorageReportError(conn, VIR_ERR_XML_ERROR,
--                                  "%s", _("malformed octal mode"));
--            return -1;
--        }
--    }
--
--    if (virXPathNode(conn, "/volume/permissions/owner", ctxt) == NULL) {
--        perms->uid = getuid();
--    } else {
--        if (virXPathLong(conn, "number(/volume/permissions/owner)", ctxt, &v) < 0) {
--            virStorageReportError(conn, VIR_ERR_XML_ERROR,
--                                  "%s", _("missing owner element"));
--            return -1;
--        }
--        perms->uid = (int)v;
--    }
--    if (virXPathNode(conn, "/volume/permissions/group", ctxt) == NULL) {
--        perms->gid = getgid();
--    } else {
--        if (virXPathLong(conn, "number(/volume/permissions/group)", ctxt, &v) < 0) {
--            virStorageReportError(conn, VIR_ERR_XML_ERROR,
--                                  "%s", _("missing group element"));
--            return -1;
--        }
--        perms->gid = (int)v;
--    }
--
--    /* NB, we're ignoring missing labels here - they'll simply inherit */
--    perms->label = virXPathString(conn, "string(/volume/permissions/label)", ctxt);
--
--    return 0;
--}
--
--
--static int
- virStorageSize(virConnectPtr conn,
-                const char *unit,
-                const char *val,
-@@ -997,7 +970,8 @@ virStorageVolDefParseDoc(virConnectPtr conn,
-         VIR_FREE(format);
-     }
- 
--    if (virStorageVolDefParsePerms(conn, ctxt, &ret->target.perms) < 0)
-+    if (virStorageDefParsePerms(conn, ctxt, &ret->target.perms,
-+                                "/volume/target/permissions", 0600) < 0)
-         goto cleanup;
- 
- 
-@@ -1019,7 +993,8 @@ virStorageVolDefParseDoc(virConnectPtr conn,
-         VIR_FREE(format);
-     }
- 
--    if (virStorageVolDefParsePerms(conn, ctxt, &ret->backingStore.perms) < 0)
-+    if (virStorageDefParsePerms(conn, ctxt, &ret->backingStore.perms,
-+                                "/volume/backingStore/permissions", 0600) < 0)
-         goto cleanup;
- 
-     return ret;
diff --git a/libvirt-0.6.1-storage-free.patch b/libvirt-0.6.1-storage-free.patch
deleted file mode 100644
index bfda133..0000000
--- a/libvirt-0.6.1-storage-free.patch
+++ /dev/null
@@ -1,20 +0,0 @@
-From: Daniel P. Berrange <berrange@redhat.com>
-Date: Mon, 16 Mar 2009 10:31:38 +0000 (+0000)
-Subject: Don't free storage volume in cleanup path, since it may still be referenced
-X-Git-Url: http://git.et.redhat.com/?p=libvirt.git;a=commitdiff_plain;h=d8f08ca049b6d3bc7a5124a3957e967539ad080d
-
-Don't free storage volume in cleanup path, since it may still be referenced
----
-
-diff --git a/src/storage_driver.c b/src/storage_driver.c
-index f1320c5..b261843 100644
---- a/src/storage_driver.c
-+++ b/src/storage_driver.c
-@@ -1296,7 +1296,6 @@ storageVolumeDelete(virStorageVolPtr obj,
-     ret = 0;
- 
- cleanup:
--    virStorageVolDefFree(vol);
-     if (pool)
-         virStoragePoolObjUnlock(pool);
-     return ret;
diff --git a/libvirt-0.6.1-svirt-shared-readonly.patch b/libvirt-0.6.1-svirt-shared-readonly.patch
deleted file mode 100644
index 2c7b2ba..0000000
--- a/libvirt-0.6.1-svirt-shared-readonly.patch
+++ /dev/null
@@ -1,143 +0,0 @@
-diff -rup libvirt-0.6.1.orig/src/qemu_driver.c libvirt-0.6.1.new/src/qemu_driver.c
---- libvirt-0.6.1.orig/src/qemu_driver.c	2009-03-17 11:57:04.000000000 +0000
-+++ libvirt-0.6.1.new/src/qemu_driver.c	2009-03-17 11:57:12.000000000 +0000
-@@ -3765,7 +3765,7 @@ static int qemudDomainAttachDevice(virDo
-                 goto cleanup;
-             }
-             if (driver->securityDriver)
--                driver->securityDriver->domainSetSecurityImageLabel(dom->conn, vm, dev);
-+                driver->securityDriver->domainSetSecurityImageLabel(dom->conn, vm, dev->data.disk);
-             break;
- 
-         default:
-@@ -3901,7 +3901,7 @@ static int qemudDomainDetachDevice(virDo
-          dev->data.disk->bus == VIR_DOMAIN_DISK_BUS_VIRTIO)) {
-         ret = qemudDomainDetachPciDiskDevice(dom->conn, vm, dev);
-         if (driver->securityDriver)
--            driver->securityDriver->domainRestoreSecurityImageLabel(dom->conn, vm, dev);
-+            driver->securityDriver->domainRestoreSecurityImageLabel(dom->conn, dev->data.disk);
-     }
-     else
-         qemudReportError(dom->conn, dom, NULL, VIR_ERR_NO_SUPPORT,
-diff -rup libvirt-0.6.1.orig/src/security.h libvirt-0.6.1.new/src/security.h
---- libvirt-0.6.1.orig/src/security.h	2009-03-03 16:40:46.000000000 +0000
-+++ libvirt-0.6.1.new/src/security.h	2009-03-17 11:57:12.000000000 +0000
-@@ -32,11 +32,10 @@ typedef virSecurityDriverStatus (*virSec
- typedef int (*virSecurityDriverOpen) (virConnectPtr conn,
-                                       virSecurityDriverPtr drv);
- typedef int (*virSecurityDomainRestoreImageLabel) (virConnectPtr conn,
--                                                   virDomainObjPtr vm,
--                                                   virDomainDeviceDefPtr dev);
-+                                                   virDomainDiskDefPtr disk);
- typedef int (*virSecurityDomainSetImageLabel) (virConnectPtr conn,
-                                                virDomainObjPtr vm,
--                                               virDomainDeviceDefPtr dev);
-+                                               virDomainDiskDefPtr disk);
- typedef int (*virSecurityDomainGenLabel) (virConnectPtr conn,
-                                           virDomainObjPtr sec);
- typedef int (*virSecurityDomainGetLabel) (virConnectPtr conn,
-diff -rup libvirt-0.6.1.orig/src/security_selinux.c libvirt-0.6.1.new/src/security_selinux.c
---- libvirt-0.6.1.orig/src/security_selinux.c	2009-03-03 16:40:46.000000000 +0000
-+++ libvirt-0.6.1.new/src/security_selinux.c	2009-03-17 11:57:12.000000000 +0000
-@@ -269,7 +269,7 @@ SELinuxGetSecurityLabel(virConnectPtr co
- }
- 
- static int
--SELinuxSetFilecon(virConnectPtr conn, char *path, char *tcon)
-+SELinuxSetFilecon(virConnectPtr conn, const char *path, char *tcon)
- {
-     char ebuf[1024];
- 
-@@ -288,28 +288,51 @@ SELinuxSetFilecon(virConnectPtr conn, ch
- 
- static int
- SELinuxRestoreSecurityImageLabel(virConnectPtr conn,
--                                 virDomainObjPtr vm,
--                                 virDomainDeviceDefPtr dev)
-+                                 virDomainDiskDefPtr disk)
- {
--    const virSecurityLabelDefPtr secdef = &vm->def->seclabel;
-+    struct stat buf;
-+    security_context_t fcon = NULL;
-+    int rc = -1;
-+    char *newpath = NULL;
-+    const char *path = disk->src;
- 
--    if (secdef->imagelabel) {
--        return SELinuxSetFilecon(conn, dev->data.disk->src, default_image_context);
-+    if (disk->readonly || disk->shared)
-+        return 0;
-+
-+    if (lstat(path, &buf) != 0)
-+        return -1;
-+
-+    if (S_ISLNK(buf.st_mode)) {
-+        if (VIR_ALLOC_N(newpath, buf.st_size + 1) < 0)
-+            return -1;
-+
-+        if (readlink(path, newpath, buf.st_size) < 0)
-+            goto err;
-+        path = newpath;
-+        if (stat(path, &buf) != 0)
-+            goto err;
-     }
--    return 0;
-+
-+    if (matchpathcon(path, buf.st_mode, &fcon) == 0)  {
-+        rc = SELinuxSetFilecon(conn, path, fcon);
-+    }
-+err:
-+    VIR_FREE(fcon);
-+    VIR_FREE(newpath);
-+    return rc;
- }
- 
- static int
- SELinuxSetSecurityImageLabel(virConnectPtr conn,
-                              virDomainObjPtr vm,
--                             virDomainDeviceDefPtr dev)
-+                             virDomainDiskDefPtr disk)
- 
- {
-     const virSecurityLabelDefPtr secdef = &vm->def->seclabel;
- 
--    if (secdef->imagelabel) {
--        return SELinuxSetFilecon(conn, dev->data.disk->src, secdef->imagelabel);
--    }
-+    if (secdef->imagelabel)
-+        return SELinuxSetFilecon(conn, disk->src, secdef->imagelabel);
-+
-     return 0;
- }
- 
-@@ -322,7 +345,7 @@ SELinuxRestoreSecurityLabel(virConnectPt
-     int rc = 0;
-     if (secdef->imagelabel) {
-         for (i = 0 ; i < vm->def->ndisks ; i++) {
--            if (SELinuxSetFilecon(conn, vm->def->disks[i]->src, default_image_context) < 0)
-+            if (SELinuxRestoreSecurityImageLabel(conn, vm->def->disks[i]) < 0)
-                 rc = -1;
-         }
-         VIR_FREE(secdef->model);
-@@ -368,16 +391,11 @@ SELinuxSetSecurityLabel(virConnectPtr co
- 
-     if (secdef->imagelabel) {
-         for (i = 0 ; i < vm->def->ndisks ; i++) {
--            if(setfilecon(vm->def->disks[i]->src, secdef->imagelabel) < 0) {
--                virSecurityReportError(conn, VIR_ERR_ERROR,
--                                       _("%s: unable to set security context "
--                                         "'\%s\' on %s: %s."), __func__,
--                                       secdef->imagelabel,
--                                       vm->def->disks[i]->src,
--                                       virStrerror(errno, ebuf, sizeof ebuf));
--                if (security_getenforce() == 1)
--                    return -1;
--            }
-+            if (vm->def->disks[i]->readonly ||
-+                vm->def->disks[i]->shared) continue;
-+
-+            if (SELinuxSetSecurityImageLabel(conn, vm, vm->def->disks[i]) < 0)
-+                return -1;
-         }
-     }
- 
diff --git a/libvirt-0.6.1-svirt-sound.patch b/libvirt-0.6.1-svirt-sound.patch
deleted file mode 100644
index d537b00..0000000
--- a/libvirt-0.6.1-svirt-sound.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-diff -rup libvirt-0.6.1.orig/src/qemu_conf.c libvirt-0.6.1.new/src/qemu_conf.c
---- libvirt-0.6.1.orig/src/qemu_conf.c	2009-03-17 11:57:04.000000000 +0000
-+++ libvirt-0.6.1.new/src/qemu_conf.c	2009-03-17 15:50:08.000000000 +0000
-@@ -757,6 +757,20 @@ int qemudBuildCommandLine(virConnectPtr 
-     char uuid[VIR_UUID_STRING_BUFLEN];
-     char domid[50];
-     char *pidfile;
-+    int skipSound = 0;
-+
-+    if (driver->securityDriver &&
-+        driver->securityDriver->name &&
-+        STREQ(driver->securityDriver->name, "selinux") &&
-+        getuid() == 0) {
-+        static int soundWarned = 0; 
-+        skipSound = 1;
-+        if (vm->def->nsounds &&
-+            !soundWarned) {
-+            soundWarned = 1;
-+            VIR_WARN0("Sound cards for VMs are disabled while SELinux security model is active");
-+        }
-+    }
- 
-     uname_normalize(&ut);
- 
-@@ -1364,7 +1378,8 @@ int qemudBuildCommandLine(virConnectPtr 
-     }
- 
-     /* Add sound hardware */
--    if (vm->def->nsounds) {
-+    if (vm->def->nsounds &&
-+        !skipSound) {
-         int size = 100;
-         char *modstr;
-         if (VIR_ALLOC_N(modstr, size+1) < 0)
-Only in libvirt-0.6.1.new/src: qemu_conf.c~
diff --git a/libvirt-0.6.1-vcpu-deadlock.patch b/libvirt-0.6.1-vcpu-deadlock.patch
deleted file mode 100644
index f9df448..0000000
--- a/libvirt-0.6.1-vcpu-deadlock.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-From: Daniel P. Berrange <berrange@redhat.com>
-Date: Mon, 16 Mar 2009 11:44:46 +0000 (+0000)
-Subject: Avoid deadlock setting vcpus in QEMU driver
-X-Git-Url: http://git.et.redhat.com/?p=libvirt.git;a=commitdiff_plain;h=4d7ecd146ce4de847256ae0887963719f214f62f
-
-Avoid deadlock setting vcpus in QEMU driver
----
-
-diff --git a/src/qemu_driver.c b/src/qemu_driver.c
-index dad7098..51442d6 100644
---- a/src/qemu_driver.c
-+++ b/src/qemu_driver.c
-@@ -2725,6 +2725,7 @@ static int qemudDomainSetVcpus(virDomainPtr dom, unsigned int nvcpus) {
-     virDomainObjPtr vm;
-     int max;
-     int ret = -1;
-+    const char *type;
- 
-     qemuDriverLock(driver);
-     vm = virDomainFindByUUID(&driver->domains, dom->uuid);
-@@ -2745,7 +2746,14 @@ static int qemudDomainSetVcpus(virDomainPtr dom, unsigned int nvcpus) {
-         goto cleanup;
-     }
- 
--    if ((max = qemudDomainGetMaxVcpus(dom)) < 0) {
-+    if (!(type = virDomainVirtTypeToString(vm->def->virtType))) {
-+        qemudReportError(dom->conn, dom, NULL, VIR_ERR_INTERNAL_ERROR,
-+                         _("unknown virt type in domain definition '%d'"),
-+                         vm->def->virtType);
-+        goto cleanup;
-+    }
-+
-+    if ((max = qemudGetMaxVCPUs(dom->conn, type)) < 0) {
-         qemudReportError(dom->conn, dom, NULL, VIR_ERR_INTERNAL_ERROR, "%s",
-                          _("could not determine max vcpus for the domain"));
-         goto cleanup;
diff --git a/libvirt-0.6.1-vnc-sasl-auth.patch b/libvirt-0.6.1-vnc-sasl-auth.patch
deleted file mode 100644
index 83203ad..0000000
--- a/libvirt-0.6.1-vnc-sasl-auth.patch
+++ /dev/null
@@ -1,277 +0,0 @@
-diff -r 961d4b1ca1d3 qemud/libvirtd_qemu.aug
---- a/qemud/libvirtd_qemu.aug	Wed Mar 04 13:17:44 2009 +0000
-+++ b/qemud/libvirtd_qemu.aug	Thu Mar 05 14:22:50 2009 +0000
-@@ -27,6 +27,8 @@ module Libvirtd_qemu =
-                  | str_entry "vnc_tls_x509_cert_dir"
-                  | bool_entry "vnc_tls_x509_verify"
-                  | str_entry "vnc_password"
-+                 | bool_entry "vnc_sasl"
-+                 | str_entry "vnc_sasl_dir"
- 
-    (* Each enty in the config is one of the following three ... *)
-    let entry = vnc_entry
-diff -r 961d4b1ca1d3 qemud/test_libvirtd_qemu.aug
---- a/qemud/test_libvirtd_qemu.aug	Wed Mar 04 13:17:44 2009 +0000
-+++ b/qemud/test_libvirtd_qemu.aug	Thu Mar 05 14:22:50 2009 +0000
-@@ -60,6 +60,25 @@ vnc_tls_x509_verify = 1
- # example here before you set this
- #
- vnc_password = \"XYZ12345\"
-+
-+
-+# Enable use of SASL encryption on the VNC server. This requires
-+# a VNC client which supports the SASL protocol extension.
-+# Examples include vinagre, virt-viewer and virt-manager
-+# itself. UltraVNC, RealVNC, TightVNC do not support this
-+#
-+# It is necessary to configure /etc/sasl2/qemu.conf to choose
-+# the desired SASL plugin (eg, GSSPI for Kerberos)
-+#
-+vnc_sasl = 1
-+
-+
-+# The default SASL configuration file is located in /etc/sasl2/
-+# When running libvirtd unprivileged, it may be desirable to
-+# override the configs in this location. Set this parameter to
-+# point to the directory, and create a qemu.conf in that location
-+#
-+vnc_sasl_dir = \"/some/directory/sasl2\"
- "
- 
-    test Libvirtd_qemu.lns get conf =
-@@ -123,3 +142,22 @@ vnc_password = \"XYZ12345\"
- { "#comment" = "example here before you set this" }
- { "#comment" = "" }
- { "vnc_password" = "XYZ12345" }
-+{ "#empty" }
-+{ "#empty" }
-+{ "#comment" = "Enable use of SASL encryption on the VNC server. This requires" }
-+{ "#comment" = "a VNC client which supports the SASL protocol extension." }
-+{ "#comment" = "Examples include vinagre, virt-viewer and virt-manager" }
-+{ "#comment" = "itself. UltraVNC, RealVNC, TightVNC do not support this" }
-+{ "#comment" = "" }
-+{ "#comment" = "It is necessary to configure /etc/sasl2/qemu.conf to choose" }
-+{ "#comment" = "the desired SASL plugin (eg, GSSPI for Kerberos)" }
-+{ "#comment" = "" }
-+{ "vnc_sasl" = "1" }
-+{ "#empty" }
-+{ "#empty" }
-+{ "#comment" = "The default SASL configuration file is located in /etc/sasl2/" }
-+{ "#comment" = "When running libvirtd unprivileged, it may be desirable to" }
-+{ "#comment" = "override the configs in this location. Set this parameter to" }
-+{ "#comment" = "point to the directory, and create a qemu.conf in that location" }
-+{ "#comment" = "" }
-+{ "vnc_sasl_dir" = "/some/directory/sasl2" }
-diff -r 961d4b1ca1d3 src/qemu.conf
---- a/src/qemu.conf	Wed Mar 04 13:17:44 2009 +0000
-+++ b/src/qemu.conf	Thu Mar 05 14:22:50 2009 +0000
-@@ -60,6 +60,27 @@
- # vnc_password = "XYZ12345"
- 
- 
-+# Enable use of SASL encryption on the VNC server. This requires
-+# a VNC client which supports the SASL protocol extension.
-+# Examples include vinagre, virt-viewer and virt-manager
-+# itself. UltraVNC, RealVNC, TightVNC do not support this
-+#
-+# It is necessary to configure /etc/sasl2/qemu.conf to choose
-+# the desired SASL plugin (eg, GSSPI for Kerberos)
-+#
-+# vnc_sasl = 1
-+
-+
-+# The default SASL configuration file is located in /etc/sasl2/
-+# When running libvirtd unprivileged, it may be desirable to
-+# override the configs in this location. Set this parameter to
-+# point to the directory, and create a qemu.conf in that location
-+#
-+# vnc_sasl_dir = "/some/directory/sasl2"
-+
-+
-+
-+
- # The default security driver is SELinux. If SELinux is disabled
- # on the host, then the security driver will automatically disable
- # itself. If you wish to disable QEMU SELinux security driver while
-diff -r 961d4b1ca1d3 src/qemu_conf.c
---- a/src/qemu_conf.c	Wed Mar 04 13:17:44 2009 +0000
-+++ b/src/qemu_conf.c	Thu Mar 05 14:22:50 2009 +0000
-@@ -161,6 +161,21 @@ int qemudLoadDriverConfig(struct qemud_d
-         }
-     }
- 
-+    p = virConfGetValue (conf, "vnc_sasl");
-+    CHECK_TYPE ("vnc_sasl", VIR_CONF_LONG);
-+    if (p) driver->vncSASL = p->l;
-+
-+    p = virConfGetValue (conf, "vnc_sasl_dir");
-+    CHECK_TYPE ("vnc_sasl_dir", VIR_CONF_STRING);
-+    if (p && p->str) {
-+        VIR_FREE(driver->vncSASLdir);
-+        if (!(driver->vncSASLdir = strdup(p->str))) {
-+            virReportOOMError(NULL);
-+            virConfFree(conf);
-+            return -1;
-+        }
-+    }
-+
-     virConfFree (conf);
-     return 0;
- }
-@@ -838,15 +853,20 @@ int qemudBuildCommandLine(virConnectPtr 
-             goto no_memory;                                             \
-     } while (0)
- 
-+#define ADD_ENV_PAIR(envname, val)                                      \
-+    do {                                                                \
-+        char *envval;                                                   \
-+        ADD_ENV_SPACE;                                                  \
-+        if (virAsprintf(&envval, "%s=%s", envname, val) < 0)            \
-+            goto no_memory;                                             \
-+        qenv[qenvc++] = envval;                                         \
-+    } while (0)
-+
- #define ADD_ENV_COPY(envname)                                           \
-     do {                                                                \
-         char *val = getenv(envname);                                    \
--        char *envval;                                                   \
--        ADD_ENV_SPACE;                                                  \
-         if (val != NULL) {                                              \
--            if (virAsprintf(&envval, "%s=%s", envname, val) < 0)        \
--                goto no_memory;                                         \
--            qenv[qenvc++] = envval;                                     \
-+            ADD_ENV_PAIR(envname, val);                                 \
-         }                                                               \
-     } while (0)
- 
-@@ -1295,6 +1315,15 @@ int qemudBuildCommandLine(virConnectPtr 
-                                       driver->vncTLSx509certdir);
-                 }
-             }
-+
-+            if (driver->vncSASL) {
-+                virBufferAddLit(&opt, ",sasl");
-+
-+                if (driver->vncSASLdir)
-+                    ADD_ENV_PAIR("SASL_CONF_DIR", driver->vncSASLdir);
-+
-+                /* TODO: Support ACLs later */
-+            }
-         } else {
-             virBufferVSprintf(&opt, "%d",
-                               vm->def->graphics->data.vnc.port - 5900);
-diff -r 961d4b1ca1d3 src/qemu_conf.h
---- a/src/qemu_conf.h	Wed Mar 04 13:17:44 2009 +0000
-+++ b/src/qemu_conf.h	Thu Mar 05 14:22:50 2009 +0000
-@@ -73,9 +73,11 @@ struct qemud_driver {
-     char *stateDir;
-     unsigned int vncTLS : 1;
-     unsigned int vncTLSx509verify : 1;
-+    unsigned int vncSASL : 1;
-     char *vncTLSx509certdir;
-     char *vncListen;
-     char *vncPassword;
-+    char *vncSASLdir;
- 
-     virCapsPtr caps;
- 
-diff -r 961d4b1ca1d3 src/qemu_driver.c
---- a/src/qemu_driver.c	Wed Mar 04 13:17:44 2009 +0000
-+++ b/src/qemu_driver.c	Thu Mar 05 14:22:50 2009 +0000
-@@ -620,6 +620,7 @@ qemudShutdown(void) {
-     VIR_FREE(qemu_driver->vncTLSx509certdir);
-     VIR_FREE(qemu_driver->vncListen);
-     VIR_FREE(qemu_driver->vncPassword);
-+    VIR_FREE(qemu_driver->vncSASLdir);
- 
-     /* Free domain callback list */
-     virDomainEventCallbackListFree(qemu_driver->domainEventCallbacks);
-diff -r 961d4b1ca1d3 tests/qemuxml2argvdata/qemuxml2argv-graphics-vnc-sasl.args
---- /dev/null	Thu Jan 01 00:00:00 1970 +0000
-+++ b/tests/qemuxml2argvdata/qemuxml2argv-graphics-vnc-sasl.args	Thu Mar 05 14:22:50 2009 +0000
-@@ -0,0 +1,1 @@
-+LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test SASL_CONF_DIR=/root/.sasl2 /usr/bin/qemu -S -M pc -m 214 -smp 1 -monitor pty -pidfile /nowhere/QEMUGuest1.pid -no-acpi -boot c -hda /dev/HostVG/QEMUGuest1 -net none -serial none -parallel none -usb -vnc 127.0.0.1:3,sasl
-diff -r 961d4b1ca1d3 tests/qemuxml2argvdata/qemuxml2argv-graphics-vnc-sasl.xml
---- /dev/null	Thu Jan 01 00:00:00 1970 +0000
-+++ b/tests/qemuxml2argvdata/qemuxml2argv-graphics-vnc-sasl.xml	Thu Mar 05 14:22:50 2009 +0000
-@@ -0,0 +1,24 @@
-+<domain type='qemu'>
-+  <name>QEMUGuest1</name>
-+  <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
-+  <memory>219200</memory>
-+  <currentMemory>219200</currentMemory>
-+  <vcpu>1</vcpu>
-+  <os>
-+    <type arch='i686' machine='pc'>hvm</type>
-+    <boot dev='hd'/>
-+  </os>
-+  <clock offset='utc'/>
-+  <on_poweroff>destroy</on_poweroff>
-+  <on_reboot>restart</on_reboot>
-+  <on_crash>destroy</on_crash>
-+  <devices>
-+    <emulator>/usr/bin/qemu</emulator>
-+    <disk type='block' device='disk'>
-+      <source dev='/dev/HostVG/QEMUGuest1'/>
-+      <target dev='hda' bus='ide'/>
-+    </disk>
-+    <input type='mouse' bus='ps2'/>
-+    <graphics type='vnc' port='5903' autoport='no' listen='127.0.0.1'/>
-+  </devices>
-+</domain>
-diff -r 961d4b1ca1d3 tests/qemuxml2argvdata/qemuxml2argv-graphics-vnc-tls.args
---- /dev/null	Thu Jan 01 00:00:00 1970 +0000
-+++ b/tests/qemuxml2argvdata/qemuxml2argv-graphics-vnc-tls.args	Thu Mar 05 14:22:50 2009 +0000
-@@ -0,0 +1,1 @@
-+LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test SASL_CONF_DIR=/root/.sasl2 /usr/bin/qemu -S -M pc -m 214 -smp 1 -monitor pty -pidfile /nowhere/QEMUGuest1.pid -no-acpi -boot c -hda /dev/HostVG/QEMUGuest1 -net none -serial none -parallel none -usb -vnc 127.0.0.1:3,tls,x509verify=/etc/pki/tls/qemu,sasl
-diff -r 961d4b1ca1d3 tests/qemuxml2argvdata/qemuxml2argv-graphics-vnc-tls.xml
---- /dev/null	Thu Jan 01 00:00:00 1970 +0000
-+++ b/tests/qemuxml2argvdata/qemuxml2argv-graphics-vnc-tls.xml	Thu Mar 05 14:22:50 2009 +0000
-@@ -0,0 +1,24 @@
-+<domain type='qemu'>
-+  <name>QEMUGuest1</name>
-+  <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
-+  <memory>219200</memory>
-+  <currentMemory>219200</currentMemory>
-+  <vcpu>1</vcpu>
-+  <os>
-+    <type arch='i686' machine='pc'>hvm</type>
-+    <boot dev='hd'/>
-+  </os>
-+  <clock offset='utc'/>
-+  <on_poweroff>destroy</on_poweroff>
-+  <on_reboot>restart</on_reboot>
-+  <on_crash>destroy</on_crash>
-+  <devices>
-+    <emulator>/usr/bin/qemu</emulator>
-+    <disk type='block' device='disk'>
-+      <source dev='/dev/HostVG/QEMUGuest1'/>
-+      <target dev='hda' bus='ide'/>
-+    </disk>
-+    <input type='mouse' bus='ps2'/>
-+    <graphics type='vnc' port='5903' autoport='no' listen='127.0.0.1'/>
-+  </devices>
-+</domain>
-diff -r 961d4b1ca1d3 tests/qemuxml2argvtest.c
---- a/tests/qemuxml2argvtest.c	Wed Mar 04 13:17:44 2009 +0000
-+++ b/tests/qemuxml2argvtest.c	Thu Mar 05 14:22:50 2009 +0000
-@@ -213,6 +213,19 @@ mymain(int argc, char **argv)
-             QEMUD_CMD_FLAG_DRIVE_CACHE_V2);
-     DO_TEST("disk-usb", 0);
-     DO_TEST("graphics-vnc", 0);
-+
-+    driver.vncSASL = 1;
-+    driver.vncSASLdir = strdup("/root/.sasl2");
-+    DO_TEST("graphics-vnc-sasl", 0);
-+    driver.vncTLS = 1;
-+    driver.vncTLSx509verify = 1;
-+    driver.vncTLSx509certdir = strdup("/etc/pki/tls/qemu");
-+    DO_TEST("graphics-vnc-tls", 0);
-+    driver.vncSASL = driver.vncTLSx509verify = driver.vncTLS = 0;
-+    free(driver.vncSASLdir);
-+    free(driver.vncTLSx509certdir);
-+    driver.vncSASLdir = driver.vncTLSx509certdir = NULL;
-+
-     DO_TEST("graphics-sdl", 0);
-     DO_TEST("graphics-sdl-fullscreen", 0);
-     DO_TEST("input-usbmouse", 0);
diff --git a/libvirt-0.6.1-xen-events.patch b/libvirt-0.6.1-xen-events.patch
deleted file mode 100644
index dd80746..0000000
--- a/libvirt-0.6.1-xen-events.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-Index: src/xs_internal.c
-===================================================================
-RCS file: /data/cvs/libxen/src/xs_internal.c,v
-retrieving revision 1.88
-diff -u -u -r1.88 xs_internal.c
---- src/xs_internal.c	5 Feb 2009 18:14:00 -0000	1.88
-+++ src/xs_internal.c	11 Mar 2009 13:23:17 -0000
-@@ -1215,7 +1215,7 @@
- static void
- xenStoreWatchEvent(int watch ATTRIBUTE_UNUSED,
-                    int fd ATTRIBUTE_UNUSED,
--                   int events ATTRIBUTE_UNUSED,
-+                   int events,
-                    void *data)
- {
-     char		 **event;
-@@ -1226,8 +1226,12 @@
- 
-     virConnectPtr        conn = data;
-     xenUnifiedPrivatePtr priv = (xenUnifiedPrivatePtr) conn->privateData;
-+
-     if(!priv) return;
- 
-+    /* only set a watch on read and write events */
-+    if (events & (VIR_EVENT_HANDLE_ERROR | VIR_EVENT_HANDLE_HANGUP)) return;
-+
-     xenUnifiedLock(priv);
- 
-     if(!priv->xshandle)
diff --git a/libvirt-0.6.1-xenblock-detach.patch b/libvirt-0.6.1-xenblock-detach.patch
deleted file mode 100644
index 204f5d9..0000000
--- a/libvirt-0.6.1-xenblock-detach.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From: Daniel P. Berrange <berrange@redhat.com>
-Date: Tue, 10 Mar 2009 10:32:24 +0000 (+0000)
-Subject: Fix Xen block detach with newer Xend (Cole RobinSon / Tomohiro Takahashi)
-X-Git-Url: http://git.et.redhat.com/?p=libvirt.git;a=commitdiff_plain;h=33813a932d58c17441203d0e581eba91369a71e0
-
-Fix Xen block detach with newer Xend (Cole RobinSon / Tomohiro Takahashi)
----
-
-diff --git a/src/xend_internal.c b/src/xend_internal.c
-index f9f2cb3..772f3f4 100644
---- a/src/xend_internal.c
-+++ b/src/xend_internal.c
-@@ -5566,7 +5566,12 @@ virDomainXMLDevID(virDomainPtr domain,
-     char *xref;
- 
-     if (dev->type == VIR_DOMAIN_DEVICE_DISK) {
--        strcpy(class, "vbd");
-+        if (dev->data.disk->driverName &&
-+            STREQ(dev->data.disk->driverName, "tap"))
-+            strcpy(class, "tap");
-+        else
-+            strcpy(class, "vbd");
-+
-         if (dev->data.disk->dst == NULL)
-             return -1;
-         xenUnifiedLock(priv);
diff --git a/libvirt-0.6.1-xend-lookup.patch b/libvirt-0.6.1-xend-lookup.patch
deleted file mode 100644
index ea9a175..0000000
--- a/libvirt-0.6.1-xend-lookup.patch
+++ /dev/null
@@ -1,24 +0,0 @@
-Index: src/xend_internal.c
-===================================================================
-RCS file: /data/cvs/libxen/src/xend_internal.c,v
-retrieving revision 1.251
-diff -u -r1.251 xend_internal.c
---- src/xend_internal.c	13 Feb 2009 18:23:23 -0000	1.251
-+++ src/xend_internal.c	10 Mar 2009 10:00:28 -0000
-@@ -904,7 +904,15 @@
-         count++;
-     }
- 
--    if (VIR_ALLOC_N(ptr, count + 1 + extra) < 0)
-+    /*
-+     * We can'tuse the normal allocation routines as we are mixing
-+     * an array of char * at the beginning followed by an array of char
-+     * ret points to the NULL terminated array of char *
-+     * ptr points to the current string after that array but in the same
-+     * allocated block
-+     */
-+    if (virAlloc((void *)&ptr,
-+                 (count + 1) * sizeof(char *) + extra * sizeof(char)) < 0)
-         goto error;
- 
-     ret = (char **) ptr;
diff --git a/libvirt-0.6.2-svirt-sound.patch b/libvirt-0.6.2-svirt-sound.patch
new file mode 100644
index 0000000..0b1796e
--- /dev/null
+++ b/libvirt-0.6.2-svirt-sound.patch
@@ -0,0 +1,33 @@
+--- src/qemu_conf.c.orig	2009-04-02 11:50:10.000000000 +0200
++++ src/qemu_conf.c	2009-04-03 17:46:59.000000000 +0200
+@@ -779,6 +779,20 @@ int qemudBuildCommandLine(virConnectPtr 
+     char domid[50];
+     char *pidfile;
+     const char *cpu = NULL;
++    int skipSound = 0;
++
++    if (driver->securityDriver &&
++        driver->securityDriver->name &&
++        STREQ(driver->securityDriver->name, "selinux") &&
++        getuid() == 0) {
++        static int soundWarned = 0; 
++        skipSound = 1;
++        if (vm->def->nsounds &&
++            !soundWarned) {
++            soundWarned = 1;
++            VIR_WARN0("Sound cards for VMs are disabled while SELinux security model is active");
++        }
++    }
+ 
+     uname_normalize(&ut);
+ 
+@@ -1425,7 +1439,8 @@ int qemudBuildCommandLine(virConnectPtr 
+     }
+ 
+     /* Add sound hardware */
+-    if (vm->def->nsounds) {
++    if (vm->def->nsounds &&
++        !skipSound) {
+         int size = 100;
+         char *modstr;
+         if (VIR_ALLOC_N(modstr, size+1) < 0)
diff --git a/libvirt.spec b/libvirt.spec
index e22c09f..e644d33 100644
--- a/libvirt.spec
+++ b/libvirt.spec
@@ -13,6 +13,25 @@
 %define with_uml       0%{!?_without_uml:1}
 %define with_network   0%{!?_without_network:1}
 
+%define with_xen           0%{!?_without_xen:1}
+%define with_xen_proxy     0%{!?_without_xen_proxy:1}
+%define with_qemu          0%{!?_without_qemu:1}
+%define with_openvz        0%{!?_without_openvz:1}
+%define with_lxc           0%{!?_without_lxc:1}
+%define with_sasl          0%{!?_without_sasl:1}
+%define with_avahi         0%{!?_without_avahi:1}
+%define with_polkit        0%{!?_without_polkit:0}
+%define with_python        0%{!?_without_python:1}
+%define with_libvirtd      0%{!?_without_libvirtd:1}
+%define with_uml           0%{!?_without_uml:1}
+%define with_network       0%{!?_without_network:1}
+%define with_storage_fs    0%{!?_without_storage_fs:1}
+%define with_storage_lvm   0%{!?_without_storage_lvm:1}
+%define with_storage_iscsi 0%{!?_without_storage_iscsi:1}
+%define with_storage_disk  0%{!?_without_storage_disk:1}
+%define with_numactl       0%{!?_without_numactl:1}
+
+
 # Xen is available only on i386 x86_64 ia64
 %ifnarch i386 i586 i686 x86_64 ia64
 %define with_xen 0
@@ -46,29 +65,15 @@
 
 Summary: Library providing a simple API virtualization
 Name: libvirt
-Version: 0.6.1
-Release: 6%{?dist}%{?extra_release}
+Version: 0.6.2
+Release: 1%{?dist}%{?extra_release}
 License: LGPLv2+
 Group: Development/Libraries
 Source: libvirt-%{version}.tar.gz
-Patch1: libvirt-0.6.1-xend-lookup.patch
-Patch2: libvirt-0.6.1-xen-events.patch
-Patch3: libvirt-0.6.1-events-dispatch.patch
-Patch4: libvirt-0.6.1-fd-leaks.patch
-Patch5: libvirt-0.6.1-getvcpus-remote.patch
-Patch6: libvirt-0.6.1-pool-mode-parse.patch
-Patch7: libvirt-0.6.1-storage-free.patch
-Patch8: libvirt-0.6.1-vcpu-deadlock.patch
-Patch9: libvirt-0.6.1-xenblock-detach.patch
-Patch10: libvirt-0.6.1-fd-leaks2.patch
-Patch11: libvirt-0.6.1-svirt-shared-readonly.patch
-
-# Not upstream yet - pending QEMU merge
-Patch100: libvirt-0.6.1-vnc-sasl-auth.patch
 
 # Not for upstream. Temporary hack till PulseAudio autostart
 # problems are sorted out when SELinux enforcing
-Patch200: libvirt-0.6.1-svirt-sound.patch
+Patch200: libvirt-0.6.2-svirt-sound.patch
 
 BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
 URL: http://libvirt.org/
@@ -92,11 +97,13 @@ Requires: cyrus-sasl-md5
 %if %{with_polkit}
 Requires: PolicyKit >= 0.6
 %endif
+%if %{with_storage_fs}
 # For mount/umount in FS driver
 BuildRequires: util-linux
 # For showmount in FS driver (netfs discovery)
 BuildRequires: nfs-utils
 Requires: nfs-utils
+%endif
 %if %{with_qemu}
 # From QEMU RPMs
 Requires: /usr/bin/qemu-img
@@ -106,12 +113,18 @@ Requires: /usr/bin/qemu-img
 Requires: /usr/sbin/qcow-create
 %endif
 %endif
+%if %{with_storage_lvm}
 # For LVM drivers
 Requires: lvm2
+%endif
+%if %{with_storage_iscsi}
 # For ISCSI driver
 Requires: iscsi-initiator-utils
+%endif
+%if %{with_storage_disk}
 # For disk driver
 Requires: parted
+%endif
 # For svirt support
 Requires: libselinux
 %if %{with_xen}
@@ -139,8 +152,10 @@ BuildRequires: cyrus-sasl-devel
 %if %{with_polkit}
 BuildRequires: PolicyKit-devel >= 0.6
 %endif
+%if %{with_storage_fs}
 # For mount/umount in FS driver
 BuildRequires: util-linux
+%endif
 %if %{with_qemu}
 # From QEMU RPMs
 BuildRequires: /usr/bin/qemu-img
@@ -150,14 +165,22 @@ BuildRequires: /usr/bin/qemu-img
 BuildRequires: /usr/sbin/qcow-create
 %endif
 %endif
+%if %{with_storage_lvm}
 # For LVM drivers
 BuildRequires: lvm2
+%endif
+%if %{with_storage_iscsi}
 # For ISCSI driver
 BuildRequires: iscsi-initiator-utils
+%endif
+%if %{with_storage_disk}
 # For disk driver
 BuildRequires: parted-devel
+%endif
+%if %{with_numactl}
 # For QEMU/LXC numa info
 BuildRequires: numactl-devel
+%endif
 Obsoletes: libvir <= 0.2
 Provides: libvir = %{version}-%{release}
 
@@ -200,20 +223,8 @@ of recent versions of Linux (and other OSes).
 
 %prep
 %setup -q
-%patch1 -p0
-%patch2 -p0
-%patch3 -p1
-%patch4 -p1
-%patch5 -p1
-%patch6 -p1
-%patch7 -p1
-%patch8 -p1
-%patch9 -p1
-%patch10 -p0
-%patch11 -p1
-
-%patch100 -p1
-%patch200 -p1
+
+%patch200 -p0
 
 mv NEWS NEWS.old
 iconv -f ISO-8859-1 -t UTF-8 < NEWS.old > NEWS
@@ -267,6 +278,26 @@ iconv -f ISO-8859-1 -t UTF-8 < NEWS.old > NEWS
 %define _without_network --without-network
 %endif
 
+%if ! %{with_storage_fs}
+%define _without_storage_fs --without-storage-fs
+%endif
+
+%if ! %{with_storage_lvm}
+%define _without_storage_lvm --without-storage-lvm
+%endif
+
+%if ! %{with_storage_iscsi}
+%define _without_storage_iscsi --without-storage-iscsi
+%endif
+
+%if ! %{with_storage_disk}
+%define _without_storage_disk --without-storage-disk
+%endif
+
+%if ! %{with_numactl}
+%define _without_numactl --without-numactl
+%endif
+
 %configure %{?_without_xen} \
            %{?_without_qemu} \
            %{?_without_openvz} \
@@ -279,6 +310,11 @@ iconv -f ISO-8859-1 -t UTF-8 < NEWS.old > NEWS
            %{?_without_uml} \
            %{?_without_network} \
            %{?_with_rhel5_api} \
+           %{?_without_storage_fs} \
+           %{?_without_storage_lvm} \
+           %{?_without_storage_iscsi} \
+           %{?_without_storage_disk} \
+           %{?_without_numactl} \
            --with-init-script=redhat \
            --with-qemud-pid-file=%{_localstatedir}/run/libvirt_qemud.pid \
            --with-remote-file=%{_localstatedir}/run/libvirtd.pid
@@ -506,6 +542,14 @@ fi
 %endif
 
 %changelog
+* Fri Apr  3 2009 Daniel Veillard <veillard@redhat.com> - 0.6.2-1.fc11
+- release of 0.6.2
+- memory ballooning in QEMU
+- SCSI HBA storage pool support
+- support SASL auth for VNC server
+- PCI passthrough in Xen driver
+- assorted bug fixes
+
 * Fri Apr  3 2009 Daniel P. Berrange  <berrange@redhat.com> - 0.6.1-6.fc11
 - Fix typo in previous patch
 
diff --git a/sources b/sources
index 12fd240..d9e6628 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-3154ea9d4a0778497dfdf58cb98127c0  libvirt-0.6.1.tar.gz
+3035b484861516a1cd425acef1e760e3  libvirt-0.6.2.tar.gz