[libvirt] [PATCH v2 2/2] check compression program is available at config

KAMEZAWA Hiroyuki kamezawa.hiroyu at jp.fujitsu.com
Fri Oct 22 09:42: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