[virt-tools-list] [virt-viewer: PATCH 2/4 v2] Improve authentication error messages

Fabiano Fidêncio fidencio at redhat.com
Wed Sep 24 11:49:27 UTC 2014


Adding a better error message to our default error message, based on the
libvirt error. Also, the libvirt error is shown as debug.

https://bugzilla.redhat.com/show_bug.cgi?id=1142742
---
v2:
- Add a special case with our own error message based on libvirt's error message
- Add a g_debug() output with the libvirt's error message
---
 src/virt-viewer.c | 37 +++++++++++++++++++++++++++++++++++--
 1 file changed, 35 insertions(+), 2 deletions(-)

diff --git a/src/virt-viewer.c b/src/virt-viewer.c
index 3d5a363..c6066c5 100644
--- a/src/virt-viewer.c
+++ b/src/virt-viewer.c
@@ -669,6 +669,36 @@ virt_viewer_auth_libvirt_credentials(virConnectCredentialPtr cred,
     return ret;
 }
 
+static gchar *
+virt_viewer_get_error_message_from_vir_error(VirtViewer *self,
+                                             virErrorPtr error)
+{
+    VirtViewerPrivate *priv = self->priv;
+    const gchar *error_details = NULL;
+    gchar *detailed_error_message = NULL;
+    gchar *error_message = g_strdup_printf(_("Unable to connect to libvirt with URI: %s."),
+                                           priv->uri ? priv->uri : _("[none]"));
+
+    g_debug("Error: %s", error->message);
+
+    /* For now we are only treating authentication errors. */
+    switch (error->code) {
+        case VIR_ERR_AUTH_FAILED:
+            error_details = _("Authentication failed.");
+            break;
+        default:
+            break;
+    }
+
+    if (error_details != NULL) {
+        detailed_error_message = g_strdup_printf("%s\n%s", error_message, error_details);
+        g_free(error_message);
+        return detailed_error_message;
+    }
+
+    return error_message;
+}
+
 static int
 virt_viewer_connect(VirtViewerApp *app)
 {
@@ -698,8 +728,11 @@ virt_viewer_connect(VirtViewerApp *app)
                                     oflags);
     if (!priv->conn) {
         if (!priv->auth_cancelled) {
-            virt_viewer_app_simple_message_dialog(app, _("Unable to connect to libvirt with URI %s"),
-                                                  priv->uri ? priv->uri : _("[none]"));
+            gchar *error_message = virt_viewer_get_error_message_from_vir_error(self, virGetLastError());
+
+            virt_viewer_app_simple_message_dialog(app, error_message);
+
+            g_free(error_message);
         }
 
         return -1;
-- 
1.9.3




More information about the virt-tools-list mailing list