]> xenbits.xensource.com Git - libvirt.git/commitdiff
conf: backup: Add 'tls' attribute for 'server' element
authorPeter Krempa <pkrempa@redhat.com>
Wed, 1 Jul 2020 10:25:42 +0000 (12:25 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Tue, 7 Jul 2020 10:58:19 +0000 (12:58 +0200)
Allow enabling TLS for the NBD server used to do pull-mode backups. Note
that documentation already mentions 'tls', so this just implements the
schema and XML bits.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
docs/schemas/domainbackup.rng
src/conf/backup_conf.c
src/conf/backup_conf.h
tests/domainbackupxml2xmlin/backup-pull-encrypted.xml
tests/domainbackupxml2xmlin/backup-pull-internal-invalid.xml
tests/domainbackupxml2xmlout/backup-pull-encrypted.xml

index 5165175152caedf09751878d54491e8e836316fa..c0e17f512bd11d2a6f35bcd97cd2faca29d6ef84 100644 (file)
             </attribute>
             <interleave>
               <element name='server'>
+                <optional>
+                  <attribute name='tls'>
+                    <choice>
+                      <value>yes</value>
+                      <value>no</value>
+                    </choice>
+                  </attribute>
+                </optional>
                 <choice>
                   <group>
                     <optional>
@@ -69,7 +77,6 @@
                         <ref name='unsignedInt'/>
                       </attribute>
                     </optional>
-                    <!-- add tls? -->
                   </group>
                   <group>
                     <attribute name='transport'>
index 2fb741807bfd05ffc6434bfab8e4afa8c494587d..781dd53f6bbf062192d5c034cefeae3b37e64d16 100644 (file)
@@ -239,6 +239,8 @@ virDomainBackupDefParse(xmlXPathContextPtr ctxt,
     def->incremental = virXPathString("string(./incremental)", ctxt);
 
     if ((node = virXPathNode("./server", ctxt))) {
+        g_autofree char *tls = NULL;
+
         if (def->type != VIR_DOMAIN_BACKUP_TYPE_PULL) {
             virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
                            _("use of <server> requires pull mode backup"));
@@ -263,6 +265,19 @@ virDomainBackupDefParse(xmlXPathContextPtr ctxt,
                            def->server->socket);
             return NULL;
         }
+
+        if ((tls = virXMLPropString(node, "tls"))) {
+            int tmp;
+
+            if ((tmp = virTristateBoolTypeFromString(tls)) <= 0) {
+                virReportError(VIR_ERR_XML_ERROR,
+                               _("unknown value '%s' of 'tls' attribute"),\
+                               tls);
+                return NULL;
+            }
+
+            def->tls = tmp;
+        }
     }
 
     if ((n = virXPathNodeSet("./disks/*", ctxt, &nodes)) < 0)
@@ -417,6 +432,8 @@ virDomainBackupDefFormat(virBufferPtr buf,
     if (def->server) {
         virBufferAsprintf(&serverAttrBuf, " transport='%s'",
                           virStorageNetHostTransportTypeToString(def->server->transport));
+        if (def->tls != VIR_TRISTATE_BOOL_ABSENT)
+            virBufferAsprintf(&serverAttrBuf, " tls='%s'", virTristateBoolTypeToString(def->tls));
         virBufferEscapeString(&serverAttrBuf, " name='%s'", def->server->name);
         if (def->server->port)
             virBufferAsprintf(&serverAttrBuf, " port='%u'", def->server->port);
index ad5d9cb00cbcfe9a849ae79b2387adfef9842527..aa2d6d4b681a99c0c5432059ae06739b4e4aed10 100644 (file)
@@ -70,6 +70,7 @@ struct _virDomainBackupDef {
     int type; /* virDomainBackupType */
     char *incremental;
     virStorageNetHostDefPtr server; /* only when type == PULL */
+    virTristateBool tls; /* use TLS for NBD */
 
     size_t ndisks; /* should not exceed dom->ndisks */
     virDomainBackupDiskDef *disks;
index 1469189a372cef29d85db2aa5f4ef003edfaa571..48232aa0fee58725958462fa4a53d81a5397c005 100644 (file)
@@ -1,6 +1,6 @@
 <domainbackup mode="pull">
   <incremental>1525889631</incremental>
-  <server transport='tcp' name='localhost' port='10809'/>
+  <server transport='tcp' tls='yes' name='localhost' port='10809'/>
   <disks>
     <disk name='vda' type='file' exportname='test-vda' exportbitmap='blah'>
       <driver type='qcow2'/>
index 261dec0eea5e720390d208ffb082baa9890e1754..ba8f7ca3ab962036cc6c6f94f0988f024540931c 100644 (file)
@@ -1,6 +1,6 @@
 <domainbackup mode='pull'>
   <incremental>1525889631</incremental>
-  <server transport='tcp' name='localhost' port='10809'/>
+  <server transport='tcp' tls='yes' name='localhost' port='10809'/>
   <disks>
     <disk name='vda' backup='yes' state='running' type='file' exportname='test-vda' exportbitmap='blah'>
       <driver type='qcow2'/>
index 81519bfcb5cc1728cad768ebebe6d979b6f37198..ea9dcf72b95da0d4d4ec48f3a28bec5d3af88036 100644 (file)
@@ -1,6 +1,6 @@
 <domainbackup mode='pull'>
   <incremental>1525889631</incremental>
-  <server transport='tcp' name='localhost' port='10809'/>
+  <server transport='tcp' tls='yes' name='localhost' port='10809'/>
   <disks>
     <disk name='vda' backup='yes' type='file' exportname='test-vda' exportbitmap='blah'>
       <driver type='qcow2'/>