[libvirt] [PATCH] Check for duplicated UUID in XM Xen defines

Daniel Veillard veillard at redhat.com
Tue Nov 17 11:16:11 UTC 2009


  This fixes https://bugzilla.redhat.com/show_bug.cgi?id=504262
where the xen drivers happily allows to define domains with conflicting
UUID. This is similar to the virDomainObjIsDuplicate check done in other
drivers but the internal structures are different so this need to be
done in a special way

Author: Daniel Veillard <veillard at redhat.com>
Date:   Tue Nov 17 12:06:46 2009 +0100

    504262 Check for duplicated UUID in XM Xen defines

    * src/xen/xm_internal.c: the XM driver was not checking for previously
      defined UUID on new defines. Similar to virDomainObjIsDuplicate()
      behaviour.

diff --git a/src/xen/xm_internal.c b/src/xen/xm_internal.c
index f833ce7..47bcc11 100644
--- a/src/xen/xm_internal.c
+++ b/src/xen/xm_internal.c
@@ -2623,6 +2623,26 @@ virDomainPtr xenXMDomainDefineXML(virConnectPtr conn, const char *xml) {
         return (NULL);
     }
 
+    /*
+     * check that if there is another domain defined with the same uuid
+     * it has the same name
+     */
+    if ((entry = virHashSearch(priv->configCache, xenXMDomainSearchForUUID,
+                               (const void *)&(def->uuid))) != NULL) {
+	if ((entry->def != NULL) && (entry->def->name != NULL) &&
+	    (STRNEQ(def->name, entry->def->name))) {
+	    char uuidstr[VIR_UUID_STRING_BUFLEN];
+
+	    virUUIDFormat(entry->def->uuid, uuidstr);
+	    xenXMError(conn, VIR_ERR_OPERATION_FAILED,
+	               _("domain '%s' is already defined with uuid %s"),
+		       entry->def->name, uuidstr);
+	    entry = NULL;
+            goto error;
+	}
+	entry = NULL;
+    }
+
     if (virHashLookup(priv->nameConfigMap, def->name)) {
         /* domain exists, we will overwrite it */
 

-- 
Daniel Veillard      | libxml Gnome XML XSLT toolkit  http://xmlsoft.org/
daniel at veillard.com  | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library  http://libvirt.org/




More information about the libvir-list mailing list