From 8e4f9a2773e85b8f43aa207965a59908281fa3e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= Date: Tue, 27 Mar 2018 15:51:45 +0100 Subject: [PATCH] driver: declare supported URI schemes in virConnectDriver struct MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Declare what URI schemes a driver supports in its virConnectDriver struct. This allows us to skip trying to open the driver entirely if the URI scheme doesn't match. Signed-off-by: Daniel P. BerrangĂ© --- src/bhyve/bhyve_driver.c | 4 +--- src/driver.h | 6 ++++++ src/esx/esx_driver.c | 27 ++----------------------- src/hyperv/hyperv_driver.c | 22 ++------------------ src/interface/interface_backend_netcf.c | 4 +--- src/interface/interface_backend_udev.c | 4 +--- src/libvirt.c | 24 ++++++++++++++++++++++ src/libxl/libxl_driver.c | 5 +---- src/lxc/lxc_driver.c | 5 +---- src/network/bridge_driver.c | 4 +--- src/node_device/node_device_driver.c | 3 --- src/node_device/node_device_hal.c | 1 + src/node_device/node_device_udev.c | 1 + src/nwfilter/nwfilter_driver.c | 4 +--- src/openvz/openvz_driver.c | 6 +----- src/phyp/phyp_driver.c | 4 +--- src/qemu/qemu_driver.c | 8 +------- src/secret/secret_driver.c | 4 +--- src/storage/storage_driver.c | 4 +--- src/test/test_driver.c | 4 +--- src/uml/uml_driver.c | 5 +---- src/vbox/vbox_common.c | 4 ---- src/vbox/vbox_driver.c | 5 ++--- src/vmware/vmware_driver.c | 7 +------ src/vz/vz_driver.c | 15 ++------------ src/xenapi/xenapi_driver.c | 5 ++--- 26 files changed, 57 insertions(+), 128 deletions(-) diff --git a/src/bhyve/bhyve_driver.c b/src/bhyve/bhyve_driver.c index 2e815ca70e..49c7db6567 100644 --- a/src/bhyve/bhyve_driver.c +++ b/src/bhyve/bhyve_driver.c @@ -202,9 +202,6 @@ bhyveConnectOpen(virConnectPtr conn, if (conn->uri == NULL) { return VIR_DRV_OPEN_DECLINED; } else { - if (!conn->uri->scheme || STRNEQ(conn->uri->scheme, "bhyve")) - return VIR_DRV_OPEN_DECLINED; - if (STRNEQ_NULLABLE(conn->uri->path, "/system")) { virReportError(VIR_ERR_INTERNAL_ERROR, _("Unexpected bhyve URI path '%s', try bhyve:///system"), @@ -1736,6 +1733,7 @@ static virHypervisorDriver bhyveHypervisorDriver = { static virConnectDriver bhyveConnectDriver = { .localOnly = true, + .uriSchemes = (const char *[]){ "bhyve", NULL }, .hypervisorDriver = &bhyveHypervisorDriver, }; diff --git a/src/driver.h b/src/driver.h index 5fb0b523c8..b071a3a782 100644 --- a/src/driver.h +++ b/src/driver.h @@ -81,6 +81,12 @@ typedef virConnectDriver *virConnectDriverPtr; struct _virConnectDriver { /* Wether driver permits a server in the URI */ bool localOnly; + /* + * NULL terminated list of supported URI schemes. + * - Single element { NULL } list indicates no supported schemes + * - NULL list indicates wildcard supportnig all schemes + */ + const char **uriSchemes; virHypervisorDriverPtr hypervisorDriver; virInterfaceDriverPtr interfaceDriver; virNetworkDriverPtr networkDriver; diff --git a/src/esx/esx_driver.c b/src/esx/esx_driver.c index 927267f1cc..9b6944ba59 100644 --- a/src/esx/esx_driver.c +++ b/src/esx/esx_driver.c @@ -845,7 +845,6 @@ esxConnectOpen(virConnectPtr conn, virConnectAuthPtr auth, unsigned int flags) { virDrvOpenStatus result = VIR_DRV_OPEN_ERROR; - char *plus; esxPrivate *priv = NULL; char *potentialVCenterIPAddress = NULL; char vCenterIPAddress[NI_MAXHOST] = ""; @@ -853,32 +852,9 @@ esxConnectOpen(virConnectPtr conn, virConnectAuthPtr auth, virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR); /* Decline if the URI is NULL or the scheme is NULL */ - if (!conn->uri || !conn->uri->scheme) + if (!conn->uri) return VIR_DRV_OPEN_DECLINED; - /* Decline if the scheme is not one of {vpx|esx|gsx} */ - plus = strchr(conn->uri->scheme, '+'); - - if (!plus) { - if (STRCASENEQ(conn->uri->scheme, "vpx") && - STRCASENEQ(conn->uri->scheme, "esx") && - STRCASENEQ(conn->uri->scheme, "gsx")) { - return VIR_DRV_OPEN_DECLINED; - } - } else { - if (plus - conn->uri->scheme != 3 || - (STRCASENEQLEN(conn->uri->scheme, "vpx", 3) && - STRCASENEQLEN(conn->uri->scheme, "esx", 3) && - STRCASENEQLEN(conn->uri->scheme, "gsx", 3))) { - return VIR_DRV_OPEN_DECLINED; - } - - virReportError(VIR_ERR_INVALID_ARG, - _("Transport '%s' in URI scheme is not supported, try again " - "without the transport part"), plus + 1); - return VIR_DRV_OPEN_ERROR; - } - if (STRCASENEQ(conn->uri->scheme, "vpx") && conn->uri->path && STRNEQ(conn->uri->path, "/")) { VIR_WARN("Ignoring unexpected path '%s' for non-vpx scheme '%s'", @@ -5262,6 +5238,7 @@ static virHypervisorDriver esxHypervisorDriver = { static virConnectDriver esxConnectDriver = { + .uriSchemes = (const char *[]){ "vpx", "esx", "gsx", NULL }, .hypervisorDriver = &esxHypervisorDriver, .interfaceDriver = &esxInterfaceDriver, .networkDriver = &esxNetworkDriver, diff --git a/src/hyperv/hyperv_driver.c b/src/hyperv/hyperv_driver.c index e512b626ea..4ad8855dcc 100644 --- a/src/hyperv/hyperv_driver.c +++ b/src/hyperv/hyperv_driver.c @@ -122,7 +122,6 @@ hypervConnectOpen(virConnectPtr conn, virConnectAuthPtr auth, unsigned int flags) { virDrvOpenStatus result = VIR_DRV_OPEN_ERROR; - char *plus; hypervPrivate *priv = NULL; char *username = NULL; char *password = NULL; @@ -130,27 +129,9 @@ hypervConnectOpen(virConnectPtr conn, virConnectAuthPtr auth, virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR); /* Decline if the URI is NULL or the scheme is NULL */ - if (conn->uri == NULL || conn->uri->scheme == NULL) + if (conn->uri == NULL) return VIR_DRV_OPEN_DECLINED; - /* Decline if the scheme is not hyperv */ - plus = strchr(conn->uri->scheme, '+'); - - if (plus == NULL) { - if (STRCASENEQ(conn->uri->scheme, "hyperv")) - return VIR_DRV_OPEN_DECLINED; - } else { - if (plus - conn->uri->scheme != 6 || - STRCASENEQLEN(conn->uri->scheme, "hyperv", 6)) { - return VIR_DRV_OPEN_DECLINED; - } - - virReportError(VIR_ERR_INVALID_ARG, - _("Transport '%s' in URI scheme is not supported, try again " - "without the transport part"), plus + 1); - return VIR_DRV_OPEN_ERROR; - } - /* Require server part */ if (conn->uri->server == NULL) { virReportError(VIR_ERR_INVALID_ARG, "%s", @@ -1685,6 +1666,7 @@ hypervDebugHandler(const char *message, debug_level_e level, static virConnectDriver hypervConnectDriver = { + .uriSchemes = (const char *[]){ "hyperv", NULL }, .hypervisorDriver = &hypervHypervisorDriver, }; diff --git a/src/interface/interface_backend_netcf.c b/src/interface/interface_backend_netcf.c index 3da958980f..ff3443c8e6 100644 --- a/src/interface/interface_backend_netcf.c +++ b/src/interface/interface_backend_netcf.c @@ -164,9 +164,6 @@ netcfConnectOpen(virConnectPtr conn, /* Only hypervisor drivers are permitted to auto-open on NULL uri */ return VIR_DRV_OPEN_DECLINED; } else { - if (STRNEQ_NULLABLE(conn->uri->scheme, "interface")) - return VIR_DRV_OPEN_DECLINED; - if (driver == NULL) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("interface state driver is not active")); @@ -1221,6 +1218,7 @@ static virHypervisorDriver interfaceHypervisorDriver = { static virConnectDriver interfaceConnectDriver = { .localOnly = true, + .uriSchemes = (const char *[]){ "interface", NULL }, .hypervisorDriver = &interfaceHypervisorDriver, .interfaceDriver = &interfaceDriver, }; diff --git a/src/interface/interface_backend_udev.c b/src/interface/interface_backend_udev.c index 2b8a9da682..743aafd8ba 100644 --- a/src/interface/interface_backend_udev.c +++ b/src/interface/interface_backend_udev.c @@ -1208,9 +1208,6 @@ udevConnectOpen(virConnectPtr conn, /* Only hypervisor drivers are permitted to auto-open on NULL uri */ return VIR_DRV_OPEN_DECLINED; } else { - if (STRNEQ_NULLABLE(conn->uri->scheme, "interface")) - return VIR_DRV_OPEN_DECLINED; - if (driver == NULL) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("interface state driver is not active")); @@ -1292,6 +1289,7 @@ static virHypervisorDriver udevHypervisorDriver = { static virConnectDriver udevConnectDriver = { .localOnly = true, + .uriSchemes = (const char *[]){ "interface", NULL }, .hypervisorDriver = &udevHypervisorDriver, .interfaceDriver = &udevIfaceDriver, }; diff --git a/src/libvirt.c b/src/libvirt.c index 2b2b3ed425..cc1387341a 100644 --- a/src/libvirt.c +++ b/src/libvirt.c @@ -1073,6 +1073,30 @@ virConnectOpenInternal(const char *name, continue; } + /* Filter drivers based on declared URI schemes */ + if (virConnectDriverTab[i]->uriSchemes && ret->uri) { + bool matchScheme = false; + size_t s; + if (!ret->uri->scheme) { + VIR_DEBUG("No URI scheme, skipping driver with URI whitelist"); + continue; + } + VIR_DEBUG("Checking for supported URI schemes"); + for (s = 0; virConnectDriverTab[i]->uriSchemes[s] != NULL; s++) { + if (STREQ(ret->uri->scheme, virConnectDriverTab[i]->uriSchemes[s])) { + VIR_DEBUG("Matched URI scheme '%s'", ret->uri->scheme); + matchScheme = true; + break; + } + } + if (!matchScheme) { + VIR_DEBUG("No matching URI scheme"); + continue; + } + } else { + VIR_DEBUG("Matching any URI scheme for '%s'", ret->uri ? ret->uri->scheme : ""); + } + ret->driver = virConnectDriverTab[i]->hypervisorDriver; ret->interfaceDriver = virConnectDriverTab[i]->interfaceDriver; ret->networkDriver = virConnectDriverTab[i]->networkDriver; diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c index ce4741cf4c..872790e743 100644 --- a/src/libxl/libxl_driver.c +++ b/src/libxl/libxl_driver.c @@ -848,10 +848,6 @@ libxlConnectOpen(virConnectPtr conn, if (conn->uri == NULL) { return VIR_DRV_OPEN_DECLINED; } else { - /* Only xen scheme */ - if (conn->uri->scheme == NULL || STRNEQ(conn->uri->scheme, "xen")) - return VIR_DRV_OPEN_DECLINED; - /* Error if xen or libxl scheme specified but driver not started. */ if (libxl_driver == NULL) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", @@ -6579,6 +6575,7 @@ static virHypervisorDriver libxlHypervisorDriver = { static virConnectDriver libxlConnectDriver = { .localOnly = true, + .uriSchemes = (const char *[]){ "xen", NULL }, .hypervisorDriver = &libxlHypervisorDriver, }; diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c index 97742bfba7..43815b2f20 100644 --- a/src/lxc/lxc_driver.c +++ b/src/lxc/lxc_driver.c @@ -173,10 +173,6 @@ static virDrvOpenStatus lxcConnectOpen(virConnectPtr conn, if (conn->uri == NULL) { return VIR_DRV_OPEN_DECLINED; } else { - if (conn->uri->scheme == NULL || - STRNEQ(conn->uri->scheme, "lxc")) - return VIR_DRV_OPEN_DECLINED; - /* If path isn't '/' then they typoed, tell them correct path */ if (conn->uri->path != NULL && STRNEQ(conn->uri->path, "/") && @@ -5634,6 +5630,7 @@ static virHypervisorDriver lxcHypervisorDriver = { static virConnectDriver lxcConnectDriver = { .localOnly = true, + .uriSchemes = (const char *[]){ "lxc", NULL }, .hypervisorDriver = &lxcHypervisorDriver, }; diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c index ca48a0358c..98754d4471 100644 --- a/src/network/bridge_driver.c +++ b/src/network/bridge_driver.c @@ -883,9 +883,6 @@ networkConnectOpen(virConnectPtr conn, /* Only hypervisor drivers are permitted to auto-open on NULL uri */ return VIR_DRV_OPEN_DECLINED; } else { - if (STRNEQ_NULLABLE(conn->uri->scheme, "network")) - return VIR_DRV_OPEN_DECLINED; - if (network_driver == NULL) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("network state driver is not active")); @@ -5613,6 +5610,7 @@ static virHypervisorDriver networkHypervisorDriver = { static virConnectDriver networkConnectDriver = { .localOnly = true, + .uriSchemes = (const char *[]){ "network", NULL }, .hypervisorDriver = &networkHypervisorDriver, .networkDriver = &networkDriver, }; diff --git a/src/node_device/node_device_driver.c b/src/node_device/node_device_driver.c index ad4938fcd6..a3e3d76dfc 100644 --- a/src/node_device/node_device_driver.c +++ b/src/node_device/node_device_driver.c @@ -59,9 +59,6 @@ nodeConnectOpen(virConnectPtr conn, /* Only hypervisor drivers are permitted to auto-open on NULL uri */ return VIR_DRV_OPEN_DECLINED; } else { - if (STRNEQ_NULLABLE(conn->uri->scheme, "nodedev")) - return VIR_DRV_OPEN_DECLINED; - if (driver == NULL) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("nodedev state driver is not active")); diff --git a/src/node_device/node_device_hal.c b/src/node_device/node_device_hal.c index 4c251da88a..2101101bc6 100644 --- a/src/node_device/node_device_hal.c +++ b/src/node_device/node_device_hal.c @@ -784,6 +784,7 @@ static virHypervisorDriver halHypervisorDriver = { static virConnectDriver halConnectDriver = { .localOnly = true, + .uriSchemes = (const char *[]){ "nodedev", NULL }, .hypervisorDriver = &halHypervisorDriver, .nodeDeviceDriver = &halNodeDeviceDriver, }; diff --git a/src/node_device/node_device_udev.c b/src/node_device/node_device_udev.c index d89b5ff7cc..de01816402 100644 --- a/src/node_device/node_device_udev.c +++ b/src/node_device/node_device_udev.c @@ -1958,6 +1958,7 @@ static virHypervisorDriver udevHypervisorDriver = { static virConnectDriver udevConnectDriver = { .localOnly = true, + .uriSchemes = (const char *[]){ "nodedev", NULL }, .hypervisorDriver = &udevHypervisorDriver, .nodeDeviceDriver = &udevNodeDeviceDriver, }; diff --git a/src/nwfilter/nwfilter_driver.c b/src/nwfilter/nwfilter_driver.c index 71aca5a968..76289265a2 100644 --- a/src/nwfilter/nwfilter_driver.c +++ b/src/nwfilter/nwfilter_driver.c @@ -376,9 +376,6 @@ nwfilterConnectOpen(virConnectPtr conn, /* Only hypervisor drivers are permitted to auto-open on NULL uri */ return VIR_DRV_OPEN_DECLINED; } else { - if (STRNEQ_NULLABLE(conn->uri->scheme, "nwfilter")) - return VIR_DRV_OPEN_DECLINED; - if (driver == NULL) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("nwfilter state driver is not active")); @@ -709,6 +706,7 @@ static virHypervisorDriver nwfilterHypervisorDriver = { static virConnectDriver nwfilterConnectDriver = { .localOnly = true, + .uriSchemes = (const char *[]){ "nwfilter", NULL }, .hypervisorDriver = &nwfilterHypervisorDriver, .nwfilterDriver = &nwfilterDriver, }; diff --git a/src/openvz/openvz_driver.c b/src/openvz/openvz_driver.c index 339f88994c..e2346eabc9 100644 --- a/src/openvz/openvz_driver.c +++ b/src/openvz/openvz_driver.c @@ -1357,11 +1357,6 @@ static virDrvOpenStatus openvzConnectOpen(virConnectPtr conn, if (conn->uri == NULL) { return VIR_DRV_OPEN_DECLINED; } else { - /* If scheme isn't 'openvz', then its for another driver */ - if (conn->uri->scheme == NULL || - STRNEQ(conn->uri->scheme, "openvz")) - return VIR_DRV_OPEN_DECLINED; - /* If path isn't /system, then they typoed, so tell them correct path */ if (conn->uri->path == NULL || STRNEQ(conn->uri->path, "/system")) { @@ -2521,6 +2516,7 @@ static virHypervisorDriver openvzHypervisorDriver = { static virConnectDriver openvzConnectDriver = { .localOnly = true, + .uriSchemes = (const char *[]){ "openvz", NULL }, .hypervisorDriver = &openvzHypervisorDriver, }; diff --git a/src/phyp/phyp_driver.c b/src/phyp/phyp_driver.c index cce7448abc..ddbd9144bc 100644 --- a/src/phyp/phyp_driver.c +++ b/src/phyp/phyp_driver.c @@ -1144,9 +1144,6 @@ phypConnectOpen(virConnectPtr conn, if (!conn || !conn->uri) return VIR_DRV_OPEN_DECLINED; - if (conn->uri->scheme == NULL || STRNEQ(conn->uri->scheme, "phyp")) - return VIR_DRV_OPEN_DECLINED; - if (conn->uri->server == NULL) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("Missing server name in phyp:// URI")); @@ -3766,6 +3763,7 @@ static virInterfaceDriver phypInterfaceDriver = { }; static virConnectDriver phypConnectDriver = { + .uriSchemes = (const char *[]){ "phyp", NULL }, .hypervisorDriver = &phypHypervisorDriver, .interfaceDriver = &phypInterfaceDriver, .storageDriver = &phypStorageDriver, diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index ca08ba463d..bd9c592a7a 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -1146,13 +1146,6 @@ static virDrvOpenStatus qemuConnectOpen(virConnectPtr conn, if (conn->uri == NULL) { return VIR_DRV_OPEN_DECLINED; } else { - /* If URI isn't 'qemu' its definitely not for us */ - if (conn->uri->scheme == NULL || - STRNEQ(conn->uri->scheme, "qemu")) { - ret = VIR_DRV_OPEN_DECLINED; - goto cleanup; - } - if (qemu_driver == NULL) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("qemu state driver is not active")); @@ -21564,6 +21557,7 @@ static virHypervisorDriver qemuHypervisorDriver = { static virConnectDriver qemuConnectDriver = { .localOnly = true, + .uriSchemes = (const char *[]){ "qemu", NULL }, .hypervisorDriver = &qemuHypervisorDriver, }; diff --git a/src/secret/secret_driver.c b/src/secret/secret_driver.c index 06d116f07f..aedfa10dcc 100644 --- a/src/secret/secret_driver.c +++ b/src/secret/secret_driver.c @@ -529,9 +529,6 @@ secretConnectOpen(virConnectPtr conn, /* Only hypervisor drivers are permitted to auto-open on NULL uri */ return VIR_DRV_OPEN_DECLINED; } else { - if (STRNEQ_NULLABLE(conn->uri->scheme, "secret")) - return VIR_DRV_OPEN_DECLINED; - if (driver == NULL) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("secret state driver is not active")); @@ -659,6 +656,7 @@ static virHypervisorDriver secretHypervisorDriver = { static virConnectDriver secretConnectDriver = { .localOnly = true, + .uriSchemes = (const char *[]){ "secret", NULL }, .hypervisorDriver = &secretHypervisorDriver, .secretDriver = &secretDriver, }; diff --git a/src/storage/storage_driver.c b/src/storage/storage_driver.c index 7eb5fad929..1a81733842 100644 --- a/src/storage/storage_driver.c +++ b/src/storage/storage_driver.c @@ -389,9 +389,6 @@ storageConnectOpen(virConnectPtr conn, /* Only hypervisor drivers are permitted to auto-open on NULL uri */ return VIR_DRV_OPEN_DECLINED; } else { - if (STRNEQ_NULLABLE(conn->uri->scheme, "storage")) - return VIR_DRV_OPEN_DECLINED; - if (driver == NULL) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("storage state driver is not active")); @@ -2852,6 +2849,7 @@ static virHypervisorDriver storageHypervisorDriver = { static virConnectDriver storageConnectDriver = { .localOnly = true, + .uriSchemes = (const char *[]){ "storage", NULL }, .hypervisorDriver = &storageHypervisorDriver, .storageDriver = &storageDriver, }; diff --git a/src/test/test_driver.c b/src/test/test_driver.c index de3943406e..7f9c7f751e 100644 --- a/src/test/test_driver.c +++ b/src/test/test_driver.c @@ -1457,9 +1457,6 @@ testConnectOpen(virConnectPtr conn, if (!conn->uri) return VIR_DRV_OPEN_DECLINED; - if (!conn->uri->scheme || STRNEQ(conn->uri->scheme, "test")) - return VIR_DRV_OPEN_DECLINED; - /* From this point on, the connection is for us. */ if (!conn->uri->path || conn->uri->path[0] == '\0' @@ -7062,6 +7059,7 @@ static virNodeDeviceDriver testNodeDeviceDriver = { static virConnectDriver testConnectDriver = { .localOnly = true, + .uriSchemes = (const char *[]){ "test", NULL }, .hypervisorDriver = &testHypervisorDriver, .interfaceDriver = &testInterfaceDriver, .networkDriver = &testNetworkDriver, diff --git a/src/uml/uml_driver.c b/src/uml/uml_driver.c index 7fae561aff..2315cd4d15 100644 --- a/src/uml/uml_driver.c +++ b/src/uml/uml_driver.c @@ -1206,10 +1206,6 @@ static virDrvOpenStatus umlConnectOpen(virConnectPtr conn, if (conn->uri == NULL) { return VIR_DRV_OPEN_DECLINED; } else { - if (conn->uri->scheme == NULL || - STRNEQ(conn->uri->scheme, "uml")) - return VIR_DRV_OPEN_DECLINED; - /* Check path and tell them correct path if they made a mistake */ if (uml_driver->privileged) { if (STRNEQ(conn->uri->path, "/system") && @@ -3014,6 +3010,7 @@ static virHypervisorDriver umlHypervisorDriver = { static virConnectDriver umlConnectDriver = { .localOnly = true, + .uriSchemes = (const char *[]){ "uml", NULL }, .hypervisorDriver = ¨HypervisorDriver, }; diff --git a/src/vbox/vbox_common.c b/src/vbox/vbox_common.c index 204f08ea8a..cead821934 100644 --- a/src/vbox/vbox_common.c +++ b/src/vbox/vbox_common.c @@ -520,10 +520,6 @@ vboxConnectOpen(virConnectPtr conn, if (conn->uri == NULL) return VIR_DRV_OPEN_DECLINED; - if (conn->uri->scheme == NULL || - STRNEQ(conn->uri->scheme, "vbox")) - return VIR_DRV_OPEN_DECLINED; - if (conn->uri->path == NULL || STREQ(conn->uri->path, "")) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("no VirtualBox driver path specified (try vbox:///session)")); diff --git a/src/vbox/vbox_driver.c b/src/vbox/vbox_driver.c index e3880b4826..395fa8e3d6 100644 --- a/src/vbox/vbox_driver.c +++ b/src/vbox/vbox_driver.c @@ -58,9 +58,7 @@ static virDrvOpenStatus dummyConnectOpen(virConnectPtr conn, virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR); - if (conn->uri == NULL || - conn->uri->scheme == NULL || - STRNEQ(conn->uri->scheme, "vbox")) + if (conn->uri == NULL) return VIR_DRV_OPEN_DECLINED; if (conn->uri->path == NULL || STREQ(conn->uri->path, "")) { @@ -96,6 +94,7 @@ static virHypervisorDriver vboxDriverDummy = { static virConnectDriver vboxConnectDriver = { .localOnly = true, + .uriSchemes = (const char *[]){ "vbox", NULL }, .hypervisorDriver = NULL, }; diff --git a/src/vmware/vmware_driver.c b/src/vmware/vmware_driver.c index 435b9ee6ff..6118e6fa13 100644 --- a/src/vmware/vmware_driver.c +++ b/src/vmware/vmware_driver.c @@ -134,12 +134,6 @@ vmwareConnectOpen(virConnectPtr conn, /* @TODO accept */ return VIR_DRV_OPEN_DECLINED; } else { - if (conn->uri->scheme == NULL || - (STRNEQ(conn->uri->scheme, "vmwareplayer") && - STRNEQ(conn->uri->scheme, "vmwarews") && - STRNEQ(conn->uri->scheme, "vmwarefusion"))) - return VIR_DRV_OPEN_DECLINED; - /* If path isn't /session, then they typoed, so tell them correct path */ if (conn->uri->path == NULL || STRNEQ(conn->uri->path, "/session")) { virReportError(VIR_ERR_INTERNAL_ERROR, @@ -1268,6 +1262,7 @@ static virHypervisorDriver vmwareHypervisorDriver = { static virConnectDriver vmwareConnectDriver = { .localOnly = true, + .uriSchemes = (const char *[]){ "vmwareplayer", "vmwarews", "vmwarefusion", NULL }, .hypervisorDriver = &vmwareHypervisorDriver, }; diff --git a/src/vz/vz_driver.c b/src/vz/vz_driver.c index 8842056ea4..f3047cad6c 100644 --- a/src/vz/vz_driver.c +++ b/src/vz/vz_driver.c @@ -361,19 +361,6 @@ vzConnectOpen(virConnectPtr conn, if (!conn->uri) return VIR_DRV_OPEN_DECLINED; - if (!conn->uri->scheme) - return VIR_DRV_OPEN_DECLINED; - - if (STRNEQ(conn->uri->scheme, "vz") && - STRNEQ(conn->uri->scheme, "parallels")) - return VIR_DRV_OPEN_DECLINED; - - if (STREQ(conn->uri->scheme, "vz") && STRNEQ(conn->driver->name, "vz")) - return VIR_DRV_OPEN_DECLINED; - - if (STREQ(conn->uri->scheme, "parallels") && STRNEQ(conn->driver->name, "Parallels")) - return VIR_DRV_OPEN_DECLINED; - /* From this point on, the connection is for us. */ if (STRNEQ_NULLABLE(conn->uri->path, "/system")) { virReportError(VIR_ERR_INTERNAL_ERROR, @@ -4140,6 +4127,7 @@ static virHypervisorDriver vzHypervisorDriver = { static virConnectDriver vzConnectDriver = { .localOnly = true, + .uriSchemes = (const char *[]){ "vz", NULL }, .hypervisorDriver = &vzHypervisorDriver, }; @@ -4209,6 +4197,7 @@ vzRegister(void) parallelsHypervisorDriver.name = "Parallels"; parallelsConnectDriver = vzConnectDriver; parallelsConnectDriver.hypervisorDriver = ¶llelsHypervisorDriver; + parallelsConnectDriver.uriSchemes = (const char *[]){ "parallels", NULL }, if (virRegisterConnectDriver(¶llelsConnectDriver, true) < 0) return -1; diff --git a/src/xenapi/xenapi_driver.c b/src/xenapi/xenapi_driver.c index fb462cd3a1..86f9e7706d 100644 --- a/src/xenapi/xenapi_driver.c +++ b/src/xenapi/xenapi_driver.c @@ -146,10 +146,8 @@ xenapiConnectOpen(virConnectPtr conn, virConnectAuthPtr auth, virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR); - if (conn->uri == NULL || conn->uri->scheme == NULL || - STRCASENEQ(conn->uri->scheme, "XenAPI")) { + if (conn->uri == NULL) return VIR_DRV_OPEN_DECLINED; - } if (conn->uri->server == NULL) { xenapiSessionErrorHandler(conn, VIR_ERR_INVALID_ARG, @@ -2075,6 +2073,7 @@ static virHypervisorDriver xenapiHypervisorDriver = { static virConnectDriver xenapiConnectDriver = { + .uriSchemes = (const char *[]){ "xenapi", NULL }, .hypervisorDriver = &xenapiHypervisorDriver, };