On Mon, Apr 18, 2016 at 19:04:04 -0400, Cole Robinson wrote:
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/...
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
---
src/libvirt.c | 32 ++++++++++++++++++++++++++++++++
1 file changed, 32 insertions(+)
diff --git a/src/libvirt.c b/src/libvirt.c
index a21d00e..7607ae3 100644
--- a/src/libvirt.c
+++ b/src/libvirt.c
@@ -928,6 +928,33 @@ virConnectGetDefaultURI(virConfPtr conf,
}
+/*
+ * Check to see if an invalid URI like qemu://system (missing /) was passed,
+ * offer the suggested fix.
+ */
+static int
+check_uri_missing_slash(const char *uristr, virURIPtr uri)
Please use a name with "vir" prefix and camel case. This is totaly
against our naming convention.
+{
+ /* These drivers _only_ accepts URIs with a 'path' element */
Only these drivers accept ... ? I don't quite follow the message of this
comment.
+ if (STRNEQ(uri->sceme, "qemu") &&
+ STRNEQ(uri->scheme, "vbox"))
+ 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;
+}
ACK with the rename and fix of the comment.
Peter