[virt-tools-list] [PATCH virt-viewer v2 3/7] Fix inconsistencies in session auth failures

Pavel Grunt pgrunt at redhat.com
Fri Jun 19 07:11:03 UTC 2015


On Thu, 2015-06-18 at 15:15 -0500, Jonathon Jongsma wrote:
> The spice session implementation can retry authentication on its own,
> whereas the vnc session needs to tear down the session and re-connect in
> order to retry a failed authentication. This results in the following
> inconsistent behavior:
> 
> VNC session:
>  - emits a 'session-auth-failed' signal when the client does not support
>    a particular authentication type (i.e.: a non-recoverable error)
> Spice session:
> - emits a 'session-auth-failed' signal when user enters an incorrect
>   password, and immediately retries auth internally
> 
> VNC session:
>  - emits a 'session-auth-refused' error when user enters an invalid
>    password (i.e.: a recoverable error)
> Spice Session:
> - never emits a 'session-auth-refused' signal
> 
> Because of these differences, the VirtViewerApp code to handle authentication
> failures is a bit confusing and difficult to maintain. To fix this issue, make
> both the spice and VNC sessions emit the same signal when similar errors 
> occur.
> We use the new session API added in the last commit to determine whether the
> session supports automatic retries so we know how to handle the signal.
> ---
>  src/virt-viewer-app.c           | 41 ++++++++++++++++++++++++----------------
> -
>  src/virt-viewer-session-spice.c |  2 +-
>  2 files changed, 25 insertions(+), 18 deletions(-)
> 
> diff --git a/src/virt-viewer-app.c b/src/virt-viewer-app.c
> index 2bf74f7..96afc78 100644
> --- a/src/virt-viewer-app.c
> +++ b/src/virt-viewer-app.c
> @@ -1488,7 +1488,7 @@ static void virt_viewer_app_cancelled(VirtViewerSession 
> *session,
>  }
>  
>  
> -static void virt_viewer_app_auth_refused(VirtViewerSession *session 
> G_GNUC_UNUSED,
> +static void virt_viewer_app_auth_refused(VirtViewerSession *session,
>                                           const char *msg,
>                                           VirtViewerApp *self)
>  {
> @@ -1496,26 +1496,33 @@ static void 
> virt_viewer_app_auth_refused(VirtViewerSession *session G_GNUC_UNUSE
>      int ret;
>      VirtViewerAppPrivate *priv = self->priv;
>  
> -    dialog = gtk_message_dialog_new(virt_viewer_window_get_window(priv
> ->main_window),
> -                                    GTK_DIALOG_MODAL |
> -                                    GTK_DIALOG_DESTROY_WITH_PARENT,
> -                                    GTK_MESSAGE_ERROR,
> -                                    GTK_BUTTONS_YES_NO,
> -                                    _("Unable to authenticate with remote 
> desktop server at %s: %s\n"
> -                                      "Retry connection again?"),
> -                                    priv->pretty_address, msg);
> -
> -    ret = gtk_dialog_run(GTK_DIALOG(dialog));
> +    if (virt_viewer_session_can_retry_auth(session)) {
> +        virt_viewer_app_simple_message_dialog(self,
> +                                              _("Unable to authenticate with 
> remote desktop server: %s"),
> +                                              msg);
Why not keeping the format string "...remote desktop server at %s: %s" ? 

It is possible to return and save the indentation level, you are removing this
part in the PATCH 6/7 anyway.

Pavel

> +    } else {
> +        /* if the session implementation cannot retry auth automatically, the
> +         * VirtViewerApp needs to schedule a new connection to retry */
> +        dialog = gtk_message_dialog_new(virt_viewer_window_get_window(priv
> ->main_window),
> +                                        GTK_DIALOG_MODAL |
> +                                        GTK_DIALOG_DESTROY_WITH_PARENT,
> +                                        GTK_MESSAGE_ERROR,
> +                                        GTK_BUTTONS_YES_NO,
> +                                        _("Unable to authenticate with remote 
> desktop server at %s: %s\n"
> +                                          "Retry connection again?"),
> +                                        priv->pretty_address, msg);
> +
> +        ret = gtk_dialog_run(GTK_DIALOG(dialog));
>  
> -    gtk_widget_destroy(dialog);
> +        gtk_widget_destroy(dialog);
>  
> -    if (ret == GTK_RESPONSE_YES)
> -        priv->authretry = TRUE;
> -    else
> -        priv->authretry = FALSE;
> +        if (ret == GTK_RESPONSE_YES)
> +            priv->authretry = TRUE;
> +        else
> +            priv->authretry = FALSE;
> +    }
>  }
>  
> -
>  static void virt_viewer_app_auth_failed(VirtViewerSession *session 
> G_GNUC_UNUSED,
>                                          const char *msg,
>                                          VirtViewerApp *self)
> diff --git a/src/virt-viewer-session-spice.c b/src/virt-viewer-session-spice.c
> index ec6ffa5..9976291 100644
> --- a/src/virt-viewer-session-spice.c
> +++ b/src/virt-viewer-session-spice.c
> @@ -617,7 +617,7 @@ virt_viewer_session_spice_main_channel_event(SpiceChannel 
> *channel,
>          }
>  
>          if (self->priv->pass_try > 0)
> -            g_signal_emit_by_name(session, "session-auth-failed",
> +            g_signal_emit_by_name(session, "session-auth-refused",
>                                    error != NULL ? error->message : _("Invalid 
> password"));
>          self->priv->pass_try++;
>  





More information about the virt-tools-list mailing list