From 8d173c47b79ed23ee14853ffc9fea3efa9044f1b Mon Sep 17 00:00:00 2001 From: Eric Blake Date: Wed, 6 Jul 2011 17:06:11 -0600 Subject: [PATCH] vbox: reject unknown flags * src/vbox/vbox_driver.c (vboxOpenDummy): Reject unknown flags. * src/vbox/vbox_tmpl.c (vboxOpen, vboxDomainReboot) (vboxNetworkOpen, vboxNetworkGetXMLDesc, vboxStorageOpen) (vboxStorageVolCreateXML, vboxStorageVolDelete) (vboxStorageVolGetXMLDesc, vboxDomainScreenshot): Likewise. --- src/vbox/vbox_driver.c | 5 ++++- src/vbox/vbox_tmpl.c | 44 +++++++++++++++++++++++++++++++++--------- 2 files changed, 39 insertions(+), 10 deletions(-) diff --git a/src/vbox/vbox_driver.c b/src/vbox/vbox_driver.c index b20998a209..430ab40699 100644 --- a/src/vbox/vbox_driver.c +++ b/src/vbox/vbox_driver.c @@ -142,9 +142,12 @@ int vboxRegister(void) { static virDrvOpenStatus vboxOpenDummy(virConnectPtr conn, virConnectAuthPtr auth ATTRIBUTE_UNUSED, - unsigned int flags ATTRIBUTE_UNUSED) { + unsigned int flags) +{ uid_t uid = getuid(); + virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR); + if (conn->uri == NULL || conn->uri->scheme == NULL || STRNEQ (conn->uri->scheme, "vbox") || diff --git a/src/vbox/vbox_tmpl.c b/src/vbox/vbox_tmpl.c index 7003316c1b..6cb9bb4ce6 100644 --- a/src/vbox/vbox_tmpl.c +++ b/src/vbox/vbox_tmpl.c @@ -961,10 +961,13 @@ static void vboxUninitialize(vboxGlobalData *data) { static virDrvOpenStatus vboxOpen(virConnectPtr conn, virConnectAuthPtr auth ATTRIBUTE_UNUSED, - unsigned int flags ATTRIBUTE_UNUSED) { + unsigned int flags) +{ vboxGlobalData *data = NULL; uid_t uid = getuid(); + virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR); + if (conn->uri == NULL) { conn->uri = xmlParseURI(uid ? "vbox:///session" : "vbox:///system"); if (conn->uri == NULL) { @@ -1637,7 +1640,8 @@ cleanup: return ret; } -static int vboxDomainReboot(virDomainPtr dom, unsigned int flags ATTRIBUTE_UNUSED) { +static int vboxDomainReboot(virDomainPtr dom, unsigned int flags) +{ VBOX_OBJECT_CHECK(dom->conn, int, -1); IMachine *machine = NULL; vboxIID iid = VBOX_IID_INITIALIZER; @@ -1646,6 +1650,8 @@ static int vboxDomainReboot(virDomainPtr dom, unsigned int flags ATTRIBUTE_UNUSE PRBool isAccessible = PR_FALSE; nsresult rc; + virCheckFlags(0, -1); + vboxIIDFromUUID(&iid, dom->uuid); rc = VBOX_OBJECT_GET_MACHINE(iid.value, &machine); if (NS_FAILED(rc)) { @@ -6939,9 +6945,12 @@ static int vboxDomainEventDeregisterAny(virConnectPtr conn, */ static virDrvOpenStatus vboxNetworkOpen(virConnectPtr conn, virConnectAuthPtr auth ATTRIBUTE_UNUSED, - unsigned int flags ATTRIBUTE_UNUSED) { + unsigned int flags) +{ vboxGlobalData *data = conn->privateData; + virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR); + if (STRNEQ(conn->driver->name, "VBOX")) goto cleanup; @@ -7576,7 +7585,8 @@ static int vboxNetworkDestroy(virNetworkPtr network) { } static char *vboxNetworkGetXMLDesc(virNetworkPtr network, - unsigned int flags ATTRIBUTE_UNUSED) { + unsigned int flags) +{ VBOX_OBJECT_HOST_CHECK(network->conn, char *, NULL); virNetworkDefPtr def = NULL; virNetworkIpDefPtr ipdef = NULL; @@ -7584,6 +7594,8 @@ static char *vboxNetworkGetXMLDesc(virNetworkPtr network, PRUnichar *networkInterfaceNameUtf16 = NULL; IHostNetworkInterface *networkInterface = NULL; + virCheckFlags(0, NULL); + if (VIR_ALLOC(def) < 0) { virReportOOMError(); goto cleanup; @@ -7751,9 +7763,12 @@ cleanup: static virDrvOpenStatus vboxStorageOpen (virConnectPtr conn, virConnectAuthPtr auth ATTRIBUTE_UNUSED, - unsigned int flags ATTRIBUTE_UNUSED) { + unsigned int flags) +{ vboxGlobalData *data = conn->privateData; + virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR); + if (STRNEQ(conn->driver->name, "VBOX")) return VIR_DRV_OPEN_DECLINED; @@ -8096,7 +8111,8 @@ static virStorageVolPtr vboxStorageVolLookupByPath(virConnectPtr conn, const cha static virStorageVolPtr vboxStorageVolCreateXML(virStoragePoolPtr pool, const char *xml, - unsigned int flags ATTRIBUTE_UNUSED) { + unsigned int flags) +{ VBOX_OBJECT_CHECK(pool->conn, virStorageVolPtr, NULL); virStorageVolDefPtr def = NULL; PRUnichar *hddFormatUtf16 = NULL; @@ -8104,6 +8120,8 @@ static virStorageVolPtr vboxStorageVolCreateXML(virStoragePoolPtr pool, virStoragePoolDef poolDef; nsresult rc; + virCheckFlags(0, NULL); + /* since there is currently one default pool now * and virStorageVolDefFormat() just checks it type * so just assign it for now, change the behaviour @@ -8189,7 +8207,8 @@ cleanup: } static int vboxStorageVolDelete(virStorageVolPtr vol, - unsigned int flags ATTRIBUTE_UNUSED) { + unsigned int flags) +{ VBOX_OBJECT_CHECK(vol->conn, int, -1); vboxIID hddIID = VBOX_IID_INITIALIZER; unsigned char uuid[VIR_UUID_BUFLEN]; @@ -8199,6 +8218,8 @@ static int vboxStorageVolDelete(virStorageVolPtr vol, int i = 0; int j = 0; + virCheckFlags(0, -1); + if (virUUIDParse(vol->key, uuid) < 0) { vboxError(VIR_ERR_INVALID_ARG, _("Could not parse UUID from '%s'"), vol->key); @@ -8422,7 +8443,8 @@ static int vboxStorageVolGetInfo(virStorageVolPtr vol, virStorageVolInfoPtr info return ret; } -static char *vboxStorageVolGetXMLDesc(virStorageVolPtr vol, unsigned int flags ATTRIBUTE_UNUSED) { +static char *vboxStorageVolGetXMLDesc(virStorageVolPtr vol, unsigned int flags) +{ VBOX_OBJECT_CHECK(vol->conn, char *, NULL); IHardDisk *hardDisk = NULL; unsigned char uuid[VIR_UUID_BUFLEN]; @@ -8432,6 +8454,8 @@ static char *vboxStorageVolGetXMLDesc(virStorageVolPtr vol, unsigned int flags A int defOk = 0; nsresult rc; + virCheckFlags(0, NULL); + memset(&pool, 0, sizeof(pool)); memset(&def, 0, sizeof(def)); @@ -8595,7 +8619,7 @@ static char * vboxDomainScreenshot(virDomainPtr dom, virStreamPtr st, unsigned int screen, - unsigned int flags ATTRIBUTE_UNUSED) + unsigned int flags) { VBOX_OBJECT_CHECK(dom->conn, char *, NULL); IConsole *console = NULL; @@ -8606,6 +8630,8 @@ vboxDomainScreenshot(virDomainPtr dom, int tmp_fd = -1; unsigned int max_screen; + virCheckFlags(0, NULL); + vboxIIDFromUUID(&iid, dom->uuid); rc = VBOX_OBJECT_GET_MACHINE(iid.value, &machine); if (NS_FAILED(rc)) {