1
0
mirror of https://gitlab.com/libvirt/libvirt.git synced 2024-12-25 01:34:11 +03:00

hyperv: Report an error for acceptable URI schemes with a transport

Before, URIs such as hyperv+ssh:// have been declined by the Hyper-V
driver resulting in the remote driver trying to connect to an
non-existing libvirtd.

Now such URIs trigger an error in the yper-V driver suggesting to
try again without the transport part in the scheme.
This commit is contained in:
Matthias Bolte 2011-09-27 13:11:14 +02:00
parent 3d308f75c1
commit 9b706b2703

View File

@ -69,6 +69,7 @@ static virDrvOpenStatus
hypervOpen(virConnectPtr conn, virConnectAuthPtr auth, unsigned int flags) hypervOpen(virConnectPtr conn, virConnectAuthPtr auth, unsigned int flags)
{ {
virDrvOpenStatus result = VIR_DRV_OPEN_ERROR; virDrvOpenStatus result = VIR_DRV_OPEN_ERROR;
char *plus;
hypervPrivate *priv = NULL; hypervPrivate *priv = NULL;
char *username = NULL; char *username = NULL;
char *password = NULL; char *password = NULL;
@ -77,12 +78,30 @@ hypervOpen(virConnectPtr conn, virConnectAuthPtr auth, unsigned int flags)
virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR); virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR);
/* Decline if the URI is NULL or the scheme is not hyperv */ /* Decline if the URI is NULL or the scheme is NULL */
if (conn->uri == NULL || conn->uri->scheme == NULL || if (conn->uri == NULL || conn->uri->scheme == NULL) {
STRCASENEQ(conn->uri->scheme, "hyperv")) {
return VIR_DRV_OPEN_DECLINED; 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;
}
HYPERV_ERROR(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 */ /* Require server part */
if (conn->uri->server == NULL) { if (conn->uri->server == NULL) {
HYPERV_ERROR(VIR_ERR_INVALID_ARG, "%s", HYPERV_ERROR(VIR_ERR_INVALID_ARG, "%s",