]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemu: check compression program availability of virsh save and dump
authorKAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Thu, 28 Oct 2010 08:51:18 +0000 (17:51 +0900)
committerEric Blake <eblake@redhat.com>
Fri, 29 Oct 2010 16:22:08 +0000 (10:22 -0600)
src/qemu/qemu_driver.c

index 8aa593175e40ba40188e6120a02502a5dadbda50..a7cce6ae411c0fe6c4db2affbee1af2fc73968df 100644 (file)
@@ -5742,6 +5742,22 @@ cleanup:
     return ret;
 }
 
+/* Returns true if a compression program is available in PATH */
+static bool qemudCompressProgramAvailable(enum qemud_save_formats compress)
+{
+    const char *prog;
+    char *c;
+
+    if (compress == QEMUD_SAVE_FORMAT_RAW)
+        return true;
+    prog = qemudSaveCompressionTypeToString(compress);
+    c = virFindFileInPath(prog);
+    if (!c)
+        return false;
+    VIR_FREE(c);
+    return true;
+}
+
 static int qemudDomainSave(virDomainPtr dom, const char *path)
 {
     struct qemud_driver *driver = dom->conn->privateData;
@@ -5761,6 +5777,12 @@ static int qemudDomainSave(virDomainPtr dom, const char *path)
                                     "in configuration file"));
             return -1;
         }
+        if (!qemudCompressProgramAvailable(compressed)) {
+            qemuReportError(VIR_ERR_OPERATION_FAILED,
+                            "%s", _("Compression program for image format "
+                                    "in configuration file isn't available"));
+            return -1;
+        }
     }
 
     vm = virDomainFindByUUID(&driver->domains, dom->uuid);
@@ -5924,6 +5946,12 @@ static int qemudDomainCoreDump(virDomainPtr dom,
                              "configuration file"));
            return -1;
         }
+        if (!qemudCompressProgramAvailable(compress)) {
+            qemuReportError(VIR_ERR_OPERATION_FAILED,
+                            "%s", _("Compression program for dump image format "
+                                    "in configuration file isn't available"));
+            return -1;
+        }
     }
 
     qemuDriverLock(driver);