}
g_free(def->disks);
+
+ g_free(def->tlsAlias);
+ g_free(def->tlsSecretAlias);
+
g_free(def);
}
}
+static void
+virDomainBackupDefParsePrivate(virDomainBackupDefPtr def,
+ xmlXPathContextPtr ctxt,
+ unsigned int flags)
+{
+ if (!(flags & VIR_DOMAIN_BACKUP_PARSE_INTERNAL))
+ return;
+
+ def->tlsSecretAlias = virXPathString("string(./privateData/objects/secret[@type='tlskey']/@alias)", ctxt);
+ def->tlsAlias = virXPathString("string(./privateData/objects/TLSx509/@alias)", ctxt);
+}
+
+
static virDomainBackupDefPtr
virDomainBackupDefParse(xmlXPathContextPtr ctxt,
virDomainXMLOptionPtr xmlopt,
return NULL;
}
+ virDomainBackupDefParsePrivate(def, ctxt, flags);
+
return g_steal_pointer(&def);
}
}
+static void
+virDomainBackupDefFormatPrivate(virBufferPtr buf,
+ virDomainBackupDefPtr def,
+ bool internal)
+{
+ g_auto(virBuffer) privChildBuf = VIR_BUFFER_INIT_CHILD(buf);
+ g_auto(virBuffer) objectsChildBuf = VIR_BUFFER_INIT_CHILD(&privChildBuf);
+
+ if (!internal)
+ return;
+
+ virBufferEscapeString(&objectsChildBuf, "<secret type='tlskey' alias='%s'/>\n",
+ def->tlsSecretAlias);
+ virBufferEscapeString(&objectsChildBuf, "<TLSx509 alias='%s'/>\n", def->tlsAlias);
+
+ virXMLFormatElement(&privChildBuf, "objects", NULL, &objectsChildBuf);
+ virXMLFormatElement(buf, "privateData", NULL, &privChildBuf);
+}
+
+
int
virDomainBackupDefFormat(virBufferPtr buf,
virDomainBackupDefPtr def,
}
virXMLFormatElement(&childBuf, "disks", NULL, &disksChildBuf);
+
+ virDomainBackupDefFormatPrivate(&childBuf, def, internal);
+
virXMLFormatElement(buf, "domainbackup", &attrBuf, &childBuf);
return 0;
--- /dev/null
+<domainbackup mode='pull'>
+ <incremental>1525889631</incremental>
+ <server transport='tcp' name='localhost' port='10809'/>
+ <disks>
+ <disk name='vda' backup='yes' state='running' type='file' exportname='test-vda' exportbitmap='blah'>
+ <driver type='qcow2'/>
+ <scratch file='/path/to/file'>
+ <encryption format='luks'>
+ <secret type='passphrase' uuid='0a81f5b2-8403-7b23-c8d6-21ccc2f80d6f'/>
+ </encryption>
+ </scratch>
+ </disk>
+ <disk name='vdb' backup='yes' state='complete' type='file' exportname='test-vda' exportbitmap='blah'>
+ <driver type='qcow2'/>
+ <scratch file='/path/to/file'>
+ <encryption format='luks'>
+ <secret type='passphrase' usage='/storage/backup/vdb'/>
+ </encryption>
+ </scratch>
+ </disk>
+ <disk name='vdc' backup='yes' state='running' type='block'>
+ <driver type='qcow2'/>
+ <scratch dev='/dev/block'>
+ <encryption format='luks'>
+ <secret type='passphrase' usage='/storage/backup/vdc'/>
+ </encryption>
+ </scratch>
+ </disk>
+ </disks>
+ <privateData>
+ <objects>
+ <secret type='tlskey' alias='test-tlskey'/>
+ <TLSx509 alias='test-tlsobj'/>
+ </objects>
+ </privateData>
+</domainbackup>