[libvirt] [PATCH 04/30] conf: sanitize virDomainObjFormat & virDomainDefFormat* APIs

Daniel P. Berrangé berrange at redhat.com
Wed Dec 4 14:20:47 UTC 2019


Moving their instance parameter to be the first one, and give consistent
ordering of other parameters across all functions. Ensure that the xml
options are passed into both functions in prep for future work.

Signed-off-by: Daniel P. Berrangé <berrange at redhat.com>
---
 src/bhyve/bhyve_driver.c         |  4 +--
 src/conf/checkpoint_conf.c       |  4 +--
 src/conf/domain_conf.c           | 39 ++++++++++++----------
 src/conf/domain_conf.h           | 28 +++++++++++-----
 src/conf/snapshot_conf.c         | 10 +++---
 src/esx/esx_driver.c             |  4 +--
 src/hyperv/hyperv_driver.c       |  3 +-
 src/libxl/libxl_domain.c         | 12 +++----
 src/libxl/libxl_driver.c         |  8 ++---
 src/libxl/libxl_migration.c      |  4 +--
 src/lxc/lxc_driver.c             |  4 +--
 src/lxc/lxc_process.c            | 12 +++----
 src/openvz/openvz_conf.c         | 55 +++++++++++++++++++++++++++++++
 src/openvz/openvz_conf.h         |  1 +
 src/openvz/openvz_driver.c       | 56 ++------------------------------
 src/phyp/phyp_driver.c           |  2 +-
 src/qemu/qemu_domain.c           |  5 ++-
 src/security/security_apparmor.c |  2 +-
 src/test/test_driver.c           |  8 +++--
 src/vbox/vbox_common.c           |  2 +-
 src/vmware/vmware_driver.c       |  4 +--
 src/vz/vz_driver.c               |  4 +--
 tests/Makefile.am                |  3 +-
 tests/lxcconf2xmltest.c          |  2 +-
 tests/openvzutilstest.c          |  4 ++-
 tests/qemuhotplugtest.c          |  6 ++--
 tests/qemuxml2xmltest.c          |  2 +-
 tests/testutils.c                |  2 +-
 tests/vmx2xmltest.c              |  2 +-
 tests/xlconfigtest.c             |  3 +-
 tests/xmconfigtest.c             |  2 +-
 31 files changed, 161 insertions(+), 136 deletions(-)

diff --git a/src/bhyve/bhyve_driver.c b/src/bhyve/bhyve_driver.c
index b8a206bb1e..18b5d1e950 100644
--- a/src/bhyve/bhyve_driver.c
+++ b/src/bhyve/bhyve_driver.c
@@ -495,7 +495,7 @@ bhyveDomainGetXMLDesc(virDomainPtr domain, unsigned int flags)
     if (!caps)
         goto cleanup;
 
-    ret = virDomainDefFormat(vm->def, caps,
+    ret = virDomainDefFormat(vm->def, privconn->xmlopt, caps,
                              virDomainDefFormatConvertXMLFlags(flags));
 
     virObjectUnref(caps);
@@ -1583,7 +1583,7 @@ bhyveConnectDomainXMLFromNative(virConnectPtr conn,
     if (def == NULL)
         goto cleanup;
 
-    xml = virDomainDefFormat(def, capabilities, 0);
+    xml = virDomainDefFormat(def, privconn->xmlopt, capabilities, 0);
 
  cleanup:
     virObjectUnref(capabilities);
diff --git a/src/conf/checkpoint_conf.c b/src/conf/checkpoint_conf.c
index 36076c13df..cb2d83796c 100644
--- a/src/conf/checkpoint_conf.c
+++ b/src/conf/checkpoint_conf.c
@@ -489,8 +489,8 @@ virDomainCheckpointDefFormatInternal(virBufferPtr buf,
     }
 
     if (!(flags & VIR_DOMAIN_CHECKPOINT_FORMAT_NO_DOMAIN) &&
-        virDomainDefFormatInternal(def->parent.dom, caps, domainflags, buf,
-                                   xmlopt) < 0)
+        virDomainDefFormatInternal(def->parent.dom, xmlopt,
+                                   caps, buf, domainflags) < 0)
         goto error;
 
     virBufferAdjustIndent(buf, -2);
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 87bbb2d263..781bf9d2d4 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -23600,8 +23600,8 @@ virDomainDefCheckABIStabilityFlags(virDomainDefPtr src,
  error:
     virErrorPreserveLast(&err);
 
-    strSrc = virDomainDefFormat(src, NULL, 0);
-    strDst = virDomainDefFormat(dst, NULL, 0);
+    strSrc = virDomainDefFormat(src, xmlopt, NULL, 0);
+    strDst = virDomainDefFormat(dst, xmlopt, NULL, 0);
     VIR_DEBUG("XMLs that failed stability check were: src=\"%s\", dst=\"%s\"",
               NULLSTR(strSrc), NULLSTR(strDst));
 
@@ -28286,13 +28286,13 @@ virDomainDefFormatFeatures(virBufferPtr buf,
 
 int
 virDomainDefFormatInternal(virDomainDefPtr def,
+                           virDomainXMLOptionPtr xmlopt,
                            virCapsPtr caps,
-                           unsigned int flags,
                            virBufferPtr buf,
-                           virDomainXMLOptionPtr xmlopt)
+                           unsigned int flags)
 {
-    return virDomainDefFormatInternalSetRootName(def, caps, flags, buf,
-                                                 xmlopt, "domain");
+    return virDomainDefFormatInternalSetRootName(def, xmlopt, caps, buf,
+                                                 "domain", flags);
 }
 
 
@@ -28302,11 +28302,11 @@ virDomainDefFormatInternal(virDomainDefPtr def,
  * Return -1 on failure.  */
 int
 virDomainDefFormatInternalSetRootName(virDomainDefPtr def,
+                                      virDomainXMLOptionPtr xmlopt,
                                       virCapsPtr caps,
-                                      unsigned int flags,
                                       virBufferPtr buf,
-                                      virDomainXMLOptionPtr xmlopt,
-                                      const char *rootname)
+                                      const char *rootname,
+                                      unsigned int flags)
 {
     unsigned char *uuid;
     char uuidstr[VIR_UUID_STRING_BUFLEN];
@@ -28843,12 +28843,15 @@ unsigned int virDomainDefFormatConvertXMLFlags(unsigned int flags)
 
 
 char *
-virDomainDefFormat(virDomainDefPtr def, virCapsPtr caps, unsigned int flags)
+virDomainDefFormat(virDomainDefPtr def,
+                   virDomainXMLOptionPtr xmlopt,
+                   virCapsPtr caps,
+                   unsigned int flags)
 {
     virBuffer buf = VIR_BUFFER_INITIALIZER;
 
     virCheckFlags(VIR_DOMAIN_DEF_FORMAT_COMMON_FLAGS, NULL);
-    if (virDomainDefFormatInternal(def, caps, flags, &buf, NULL) < 0)
+    if (virDomainDefFormatInternal(def, xmlopt, caps, &buf, flags) < 0)
         return NULL;
 
     return virBufferContentAndReset(&buf);
@@ -28856,8 +28859,8 @@ virDomainDefFormat(virDomainDefPtr def, virCapsPtr caps, unsigned int flags)
 
 
 char *
-virDomainObjFormat(virDomainXMLOptionPtr xmlopt,
-                   virDomainObjPtr obj,
+virDomainObjFormat(virDomainObjPtr obj,
+                   virDomainXMLOptionPtr xmlopt,
                    virCapsPtr caps,
                    unsigned int flags)
 {
@@ -28883,7 +28886,7 @@ virDomainObjFormat(virDomainXMLOptionPtr xmlopt,
         xmlopt->privateData.format(&buf, obj) < 0)
         goto error;
 
-    if (virDomainDefFormatInternal(obj->def, caps, flags, &buf, xmlopt) < 0)
+    if (virDomainDefFormatInternal(obj->def, xmlopt, caps, &buf, flags) < 0)
         goto error;
 
     virBufferAdjustIndent(&buf, -2);
@@ -29043,13 +29046,13 @@ virDomainDefSaveXML(virDomainDefPtr def,
 
 int
 virDomainDefSave(virDomainDefPtr def,
-                 virDomainXMLOptionPtr xmlopt G_GNUC_UNUSED,
+                 virDomainXMLOptionPtr xmlopt,
                  virCapsPtr caps,
                  const char *configDir)
 {
     g_autofree char *xml = NULL;
 
-    if (!(xml = virDomainDefFormat(def, caps, VIR_DOMAIN_DEF_FORMAT_SECURE)))
+    if (!(xml = virDomainDefFormat(def, xmlopt, caps, VIR_DOMAIN_DEF_FORMAT_SECURE)))
         return -1;
 
     return virDomainDefSaveXML(def, configDir, xml);
@@ -29069,7 +29072,7 @@ virDomainObjSave(virDomainObjPtr obj,
 
     g_autofree char *xml = NULL;
 
-    if (!(xml = virDomainObjFormat(xmlopt, obj, caps, flags)))
+    if (!(xml = virDomainObjFormat(obj, xmlopt, caps, flags)))
         return -1;
 
     return virDomainDefSaveXML(obj->def, statusDir, xml);
@@ -29373,7 +29376,7 @@ virDomainDefCopy(virDomainDefPtr src,
         format_flags |= VIR_DOMAIN_DEF_FORMAT_INACTIVE | VIR_DOMAIN_DEF_FORMAT_MIGRATABLE;
 
     /* Easiest to clone via a round-trip through XML.  */
-    if (!(xml = virDomainDefFormat(src, caps, format_flags)))
+    if (!(xml = virDomainDefFormat(src, xmlopt, caps, format_flags)))
         return NULL;
 
     return virDomainDefParseString(xml, caps, xmlopt, parseOpaque, parse_flags);
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index d1c375092e..f7a611d5ef 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -3101,23 +3101,33 @@ void virDomainIOThreadIDDel(virDomainDefPtr def, unsigned int iothread_id);
 unsigned int virDomainDefFormatConvertXMLFlags(unsigned int flags);
 
 char *virDomainDefFormat(virDomainDefPtr def,
+                         virDomainXMLOptionPtr xmlopt,
                          virCapsPtr caps,
-                         unsigned int flags);
-char *virDomainObjFormat(virDomainXMLOptionPtr xmlopt,
-                         virDomainObjPtr obj,
+                         unsigned int flags)
+    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2)
+    ATTRIBUTE_NONNULL(3);
+char *virDomainObjFormat(virDomainObjPtr obj,
+                         virDomainXMLOptionPtr xmlopt,
                          virCapsPtr caps,
-                         unsigned int flags);
+                         unsigned int flags)
+    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2)
+    ATTRIBUTE_NONNULL(3);
 int virDomainDefFormatInternal(virDomainDefPtr def,
+                               virDomainXMLOptionPtr xmlopt,
                                virCapsPtr caps,
-                               unsigned int flags,
                                virBufferPtr buf,
-                               virDomainXMLOptionPtr xmlopt);
+                               unsigned int flags)
+    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2)
+    ATTRIBUTE_NONNULL(3) ATTRIBUTE_NONNULL(4);
 int virDomainDefFormatInternalSetRootName(virDomainDefPtr def,
+                                          virDomainXMLOptionPtr xmlopt,
                                           virCapsPtr caps,
-                                          unsigned int flags,
                                           virBufferPtr buf,
-                                          virDomainXMLOptionPtr xmlopt,
-                                          const char *rootname);
+                                          const char *rootname,
+                                          unsigned int flags)
+    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2)
+    ATTRIBUTE_NONNULL(3) ATTRIBUTE_NONNULL(4)
+    ATTRIBUTE_NONNULL(5);
 
 int virDomainDiskSourceFormat(virBufferPtr buf,
                               virStorageSourcePtr src,
diff --git a/src/conf/snapshot_conf.c b/src/conf/snapshot_conf.c
index a0509041be..0bf7d497e4 100644
--- a/src/conf/snapshot_conf.c
+++ b/src/conf/snapshot_conf.c
@@ -891,8 +891,8 @@ virDomainSnapshotDefFormatInternal(virBufferPtr buf,
     }
 
     if (def->parent.dom) {
-        if (virDomainDefFormatInternal(def->parent.dom, caps, domainflags, buf,
-                                       xmlopt) < 0)
+        if (virDomainDefFormatInternal(def->parent.dom, xmlopt,
+                                       caps, buf, domainflags) < 0)
             goto error;
     } else if (uuidstr) {
         virBufferAddLit(buf, "<domain>\n");
@@ -903,9 +903,9 @@ virDomainSnapshotDefFormatInternal(virBufferPtr buf,
     }
 
     if (def->parent.inactiveDom) {
-        if (virDomainDefFormatInternalSetRootName(def->parent.inactiveDom, caps,
-                                                  domainflags, buf, xmlopt,
-                                                  "inactiveDomain") < 0)
+        if (virDomainDefFormatInternalSetRootName(def->parent.inactiveDom, xmlopt,
+                                                  caps, buf, "inactiveDomain",
+                                                  domainflags) < 0)
             goto error;
     }
 
diff --git a/src/esx/esx_driver.c b/src/esx/esx_driver.c
index f8ee6db75f..81ff502769 100644
--- a/src/esx/esx_driver.c
+++ b/src/esx/esx_driver.c
@@ -2648,7 +2648,7 @@ esxDomainGetXMLDesc(virDomainPtr domain, unsigned int flags)
         if (powerState != esxVI_VirtualMachinePowerState_PoweredOff)
             def->id = id;
 
-        xml = virDomainDefFormat(def, priv->caps,
+        xml = virDomainDefFormat(def, priv->xmlopt, priv->caps,
                                  virDomainDefFormatConvertXMLFlags(flags));
     }
 
@@ -2706,7 +2706,7 @@ esxConnectDomainXMLFromNative(virConnectPtr conn, const char *nativeFormat,
     def = virVMXParseConfig(&ctx, priv->xmlopt, priv->caps, nativeConfig);
 
     if (def)
-        xml = virDomainDefFormat(def, priv->caps,
+        xml = virDomainDefFormat(def, priv->xmlopt, priv->caps,
                                  VIR_DOMAIN_DEF_FORMAT_INACTIVE);
 
     virDomainDefFree(def);
diff --git a/src/hyperv/hyperv_driver.c b/src/hyperv/hyperv_driver.c
index 3a2f6602bc..ff9370d728 100644
--- a/src/hyperv/hyperv_driver.c
+++ b/src/hyperv/hyperv_driver.c
@@ -886,7 +886,8 @@ hypervDomainGetXMLDesc(virDomainPtr domain, unsigned int flags)
 
     /* FIXME: devices section is totally missing */
 
-    xml = virDomainDefFormat(def, NULL,
+    /* XXX xmlopts must be non-NULL */
+    xml = virDomainDefFormat(def, NULL, NULL,
                              virDomainDefFormatConvertXMLFlags(flags));
 
  cleanup:
diff --git a/src/libxl/libxl_domain.c b/src/libxl/libxl_domain.c
index 9b9b17b173..19905442c1 100644
--- a/src/libxl/libxl_domain.c
+++ b/src/libxl/libxl_domain.c
@@ -844,7 +844,7 @@ libxlDomainCleanup(libxlDriverPrivatePtr driver,
 
     /* now that we know it's stopped call the hook if present */
     if (virHookPresent(VIR_HOOK_DRIVER_LIBXL)) {
-        char *xml = virDomainDefFormat(vm->def, cfg->caps, 0);
+        char *xml = virDomainDefFormat(vm->def, driver->xmlopt, cfg->caps, 0);
 
         /* we can't stop the operation even if the script raised an error */
         ignore_value(virHookCall(VIR_HOOK_DRIVER_LIBXL, vm->def->name,
@@ -913,7 +913,7 @@ libxlDomainCleanup(libxlDriverPrivatePtr driver,
 
     /* The "release" hook cleans up additional resources */
     if (virHookPresent(VIR_HOOK_DRIVER_LIBXL)) {
-        char *xml = virDomainDefFormat(vm->def, cfg->caps, 0);
+        char *xml = virDomainDefFormat(vm->def, driver->xmlopt, cfg->caps, 0);
 
         /* we can't stop the operation even if the script raised an error */
         ignore_value(virHookCall(VIR_HOOK_DRIVER_LIBXL, vm->def->name,
@@ -1320,7 +1320,7 @@ libxlDomainStart(libxlDriverPrivatePtr driver,
 
     /* Run an early hook to set-up missing devices */
     if (virHookPresent(VIR_HOOK_DRIVER_LIBXL)) {
-        char *xml = virDomainDefFormat(vm->def, cfg->caps, 0);
+        char *xml = virDomainDefFormat(vm->def, driver->xmlopt, cfg->caps, 0);
         int hookret;
 
         hookret = virHookCall(VIR_HOOK_DRIVER_LIBXL, vm->def->name,
@@ -1358,7 +1358,7 @@ libxlDomainStart(libxlDriverPrivatePtr driver,
 
     /* now that we know it is about to start call the hook if present */
     if (virHookPresent(VIR_HOOK_DRIVER_LIBXL)) {
-        char *xml = virDomainDefFormat(vm->def, cfg->caps, 0);
+        char *xml = virDomainDefFormat(vm->def, driver->xmlopt, cfg->caps, 0);
         int hookret;
 
         hookret = virHookCall(VIR_HOOK_DRIVER_LIBXL, vm->def->name,
@@ -1443,7 +1443,7 @@ libxlDomainStart(libxlDriverPrivatePtr driver,
         libxlDomainCreateChannelPTY(vm->def, cfg->ctx);
 #endif
 
-    if ((dom_xml = virDomainDefFormat(vm->def, cfg->caps, 0)) == NULL)
+    if ((dom_xml = virDomainDefFormat(vm->def, driver->xmlopt, cfg->caps, 0)) == NULL)
         goto destroy_dom;
 
     if (libxl_userdata_store(cfg->ctx, domid, "libvirt-xml",
@@ -1471,7 +1471,7 @@ libxlDomainStart(libxlDriverPrivatePtr driver,
 
     /* finally we can call the 'started' hook script if any */
     if (virHookPresent(VIR_HOOK_DRIVER_LIBXL)) {
-        char *xml = virDomainDefFormat(vm->def, cfg->caps, 0);
+        char *xml = virDomainDefFormat(vm->def, driver->xmlopt, cfg->caps, 0);
         int hookret;
 
         hookret = virHookCall(VIR_HOOK_DRIVER_LIBXL, vm->def->name,
diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c
index b885cf0d00..dc0d9b58f3 100644
--- a/src/libxl/libxl_driver.c
+++ b/src/libxl/libxl_driver.c
@@ -459,7 +459,7 @@ libxlReconnectDomain(virDomainObjPtr vm,
     /* now that we know it's reconnected call the hook if present */
     if (virHookPresent(VIR_HOOK_DRIVER_LIBXL) &&
         STRNEQ("Domain-0", vm->def->name)) {
-        char *xml = virDomainDefFormat(vm->def, cfg->caps, 0);
+        char *xml = virDomainDefFormat(vm->def, driver->xmlopt, cfg->caps, 0);
         int hookret;
 
         /* we can't stop the operation even if the script raised an error */
@@ -1828,7 +1828,7 @@ libxlDoDomainSave(libxlDriverPrivatePtr driver,
         goto cleanup;
     }
 
-    if ((xml = virDomainDefFormat(vm->def, cfg->caps, 0)) == NULL)
+    if ((xml = virDomainDefFormat(vm->def, driver->xmlopt, cfg->caps, 0)) == NULL)
         goto cleanup;
     xml_len = strlen(xml) + 1;
 
@@ -2652,7 +2652,7 @@ libxlDomainGetXMLDesc(virDomainPtr dom, unsigned int flags)
     else
         def = vm->def;
 
-    ret = virDomainDefFormat(def, cfg->caps,
+    ret = virDomainDefFormat(def, driver->xmlopt, cfg->caps,
                              virDomainDefFormatConvertXMLFlags(flags));
 
  cleanup:
@@ -2703,7 +2703,7 @@ libxlConnectDomainXMLFromNative(virConnectPtr conn,
         goto cleanup;
     }
 
-    xml = virDomainDefFormat(def, cfg->caps, VIR_DOMAIN_DEF_FORMAT_INACTIVE);
+    xml = virDomainDefFormat(def, driver->xmlopt, cfg->caps, VIR_DOMAIN_DEF_FORMAT_INACTIVE);
 
  cleanup:
     virDomainDefFree(def);
diff --git a/src/libxl/libxl_migration.c b/src/libxl/libxl_migration.c
index 65ff8271a7..25a58f8018 100644
--- a/src/libxl/libxl_migration.c
+++ b/src/libxl/libxl_migration.c
@@ -420,7 +420,7 @@ libxlDomainMigrationSrcBegin(virConnectPtr conn,
     if (!libxlDomainMigrationIsAllowed(def))
         goto endjob;
 
-    xml = virDomainDefFormat(def, cfg->caps, VIR_DOMAIN_DEF_FORMAT_SECURE);
+    xml = virDomainDefFormat(def, driver->xmlopt, cfg->caps, VIR_DOMAIN_DEF_FORMAT_SECURE);
     /* Valid xml means success! EndJob in the confirm phase */
     if (xml)
         goto cleanup;
@@ -494,7 +494,7 @@ libxlDomainMigrationPrepareAny(virConnectPtr dconn,
         char *xml;
         int hookret;
 
-        if (!(xml = virDomainDefFormat(*def, cfg->caps,
+        if (!(xml = virDomainDefFormat(*def, driver->xmlopt, cfg->caps,
                                        VIR_DOMAIN_XML_SECURE |
                                        VIR_DOMAIN_XML_MIGRATABLE)))
             return -1;
diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c
index cb0ab6e0d5..6c12543274 100644
--- a/src/lxc/lxc_driver.c
+++ b/src/lxc/lxc_driver.c
@@ -987,7 +987,7 @@ static char *lxcDomainGetXMLDesc(virDomainPtr dom,
 
     ret = virDomainDefFormat((flags & VIR_DOMAIN_XML_INACTIVE) &&
                              vm->newDef ? vm->newDef : vm->def,
-                             driver->caps,
+                             driver->xmlopt, driver->caps,
                              virDomainDefFormatConvertXMLFlags(flags));
 
  cleanup:
@@ -1019,7 +1019,7 @@ static char *lxcConnectDomainXMLFromNative(virConnectPtr conn,
     if (!(def = lxcParseConfigString(nativeConfig, caps, driver->xmlopt)))
         goto cleanup;
 
-    xml = virDomainDefFormat(def, caps, 0);
+    xml = virDomainDefFormat(def, driver->xmlopt, caps, 0);
 
  cleanup:
     virObjectUnref(caps);
diff --git a/src/lxc/lxc_process.c b/src/lxc/lxc_process.c
index cae8bbacb5..c1b8b6aa09 100644
--- a/src/lxc/lxc_process.c
+++ b/src/lxc/lxc_process.c
@@ -171,7 +171,7 @@ static void virLXCProcessCleanup(virLXCDriverPtr driver,
 
     /* now that we know it's stopped call the hook if present */
     if (virHookPresent(VIR_HOOK_DRIVER_LXC)) {
-        char *xml = virDomainDefFormat(vm->def, driver->caps, 0);
+        char *xml = virDomainDefFormat(vm->def, driver->xmlopt, driver->caps, 0);
 
         /* we can't stop the operation even if the script raised an error */
         virHookCall(VIR_HOOK_DRIVER_LXC, vm->def->name,
@@ -248,7 +248,7 @@ static void virLXCProcessCleanup(virLXCDriverPtr driver,
 
     /* The "release" hook cleans up additional resources */
     if (virHookPresent(VIR_HOOK_DRIVER_LXC)) {
-        char *xml = virDomainDefFormat(vm->def, driver->caps, 0);
+        char *xml = virDomainDefFormat(vm->def, driver->xmlopt, driver->caps, 0);
 
         /* we can't stop the operation even if the script raised an error */
         virHookCall(VIR_HOOK_DRIVER_LXC, vm->def->name,
@@ -1271,7 +1271,7 @@ int virLXCProcessStart(virConnectPtr conn,
 
     /* Run an early hook to set-up missing devices */
     if (virHookPresent(VIR_HOOK_DRIVER_LXC)) {
-        char *xml = virDomainDefFormat(vm->def, driver->caps, 0);
+        char *xml = virDomainDefFormat(vm->def, driver->xmlopt, driver->caps, 0);
         int hookret;
 
         hookret = virHookCall(VIR_HOOK_DRIVER_LXC, vm->def->name,
@@ -1379,7 +1379,7 @@ int virLXCProcessStart(virConnectPtr conn,
 
     /* now that we know it is about to start call the hook if present */
     if (virHookPresent(VIR_HOOK_DRIVER_LXC)) {
-        char *xml = virDomainDefFormat(vm->def, driver->caps, 0);
+        char *xml = virDomainDefFormat(vm->def, driver->xmlopt, driver->caps, 0);
         int hookret;
 
         hookret = virHookCall(VIR_HOOK_DRIVER_LXC, vm->def->name,
@@ -1521,7 +1521,7 @@ int virLXCProcessStart(virConnectPtr conn,
 
     /* finally we can call the 'started' hook script if any */
     if (virHookPresent(VIR_HOOK_DRIVER_LXC)) {
-        char *xml = virDomainDefFormat(vm->def, driver->caps, 0);
+        char *xml = virDomainDefFormat(vm->def, driver->xmlopt, driver->caps, 0);
         int hookret;
 
         hookret = virHookCall(VIR_HOOK_DRIVER_LXC, vm->def->name,
@@ -1701,7 +1701,7 @@ virLXCProcessReconnectDomain(virDomainObjPtr vm,
 
         /* now that we know it's reconnected call the hook if present */
         if (virHookPresent(VIR_HOOK_DRIVER_LXC)) {
-            char *xml = virDomainDefFormat(vm->def, driver->caps, 0);
+            char *xml = virDomainDefFormat(vm->def, driver->xmlopt, driver->caps, 0);
             int hookret;
 
             /* we can't stop the operation even if the script raised an error */
diff --git a/src/openvz/openvz_conf.c b/src/openvz/openvz_conf.c
index 7676656af1..8a05aa0504 100644
--- a/src/openvz/openvz_conf.c
+++ b/src/openvz/openvz_conf.c
@@ -1078,3 +1078,58 @@ int openvzGetVEID(const char *name)
                    _("Failed to parse vzlist output"));
     return -1;
 }
+
+
+static int
+openvzDomainDefPostParse(virDomainDefPtr def,
+                         virCapsPtr caps G_GNUC_UNUSED,
+                         unsigned int parseFlags G_GNUC_UNUSED,
+                         void *opaque G_GNUC_UNUSED,
+                         void *parseOpaque G_GNUC_UNUSED)
+{
+    /* fill the init path */
+    if (def->os.type == VIR_DOMAIN_OSTYPE_EXE && !def->os.init)
+        def->os.init = g_strdup("/sbin/init");
+
+    return 0;
+}
+
+
+static int
+openvzDomainDeviceDefPostParse(virDomainDeviceDefPtr dev,
+                               const virDomainDef *def G_GNUC_UNUSED,
+                               virCapsPtr caps G_GNUC_UNUSED,
+                               unsigned int parseFlags G_GNUC_UNUSED,
+                               void *opaque G_GNUC_UNUSED,
+                               void *parseOpaque G_GNUC_UNUSED)
+{
+    if (dev->type == VIR_DOMAIN_DEVICE_CHR &&
+        dev->data.chr->deviceType == VIR_DOMAIN_CHR_DEVICE_TYPE_CONSOLE &&
+        dev->data.chr->targetType == VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_NONE)
+        dev->data.chr->targetType = VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_OPENVZ;
+
+    /* forbid capabilities mode hostdev in this kind of hypervisor */
+    if (dev->type == VIR_DOMAIN_DEVICE_HOSTDEV &&
+        dev->data.hostdev->mode == VIR_DOMAIN_HOSTDEV_MODE_CAPABILITIES) {
+        virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                       _("hostdev mode 'capabilities' is not "
+                         "supported in %s"),
+                       virDomainVirtTypeToString(def->virtType));
+        return -1;
+    }
+
+    return 0;
+}
+
+
+virDomainDefParserConfig openvzDomainDefParserConfig = {
+    .domainPostParseCallback = openvzDomainDefPostParse,
+    .devicesPostParseCallback = openvzDomainDeviceDefPostParse,
+    .features = VIR_DOMAIN_DEF_FEATURE_NAME_SLASH,
+};
+
+virDomainXMLOptionPtr openvzXMLOption(void)
+{
+    return virDomainXMLOptionNew(&openvzDomainDefParserConfig,
+                                 NULL, NULL, NULL, NULL);
+}
diff --git a/src/openvz/openvz_conf.h b/src/openvz/openvz_conf.h
index cd42d697ce..6463c1704a 100644
--- a/src/openvz/openvz_conf.h
+++ b/src/openvz/openvz_conf.h
@@ -63,3 +63,4 @@ int strtoI(const char *str);
 int openvzSetDefinedUUID(int vpsid, unsigned char *uuid);
 int openvzGetVEID(const char *name);
 int openvzReadNetworkConf(virDomainDefPtr def, int veid);
+virDomainXMLOptionPtr openvzXMLOption(void);
diff --git a/src/openvz/openvz_driver.c b/src/openvz/openvz_driver.c
index e07b3b302d..e479ebf58d 100644
--- a/src/openvz/openvz_driver.c
+++ b/src/openvz/openvz_driver.c
@@ -110,55 +110,6 @@ openvzDomObjFromDomain(struct openvz_driver *driver,
 }
 
 
-static int
-openvzDomainDefPostParse(virDomainDefPtr def,
-                         virCapsPtr caps G_GNUC_UNUSED,
-                         unsigned int parseFlags G_GNUC_UNUSED,
-                         void *opaque G_GNUC_UNUSED,
-                         void *parseOpaque G_GNUC_UNUSED)
-{
-    /* fill the init path */
-    if (def->os.type == VIR_DOMAIN_OSTYPE_EXE && !def->os.init)
-        def->os.init = g_strdup("/sbin/init");
-
-    return 0;
-}
-
-
-static int
-openvzDomainDeviceDefPostParse(virDomainDeviceDefPtr dev,
-                               const virDomainDef *def G_GNUC_UNUSED,
-                               virCapsPtr caps G_GNUC_UNUSED,
-                               unsigned int parseFlags G_GNUC_UNUSED,
-                               void *opaque G_GNUC_UNUSED,
-                               void *parseOpaque G_GNUC_UNUSED)
-{
-    if (dev->type == VIR_DOMAIN_DEVICE_CHR &&
-        dev->data.chr->deviceType == VIR_DOMAIN_CHR_DEVICE_TYPE_CONSOLE &&
-        dev->data.chr->targetType == VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_NONE)
-        dev->data.chr->targetType = VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_OPENVZ;
-
-    /* forbid capabilities mode hostdev in this kind of hypervisor */
-    if (dev->type == VIR_DOMAIN_DEVICE_HOSTDEV &&
-        dev->data.hostdev->mode == VIR_DOMAIN_HOSTDEV_MODE_CAPABILITIES) {
-        virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
-                       _("hostdev mode 'capabilities' is not "
-                         "supported in %s"),
-                       virDomainVirtTypeToString(def->virtType));
-        return -1;
-    }
-
-    return 0;
-}
-
-
-virDomainDefParserConfig openvzDomainDefParserConfig = {
-    .domainPostParseCallback = openvzDomainDefPostParse,
-    .devicesPostParseCallback = openvzDomainDeviceDefPostParse,
-    .features = VIR_DOMAIN_DEF_FEATURE_NAME_SLASH,
-};
-
-
 /* generate arguments to create OpenVZ container
    return -1 - error
            0 - OK
@@ -522,7 +473,7 @@ static char *openvzDomainGetXMLDesc(virDomainPtr dom, unsigned int flags) {
     if (!(vm = openvzDomObjFromDomain(driver, dom->uuid)))
         return NULL;
 
-    ret = virDomainDefFormat(vm->def, driver->caps,
+    ret = virDomainDefFormat(vm->def, driver->xmlopt, driver->caps,
                              virDomainDefFormatConvertXMLFlags(flags));
 
     virDomainObjEndAPI(&vm);
@@ -1360,8 +1311,7 @@ static virDrvOpenStatus openvzConnectOpen(virConnectPtr conn,
     if (!(driver->caps = openvzCapsInit()))
         goto cleanup;
 
-    if (!(driver->xmlopt = virDomainXMLOptionNew(&openvzDomainDefParserConfig,
-                                                 NULL, NULL, NULL, NULL)))
+    if (!(driver->xmlopt = openvzXMLOption()))
         goto cleanup;
 
     if (openvzLoadDomains(driver) < 0)
@@ -2117,7 +2067,7 @@ openvzDomainMigrateBegin3Params(virDomainPtr domain,
         goto cleanup;
     }
 
-    xml = virDomainDefFormat(vm->def, driver->caps,
+    xml = virDomainDefFormat(vm->def, driver->xmlopt, driver->caps,
                              VIR_DOMAIN_DEF_FORMAT_SECURE);
 
  cleanup:
diff --git a/src/phyp/phyp_driver.c b/src/phyp/phyp_driver.c
index bdfe78e035..5e00ef6448 100644
--- a/src/phyp/phyp_driver.c
+++ b/src/phyp/phyp_driver.c
@@ -3247,7 +3247,7 @@ phypDomainGetXMLDesc(virDomainPtr dom, unsigned int flags)
     if (virDomainDefSetVcpus(&def, vcpus) < 0)
         goto err;
 
-    return virDomainDefFormat(&def, phyp_driver->caps,
+    return virDomainDefFormat(&def, phyp_driver->xmlopt, phyp_driver->caps,
                               virDomainDefFormatConvertXMLFlags(flags));
 
  err:
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index ad08e29bb3..91d5e796bb 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -9198,9 +9198,8 @@ qemuDomainDefFormatBufInternal(virQEMUDriverPtr driver,
     }
 
  format:
-    ret = virDomainDefFormatInternal(def, caps,
-                                     virDomainDefFormatConvertXMLFlags(flags),
-                                     buf, driver->xmlopt);
+    ret = virDomainDefFormatInternal(def, driver->xmlopt, caps, buf,
+                                     virDomainDefFormatConvertXMLFlags(flags));
 
  cleanup:
     virDomainDefFree(copy);
diff --git a/src/security/security_apparmor.c b/src/security/security_apparmor.c
index 21560b2330..6da79203d7 100644
--- a/src/security/security_apparmor.c
+++ b/src/security/security_apparmor.c
@@ -168,7 +168,7 @@ load_profile(virSecurityManagerPtr mgr G_GNUC_UNUSED,
     char *xml = NULL;
     virCommandPtr cmd = NULL;
 
-    xml = virDomainDefFormat(def, NULL, VIR_DOMAIN_DEF_FORMAT_SECURE);
+    xml = virDomainDefFormat(def, NULL, NULL, VIR_DOMAIN_DEF_FORMAT_SECURE);
     if (!xml)
         goto cleanup;
 
diff --git a/src/test/test_driver.c b/src/test/test_driver.c
index 5883722d60..e7ec537bb0 100644
--- a/src/test/test_driver.c
+++ b/src/test/test_driver.c
@@ -2177,7 +2177,8 @@ testDomainSaveImageWrite(testDriverPtr driver,
     int fd = -1;
     g_autofree char *xml = NULL;
 
-    xml = virDomainDefFormat(def, driver->caps, VIR_DOMAIN_DEF_FORMAT_SECURE);
+    xml = virDomainDefFormat(def, driver->xmlopt, driver->caps,
+                             VIR_DOMAIN_DEF_FORMAT_SECURE);
 
     if (xml == NULL) {
         virReportSystemError(errno,
@@ -2466,7 +2467,8 @@ testDomainSaveImageGetXMLDesc(virConnectPtr conn,
     if ((fd = testDomainSaveImageOpen(privconn, path, &def)) < 0)
         goto cleanup;
 
-    ret = virDomainDefFormat(def, privconn->caps, VIR_DOMAIN_DEF_FORMAT_SECURE);
+    ret = virDomainDefFormat(def, privconn->xmlopt, privconn->caps,
+                             VIR_DOMAIN_DEF_FORMAT_SECURE);
 
  cleanup:
     virDomainDefFree(def);
@@ -3177,7 +3179,7 @@ static char *testDomainGetXMLDesc(virDomainPtr domain, unsigned int flags)
     def = (flags & VIR_DOMAIN_XML_INACTIVE) &&
         privdom->newDef ? privdom->newDef : privdom->def;
 
-    ret = virDomainDefFormat(def, privconn->caps,
+    ret = virDomainDefFormat(def, privconn->xmlopt, privconn->caps,
                              virDomainDefFormatConvertXMLFlags(flags));
 
     virDomainObjEndAPI(&privdom);
diff --git a/src/vbox/vbox_common.c b/src/vbox/vbox_common.c
index de98dc5c84..0d22c94e06 100644
--- a/src/vbox/vbox_common.c
+++ b/src/vbox/vbox_common.c
@@ -4126,7 +4126,7 @@ static char *vboxDomainGetXMLDesc(virDomainPtr dom, unsigned int flags)
     /* dump USB devices/filters if active */
     vboxHostDeviceGetXMLDesc(data, def, machine);
 
-    ret = virDomainDefFormat(def, data->caps,
+    ret = virDomainDefFormat(def, data->xmlopt, data->caps,
                              virDomainDefFormatConvertXMLFlags(flags));
 
  cleanup:
diff --git a/src/vmware/vmware_driver.c b/src/vmware/vmware_driver.c
index 83974531d5..c0071fc18c 100644
--- a/src/vmware/vmware_driver.c
+++ b/src/vmware/vmware_driver.c
@@ -935,7 +935,7 @@ vmwareDomainGetXMLDesc(virDomainPtr dom, unsigned int flags)
     if (!(vm = vmwareDomObjFromDomain(driver, dom->uuid)))
         return NULL;
 
-    ret = virDomainDefFormat(vm->def, driver->caps,
+    ret = virDomainDefFormat(vm->def, driver->xmlopt, driver->caps,
                              virDomainDefFormatConvertXMLFlags(flags));
 
     virDomainObjEndAPI(&vm);
@@ -968,7 +968,7 @@ vmwareConnectDomainXMLFromNative(virConnectPtr conn, const char *nativeFormat,
     def = virVMXParseConfig(&ctx, driver->xmlopt, driver->caps, nativeConfig);
 
     if (def != NULL)
-        xml = virDomainDefFormat(def, driver->caps,
+        xml = virDomainDefFormat(def, driver->xmlopt, driver->caps,
                                  VIR_DOMAIN_DEF_FORMAT_INACTIVE);
 
     virDomainDefFree(def);
diff --git a/src/vz/vz_driver.c b/src/vz/vz_driver.c
index 6b925653d5..1166b77b2c 100644
--- a/src/vz/vz_driver.c
+++ b/src/vz/vz_driver.c
@@ -728,7 +728,7 @@ vzDomainGetXMLDesc(virDomainPtr domain, unsigned int flags)
     def = (flags & VIR_DOMAIN_XML_INACTIVE) &&
         dom->newDef ? dom->newDef : dom->def;
 
-    ret = virDomainDefFormat(def, privconn->driver->caps, flags);
+    ret = virDomainDefFormat(def, driver->xmlopt, privconn->driver->caps, flags);
 
  cleanup:
     virDomainObjEndAPI(&dom);
@@ -2872,7 +2872,7 @@ vzDomainMigrateBeginStep(virDomainObjPtr dom,
                      | VZ_MIGRATION_COOKIE_DOMAIN_NAME) < 0)
         return NULL;
 
-    return virDomainDefFormat(dom->def, driver->caps,
+    return virDomainDefFormat(dom->def, driver->xmlopt, driver->caps,
                               VIR_DOMAIN_XML_MIGRATABLE);
 }
 
diff --git a/tests/Makefile.am b/tests/Makefile.am
index cbe8e86224..465c176ffd 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -747,7 +747,8 @@ if WITH_OPENVZ
 openvzutilstest_SOURCES = \
 	openvzutilstest.c \
 	testutils.c testutils.h
-openvzutilstest_LDADD = $(LDADDS)
+openvzutilstest_LDADD = $(LDADDS) \
+	../src/libvirt_driver_openvz.la
 else ! WITH_OPENVZ
 EXTRA_DIST += openvzutilstest.c
 endif ! WITH_OPENVZ
diff --git a/tests/lxcconf2xmltest.c b/tests/lxcconf2xmltest.c
index c52c6e7fd7..7adc23be9f 100644
--- a/tests/lxcconf2xmltest.c
+++ b/tests/lxcconf2xmltest.c
@@ -42,7 +42,7 @@ testCompareXMLToConfigFiles(const char *xmlfile,
         if (testSanitizeDef(vmdef) < 0)
             goto fail;
 
-        if (!(actualxml = virDomainDefFormat(vmdef, caps, 0)))
+        if (!(actualxml = virDomainDefFormat(vmdef, xmlopt, caps, 0)))
             goto fail;
 
         if (virTestCompareToFile(actualxml, xmlfile) < 0)
diff --git a/tests/openvzutilstest.c b/tests/openvzutilstest.c
index 83969197c6..f43867ddc9 100644
--- a/tests/openvzutilstest.c
+++ b/tests/openvzutilstest.c
@@ -98,6 +98,7 @@ testReadNetworkConf(const void *data G_GNUC_UNUSED)
         "    </interface>\n"
         "  </devices>\n"
         "</domain>\n";
+    virDomainXMLOptionPtr xmlopt = openvzXMLOption();
 
     if (!(def = virDomainDefNew()))
         goto cleanup;
@@ -112,7 +113,7 @@ testReadNetworkConf(const void *data G_GNUC_UNUSED)
         goto cleanup;
     }
 
-    actual = virDomainDefFormat(def, NULL, VIR_DOMAIN_DEF_FORMAT_INACTIVE);
+    actual = virDomainDefFormat(def, xmlopt, NULL, VIR_DOMAIN_DEF_FORMAT_INACTIVE);
 
     if (actual == NULL) {
         fprintf(stderr, "ERROR: %s\n", virGetLastErrorMessage());
@@ -127,6 +128,7 @@ testReadNetworkConf(const void *data G_GNUC_UNUSED)
     result = 0;
 
  cleanup:
+    virObjectUnref(xmlopt);
     VIR_FREE(actual);
     virDomainDefFree(def);
 
diff --git a/tests/qemuhotplugtest.c b/tests/qemuhotplugtest.c
index 7278a6a6ba..9fbc1e1a64 100644
--- a/tests/qemuhotplugtest.c
+++ b/tests/qemuhotplugtest.c
@@ -200,7 +200,7 @@ testQemuHotplugCheckResult(virDomainObjPtr vm,
     char *actual;
     int ret;
 
-    actual = virDomainDefFormat(vm->def, driver.caps,
+    actual = virDomainDefFormat(vm->def, driver.xmlopt, driver.caps,
                                 VIR_DOMAIN_DEF_FORMAT_SECURE);
     if (!actual)
         return -1;
@@ -466,7 +466,7 @@ testQemuHotplugCpuFinalize(struct testQemuHotplugCpuData *data)
     char *configXML = NULL;
 
     if (data->file_xml_res_live) {
-        if (!(activeXML = virDomainDefFormat(data->vm->def, driver.caps,
+        if (!(activeXML = virDomainDefFormat(data->vm->def, driver.xmlopt, driver.caps,
                                              VIR_DOMAIN_DEF_FORMAT_SECURE)))
             goto cleanup;
 
@@ -475,7 +475,7 @@ testQemuHotplugCpuFinalize(struct testQemuHotplugCpuData *data)
     }
 
     if (data->file_xml_res_conf) {
-        if (!(configXML = virDomainDefFormat(data->vm->newDef, driver.caps,
+        if (!(configXML = virDomainDefFormat(data->vm->newDef, driver.xmlopt, driver.caps,
                                              VIR_DOMAIN_DEF_FORMAT_SECURE |
                                              VIR_DOMAIN_DEF_FORMAT_INACTIVE)))
             goto cleanup;
diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
index 8b43f35f06..a8f7dd4e1b 100644
--- a/tests/qemuxml2xmltest.c
+++ b/tests/qemuxml2xmltest.c
@@ -68,7 +68,7 @@ testCompareStatusXMLToXMLFiles(const void *opaque)
         goto cleanup;
     }
 
-    if (!(actual = virDomainObjFormat(driver.xmlopt, obj, NULL,
+    if (!(actual = virDomainObjFormat(obj, driver.xmlopt, NULL,
                                       VIR_DOMAIN_DEF_FORMAT_SECURE |
                                       VIR_DOMAIN_DEF_FORMAT_STATUS |
                                       VIR_DOMAIN_DEF_FORMAT_ACTUAL_NET |
diff --git a/tests/testutils.c b/tests/testutils.c
index 387ba55908..ffcb56ca86 100644
--- a/tests/testutils.c
+++ b/tests/testutils.c
@@ -1140,7 +1140,7 @@ testCompareDomXML2XMLFiles(virCapsPtr caps, virDomainXMLOptionPtr xmlopt,
         goto out;
     }
 
-    if (!(actual = virDomainDefFormat(def, caps, format_flags))) {
+    if (!(actual = virDomainDefFormat(def, xmlopt, caps, format_flags))) {
         result = TEST_COMPARE_DOM_XML2XML_RESULT_FAIL_FORMAT;
         goto out;
     }
diff --git a/tests/vmx2xmltest.c b/tests/vmx2xmltest.c
index ad7b3360c3..72ee2a38c8 100644
--- a/tests/vmx2xmltest.c
+++ b/tests/vmx2xmltest.c
@@ -84,7 +84,7 @@ testCompareFiles(const char *vmx, const char *xml)
         goto cleanup;
     }
 
-    if (!(formatted = virDomainDefFormat(def, caps,
+    if (!(formatted = virDomainDefFormat(def, xmlopt, caps,
                                          VIR_DOMAIN_DEF_FORMAT_SECURE)))
         goto cleanup;
 
diff --git a/tests/xlconfigtest.c b/tests/xlconfigtest.c
index 5a094e3b0e..890d8bf2b4 100644
--- a/tests/xlconfigtest.c
+++ b/tests/xlconfigtest.c
@@ -146,7 +146,8 @@ testCompareFormatXML(const char *xlcfg, const char *xml, bool replaceVars)
     if (!(def = xenParseXL(conf, caps, xmlopt)))
         goto fail;
 
-    if (!(gotxml = virDomainDefFormat(def, caps, VIR_DOMAIN_XML_INACTIVE |
+    if (!(gotxml = virDomainDefFormat(def, xmlopt, caps,
+                                      VIR_DOMAIN_XML_INACTIVE |
                                       VIR_DOMAIN_XML_SECURE)))
         goto fail;
 
diff --git a/tests/xmconfigtest.c b/tests/xmconfigtest.c
index 82f4908a63..4a4d4192db 100644
--- a/tests/xmconfigtest.c
+++ b/tests/xmconfigtest.c
@@ -100,7 +100,7 @@ testCompareFormatXML(const char *xmcfg, const char *xml)
     if (!(def = xenParseXM(conf, caps, xmlopt)))
         goto fail;
 
-    if (!(gotxml = virDomainDefFormat(def, caps, VIR_DOMAIN_DEF_FORMAT_SECURE)))
+    if (!(gotxml = virDomainDefFormat(def, xmlopt, caps, VIR_DOMAIN_DEF_FORMAT_SECURE)))
         goto fail;
 
     if (virTestCompareToFile(gotxml, xml) < 0)
-- 
2.23.0




More information about the libvir-list mailing list