]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
domain: Fix migratable XML with graphics/@listen
authorJiri Denemark <jdenemar@redhat.com>
Wed, 23 Sep 2015 12:48:06 +0000 (14:48 +0200)
committerCole Robinson <crobinso@redhat.com>
Wed, 23 Dec 2015 23:01:59 +0000 (18:01 -0500)
As of commit 6992994, we set graphics/@listen attribute according to the
first listen child element even if that element is of type='network'.
This was done for backward compatibility with applications which only
support the original listen attribute. However, by doing so we broke
migration to older libvirt which tried to check that the listen
attribute matches one of the listen child elements but which did not
take type='network' elements into account.

We are not concerned about compatibility with old applications when
formatting domain XML for migration for two reasons. The XML is consumed
only by libvirtd and the IP address associated with type='network'
listen address on the source host is just useless on the destination
host. Thus, we can safely avoid propagating the type='network' IP
address to graphics/@listen attribute when creating migratable XML.

https://bugzilla.redhat.com/show_bug.cgi?id=1265111

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
(cherry picked from commit c0806dc30bda562810b0d686e33c903862e3c8f1)

src/conf/domain_conf.c

index f9734b5acb3c62c9b6fb1a1ab813f558999d10dd..334c5776465f6cd8676de846e793d2f451402eb2 100644 (file)
@@ -19112,19 +19112,17 @@ virDomainGraphicsDefFormat(virBufferPtr buf,
     * <graphics>. This is done to improve backward compatibility.
     */
     for (i = 0; i < def->nListens; i++) {
-        virDomainGraphicsListenType listenType;
-
         if (flags & VIR_DOMAIN_DEF_FORMAT_MIGRATABLE &&
             def->listens[i].fromConfig)
             continue;
-        listenType = virDomainGraphicsListenGetType(def, i);
 
-        if (listenType == VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_ADDRESS ||
-            (listenType == VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NETWORK &&
-             !(flags & VIR_DOMAIN_DEF_FORMAT_INACTIVE))) {
-            if ((listenAddr = virDomainGraphicsListenGetAddress(def, i)))
-                break;
-        }
+        if (def->listens[i].type == VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_NETWORK &&
+            flags & (VIR_DOMAIN_DEF_FORMAT_INACTIVE |
+                     VIR_DOMAIN_DEF_FORMAT_MIGRATABLE))
+            continue;
+
+        if ((listenAddr = virDomainGraphicsListenGetAddress(def, i)))
+            break;
     }
 
     virBufferAsprintf(buf, "<graphics type='%s'", type);