[libvirt] [PATCH v2 2/2] confirm compression program availability

KAMEZAWA Hiroyuki kamezawa.hiroyu at jp.fujitsu.com
Mon Oct 25 00:05:29 UTC 2010


At compression, external programs are used but it is not checked whether
the program is available or not.
Check it at parsing qemu.conf and find problems in early stage.

---
 src/qemu/qemu_conf.c |   46 +++++++++++++++++++++++++++++++++++++++-------
 1 file changed, 39 insertions(+), 7 deletions(-)

Index: libvirt-0.8.4/src/qemu/qemu_conf.c
===================================================================
--- libvirt-0.8.4.orig/src/qemu/qemu_conf.c
+++ libvirt-0.8.4/src/qemu/qemu_conf.c
@@ -316,22 +316,54 @@ int qemudLoadDriverConfig(struct qemud_d
     p = virConfGetValue (conf, "save_image_format");
     CHECK_TYPE ("save_image_format", VIR_CONF_STRING);
     if (p && p->str) {
-        VIR_FREE(driver->saveImageFormat);
-        if (!(driver->saveImageFormat = strdup(p->str))) {
-            virReportOOMError();
-            virConfFree(conf);
-            return -1;
-        }
+	int find = 1;
+	if (strcmp(p->str, "raw")) {
+	    char *c;
+	    c = virFindFileInPath(p->str);
+	    if (!c)
+	        find = 0;
+	    else
+	      VIR_FREE(c);
+	}
+	VIR_FREE(driver->saveImageFormat);
+	if (find) {
+            if (!(driver->saveImageFormat = strdup(p->str))) {
+	        virReportOOMError();
+		virConfFree(conf);
+		return -1;
+	    }
+	} else {
+	    qemuReportError(VIR_ERR_INTERNAL_ERROR,
+                    "save_image_format cannot find program %s", p->str);
+	    virConfFree(conf);
+	    return -1;
+	}
     }
 
     p = virConfGetValue (conf, "dump_image_format");
     CHECK_TYPE ("dump_image_format", VIR_CONF_STRING);
     if (p && p->str) {
+	int find = 1;
+	if (strcmp(p->str, "raw")) {
+            char *c;
+	    c = virFindFileInPath(p->str);
+	    if (!c)
+	        find = 0;
+	    else
+	        VIR_FREE(c);
+	}
 	VIR_FREE(driver->dumpImageFormat);
-	if (!(driver->dumpImageFormat = strdup(p->str))) {
+	if (find) {
+	    if (!(driver->dumpImageFormat = strdup(p->str))) {
 		virReportOOMError();
 		virConfFree(conf);
 		return -1;
+	    }
+	} else {
+	    qemuReportError(VIR_ERR_INTERNAL_ERROR,
+                    "dump_image_format cannot find program %s", p->str);
+	    virConfFree(conf);
+	    return -1;
 	}
     }
 




More information about the libvir-list mailing list