[virt-tools-list] [virt-viewer: PATCH 1/3] Ask for username when connecting with SASL
Christophe Fergeau
cfergeau at redhat.com
Fri Oct 3 13:36:31 UTC 2014
On Wed, Oct 01, 2014 at 04:41:28PM +0200, Fabiano Fidêncio wrote:
> When connecting with SASL for authentication, some authentication
> mechanisms need a username (the plain text and md5 ones, for example).
> ---
> For testing the patch, please, apply:
> http://lists.freedesktop.org/archives/spice-devel/2014-October/017505.html
> ---
> src/virt-viewer-session-spice.c | 35 +++++++++++++++++++++++++++++++++--
> 1 file changed, 33 insertions(+), 2 deletions(-)
>
> diff --git a/src/virt-viewer-session-spice.c b/src/virt-viewer-session-spice.c
> index 885399c..41a9a49 100644
> --- a/src/virt-viewer-session-spice.c
> +++ b/src/virt-viewer-session-spice.c
> @@ -483,6 +483,7 @@ virt_viewer_session_spice_main_channel_event(SpiceChannel *channel G_GNUC_UNUSED
> VirtViewerSessionSpice *self = VIRT_VIEWER_SESSION_SPICE(session);
> gchar *password = NULL, *user = NULL;
> gboolean ret;
> + static gboolean username_required = FALSE;
>
> g_return_if_fail(self != NULL);
>
> @@ -502,22 +503,52 @@ virt_viewer_session_spice_main_channel_event(SpiceChannel *channel G_GNUC_UNUSED
> g_debug("main channel: switching host");
> break;
> case SPICE_CHANNEL_ERROR_AUTH:
> - g_debug("main channel: auth failure (wrong password?)");
> + g_debug("main channel: auth failure (wrong username/password?)");
> +#if SPICE_GTK_CHECK_VERSION(0, 23, 21)
You could change that to the version when we return an error for missing
username, but this one is fine too as this is when
spice_channel_get_error() was introduced.
> + {
> + const GError *error = spice_channel_get_error(channel);
> + if (error != NULL) {
> + /* When the password is invalid, SPICE_CHANNEL_ERROR_AUTH is
> + * returned with no GError associated. It means we just want
> + * to change the 'user_required' according to the first try
> + * to connect to the server and where a GError will be set to
> + * indicate if the authentication needs password and username
> + * (SALS case when using authentication mechanisms like
"SASL" not "SALS"
> + * md5-digest or plain-text) or if the authencation needs the
"authentication"
> + * password only. */
I'm not sure I can read this comment correctly :( The first sentence is
fine, but I'm not sure the rest of the comment adds much to the
g_error_matches() call just below. Or is there some gotcha here that I'm
missing and that this comment explains?
> + username_required = g_error_matches(error,
> + SPICE_CHANNEL_ERROR,
> + SPICE_CHANNEL_ERROR_AUTH_NEEDS_PASSWORD_AND_USERNAME);
> + }
> + }
> +#endif
>
> if (self->priv->pass_try > 0)
> g_signal_emit_by_name(session, "session-auth-failed",
> _("invalid password"));
Maybe this 'invalid password' needs to be changed?
> +
I don't think we need to add a blank line here
> self->priv->pass_try++;
>
> + /* A username is *only* pre-filled in case where some authentication
> + * error happened. Unfortunately, we don't have a clear way to
> + * differantiate bewteen invalid username and invalid password.
'differentiate between'
> + * So, in both cases the username entry will be pre-filled with the
> + * username used in the previous attempt. */
> + if (username_required)
> + g_object_get(self->priv->session, "username", &user, NULL);
> +
> ret = virt_viewer_auth_collect_credentials(self->priv->main_window,
> "SPICE",
> NULL,
> - NULL, &password);
> + username_required ? &user : NULL,
> + &password);
> if (!ret) {
> g_signal_emit_by_name(session, "session-cancelled");
> } else {
> gboolean openfd;
>
> + if (username_required)
> + g_object_set(self->priv->session, "username", user, NULL);
I guess we could always set 'username' ? This would set it to NULL in
caes the session is reused (dunno if this can happen).
> g_object_set(self->priv->session, "password", password, NULL);
> g_object_get(self->priv->session, "client-sockets", &openfd, NULL);
>
> --
> 1.9.3
>
> _______________________________________________
> virt-tools-list mailing list
> virt-tools-list at redhat.com
> https://www.redhat.com/mailman/listinfo/virt-tools-list
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/virt-tools-list/attachments/20141003/02900eff/attachment.sig>
More information about the virt-tools-list
mailing list