From 731f9a5e5613c626249a43e07e288c89fbb4cf0c Mon Sep 17 00:00:00 2001 From: Eric Blake Date: Thu, 6 Oct 2011 16:58:28 -0600 Subject: [PATCH] snapshot: let virsh edit disk snapshots 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 | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tools/virsh.c b/tools/virsh.c index 62581f6b39..3da8bc5288 100644 --- a/tools/virsh.c +++ b/tools/virsh.c @@ -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, "disk-snapshot")) + 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, "disk-snapshot")) + flags |= VIR_DOMAIN_SNAPSHOT_CREATE_DISK_ONLY; snapshot2 = virDomainSnapshotCreateXML(dom, xml, flags); if (snapshot2 == NULL) goto cleanup;