Re: [PATCH] Explicitly error on uri=qemu://system

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



19.04.2016 2:04, Cole Robinson пишет:

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

Please, add 'vz' also as it suffers from the problem too. Though it doesn't support vz:///session it clearly says about it in the error message.


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)
+{
+    /* These drivers _only_ accepts URIs with a 'path' element */
+    if (STRNEQ(uri->scheme, "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;
+}
+
+
  static virConnectPtr
  do_open(const char *name,
          virConnectAuthPtr auth,
@@ -995,6 +1022,11 @@ do_open(const char *name,
                    NULLSTR(ret->uri->user), ret->uri->port,
                    NULLSTR(ret->uri->path));
+ if (check_uri_missing_slash(alias ? alias : name, ret->uri) < 0) {
+            VIR_FREE(alias);
+            goto failed;
+        }
+
          VIR_FREE(alias);
      } else {
          VIR_DEBUG("no name, allowing driver auto-select");

--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list




[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]