]> xenbits.xensource.com Git - libvirt.git/commitdiff
snapshot: let virsh edit disk snapshots
authorEric Blake <eblake@redhat.com>
Thu, 6 Oct 2011 22:58:28 +0000 (16:58 -0600)
committerEric Blake <eblake@redhat.com>
Fri, 7 Oct 2011 14:29:50 +0000 (08:29 -0600)
It was impossible for 'virsh snapshot-current dom name' to set name
as the current snapshot, if name is a disk-only snapshot.

Using strstr rather than full-blown xml parsing is safe, since the
xml is assumed to be well-formed coming from libvirtd rather than
arbitrary text coming from the user.

* tools/virsh.c (cmdSnapshotCurrent, cmdSnapshotEdit): Pass
disk_only flag when redefining a disk snapshot.

tools/virsh.c

index 62581f6b39dc463d1dfd05f5c36acaf2845f15ef..3da8bc5288ddbb5ce521fcca30f5c3ca2ff208d7 100644 (file)
@@ -12869,6 +12869,10 @@ cmdSnapshotEdit(vshControl *ctl, const vshCmd *cmd)
     virDomainSnapshotFree(snapshot);
     snapshot = NULL;
 
+    /* strstr is safe here, since xml came from libvirt API and not user */
+    if (strstr(doc, "<state>disk-snapshot</state>"))
+        define_flags |= VIR_DOMAIN_SNAPSHOT_CREATE_DISK_ONLY;
+
     /* Create and open the temporary file.  */
     tmp = editWriteToTempFile(ctl, doc);
     if (!tmp)
@@ -12978,6 +12982,9 @@ cmdSnapshotCurrent(vshControl *ctl, const vshCmd *cmd)
         xml = virDomainSnapshotGetXMLDesc(snapshot, VIR_DOMAIN_XML_SECURE);
         if (!xml)
             goto cleanup;
+        /* strstr is safe here, since xml came from libvirt API and not user */
+        if (strstr(xml, "<state>disk-snapshot</state>"))
+            flags |= VIR_DOMAIN_SNAPSHOT_CREATE_DISK_ONLY;
         snapshot2 = virDomainSnapshotCreateXML(dom, xml, flags);
         if (snapshot2 == NULL)
             goto cleanup;