mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-25 21:02:22 +00:00
Explicitly error on uri=qemu://system
It's a fairly common error that a user tries to connect to a URI like qemu://system or qemu://session (missing a slash). This errors like: $ virsh --connect qemu://session error: failed to connect to the hypervisor error: Unable to resolve address 'session' service '16514': No address associated with hostname If you already know that the standard qemu URI has 3 slashes, that error will make it obvious enough. But new user's may not get it. There's even a RHEL support page explicitly mentioning it!: https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Virtualization_Deployment_and_Administration_Guide/sect-Troubleshooting-Common_libvirt_errors_and_troubleshooting.html Catch this error early in libvirt.c virConnectOpen for qemu (and vbox which has similar rules https://bugzilla.redhat.com/show_bug.cgi?id=1038304 (cherry picked from commit 0d1579572a864c33621da4d01408f8bcb6de5d4a)
This commit is contained in:
parent
8cb5246427
commit
19e49128a6
@ -935,6 +935,35 @@ virConnectGetDefaultURI(virConfPtr conf,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Check to see if an invalid URI like qemu://system (missing /) was passed,
|
||||||
|
* offer the suggested fix.
|
||||||
|
*/
|
||||||
|
static int
|
||||||
|
virConnectCheckURIMissingSlash(const char *uristr, virURIPtr uri)
|
||||||
|
{
|
||||||
|
/* To avoid false positives, only check drivers that mandate
|
||||||
|
a path component in the URI, like /system or /session */
|
||||||
|
if (STRNEQ(uri->scheme, "qemu") &&
|
||||||
|
STRNEQ(uri->scheme, "vbox") &&
|
||||||
|
STRNEQ(uri->scheme, "vz"))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (uri->path != NULL)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (STREQ(uri->server, "session") ||
|
||||||
|
STREQ(uri->server, "system")) {
|
||||||
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||||
|
_("invalid URI %s (maybe you want %s:///%s)"),
|
||||||
|
uristr, uri->scheme, uri->server);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static virConnectPtr
|
static virConnectPtr
|
||||||
do_open(const char *name,
|
do_open(const char *name,
|
||||||
virConnectAuthPtr auth,
|
virConnectAuthPtr auth,
|
||||||
@ -1002,6 +1031,12 @@ do_open(const char *name,
|
|||||||
NULLSTR(ret->uri->user), ret->uri->port,
|
NULLSTR(ret->uri->user), ret->uri->port,
|
||||||
NULLSTR(ret->uri->path));
|
NULLSTR(ret->uri->path));
|
||||||
|
|
||||||
|
if (virConnectCheckURIMissingSlash(alias ? alias : name,
|
||||||
|
ret->uri) < 0) {
|
||||||
|
VIR_FREE(alias);
|
||||||
|
goto failed;
|
||||||
|
}
|
||||||
|
|
||||||
VIR_FREE(alias);
|
VIR_FREE(alias);
|
||||||
} else {
|
} else {
|
||||||
VIR_DEBUG("no name, allowing driver auto-select");
|
VIR_DEBUG("no name, allowing driver auto-select");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user