[Spice-devel] [patch 2/2] virt-viewer: use username and password for spice sessions with SASL

Christophe Fergeau cfergeau at redhat.com
Mon Oct 28 15:31:00 CET 2013


Hey,

remote-viewer patches should be sent to
http://www.redhat.com/mailman/listinfo/virt-tools-list (feel free to cc:
that list as well for this patch series).

On Thu, Oct 24, 2013 at 08:04:33AM +0200, dietmar at proxmox.com wrote:
> Also set username if set inside configuration file.
> 
> Signed-off-by: Dietmar Maurer <dietmar at proxmox.com>
> 
> Index: new/src/virt-viewer-session-spice.c
> ===================================================================
> --- new.orig/src/virt-viewer-session-spice.c	2013-10-24 06:17:52.000000000 +0200
> +++ new/src/virt-viewer-session-spice.c	2013-10-24 07:44:42.000000000 +0200
> @@ -342,6 +342,11 @@
>          g_object_set(G_OBJECT(session), "password", val, NULL);
>          g_free(val);
>      }
> +    if (virt_viewer_file_is_set(file, "username")) {
> +        gchar *val = virt_viewer_file_get_username(file);
> +        g_object_set(G_OBJECT(session), "username", val, NULL);
> +        g_free(val);
> +    }
>  
>      if (virt_viewer_file_is_set(file, "tls-ciphers")) {
>          gchar *val = virt_viewer_file_get_tls_ciphers(file);
> @@ -462,12 +467,13 @@
>  }
>  
>  static void
> -virt_viewer_session_spice_main_channel_event(SpiceChannel *channel G_GNUC_UNUSED,
> +virt_viewer_session_spice_main_channel_event(SpiceChannel *channel,
>                                               SpiceChannelEvent event,
>                                               VirtViewerSession *session)
>  {
>      VirtViewerSessionSpice *self = VIRT_VIEWER_SESSION_SPICE(session);
>      gchar *password = NULL;
> +    gchar *username = NULL;
>  
>      g_return_if_fail(self != NULL);
>  
> @@ -488,15 +494,22 @@
>          break;
>      case SPICE_CHANNEL_ERROR_AUTH:
>          DEBUG_LOG("main channel: auth failure (wrong password?)");
> +
> +        gboolean auth_sasl = spice_channel_test_common_capability(channel, SPICE_COMMON_CAP_AUTH_SASL);
> +

Older spice versions will not need/not be able to cope with a username
here. Also, it does not look right to me to have this here, maybe the SASL
method we are using did not request a username. I'd add a
spice_channel_auth_needs_username() method or something like that (I assume
we cannot pass some additional data when reporting a
SPICE_CHANNEL_ERROR_AUTH error?), and add some fallback returning FALSE
when this method is not available.

>          int ret = virt_viewer_auth_collect_credentials(self->priv->main_window,
>                                                         "SPICE",
>                                                         NULL,
> -                                                       NULL, &password);
> +                                                       auth_sasl ? &username : NULL,
> +                                                       &password);
>          if (ret < 0) {
>              g_signal_emit_by_name(session, "session-cancelled");
>          } else {
>              gboolean openfd;
>  
> +            if (auth_sasl) {
> +                g_object_set(self->priv->session, "username", username, NULL);
> +            }

Will not work either with an older spice-gtk version, though this will only
give a runtime error warning.

Christophe
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/spice-devel/attachments/20131028/9c23f868/attachment.pgp>


More information about the Spice-devel mailing list