From 01422bd7940f5950a7461ffcebe1fe473e0d0530 Mon Sep 17 00:00:00 2001 From: "Daniel P. Berrange" Date: Fri, 21 Sep 2007 19:32:02 +0000 Subject: [PATCH] Fixed QEMU uri parsing/detection --- ChangeLog | 4 ++++ src/qemu_driver.c | 29 ++++++++++++++++++++++------- 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index a25c0ef7d4..cc7b4aa14c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +Fri Sep 21 15:06:00 EST 2007 Daniel P. Berrange + + * src/qemu_driver.c: Use libxml for parsing & checking URIs + Thu Sep 20 19:37:00 BST 2007 Richard W.M. Jones * src/bridge.c, src/qemu_driver.c, configure.in: Try to detect diff --git a/src/qemu_driver.c b/src/qemu_driver.c index 6482e0a106..be75081002 100644 --- a/src/qemu_driver.c +++ b/src/qemu_driver.c @@ -45,6 +45,7 @@ #include #include #include +#include #include @@ -1362,25 +1363,39 @@ static int qemudMonitorCommand(struct qemud_driver *driver ATTRIBUTE_UNUSED, static virDrvOpenStatus qemudOpen(virConnectPtr conn, - const char *name, - int flags ATTRIBUTE_UNUSED) { + const char *name, + int flags ATTRIBUTE_UNUSED) { + xmlURIPtr uri = NULL; uid_t uid = getuid(); if (qemu_driver == NULL) return VIR_DRV_OPEN_DECLINED; + uri = xmlParseURI(name); + if (uri == NULL || uri->scheme == NULL || uri->path == NULL) + goto decline; + + if (STRNEQ (uri->scheme, "qemu")) + goto decline; + if (uid != 0) { - if (STRNEQ (name, "qemu:///session")) - return VIR_DRV_OPEN_DECLINED; + if (STRNEQ (uri->path, "/session")) + goto decline; } else { /* root */ - if (STRNEQ (name, "qemu:///system") && - STRNEQ (name, "qemu:///session")) - return VIR_DRV_OPEN_DECLINED; + if (STRNEQ (uri->path, "/system") && + STRNEQ (uri->path, "/session")) + goto decline; } conn->privateData = qemu_driver; + xmlFreeURI(uri); return VIR_DRV_OPEN_SUCCESS; + + decline: + if (uri != NULL) + xmlFreeURI(uri); + return VIR_DRV_OPEN_DECLINED; } static int qemudClose(virConnectPtr conn) {