Move SASL authentication failures handling to a separate function. Multiple error messages asking for username\password were removed because they are not necessarily the reason for the failure (avoiding similar issue as in rhbz#1365736). Letting the user know about required username\password should be achieved by setting specific Gerror's error code and enabling\disabling the username\password fields accordingly by the application. --- src/spice-channel.c | 44 +++++++++++++++++++++++++++----------------- 1 file changed, 27 insertions(+), 17 deletions(-) diff --git a/src/spice-channel.c b/src/spice-channel.c index af67931..2b00c8f 100644 --- a/src/spice-channel.c +++ b/src/spice-channel.c @@ -1113,28 +1113,38 @@ static int spice_channel_read(SpiceChannel *channel, void *data, size_t length) return length; } +#if HAVE_SASL /* coroutine context */ -static void spice_channel_failed_authentication(SpiceChannel *channel, - gboolean invalidPassword) +static void spice_channel_failed_sasl_authentication(SpiceChannel *channel) { SpiceChannelPrivate *c = channel->priv; + gint err_code; /* The application should activate the authentication window fields accordingly */ if (c->auth_needs_username && c->auth_needs_password) - g_set_error_literal(&c->error, - SPICE_CLIENT_ERROR, - SPICE_CLIENT_ERROR_AUTH_NEEDS_PASSWORD_AND_USERNAME, - _("Authentication failed: password and username are required")); + err_code = SPICE_CLIENT_ERROR_AUTH_NEEDS_PASSWORD_AND_USERNAME; else if (c->auth_needs_username) - g_set_error_literal(&c->error, - SPICE_CLIENT_ERROR, - SPICE_CLIENT_ERROR_AUTH_NEEDS_USERNAME, - _("Authentication failed: username is required")); - else if (c->auth_needs_password) - g_set_error_literal(&c->error, - SPICE_CLIENT_ERROR, - SPICE_CLIENT_ERROR_AUTH_NEEDS_PASSWORD, - _("Authentication failed: password is required")); - else if (invalidPassword) + err_code = SPICE_CLIENT_ERROR_AUTH_NEEDS_USERNAME; + else + err_code = SPICE_CLIENT_ERROR_AUTH_NEEDS_PASSWORD; + + g_set_error_literal(&c->error, + SPICE_CLIENT_ERROR, + err_code, + _("Authentication failed")); + + c->event = SPICE_CHANNEL_ERROR_AUTH; + + c->has_error = TRUE; /* force disconnect */ +} +#endif + +/* coroutine context */ +static void spice_channel_failed_authentication(SpiceChannel *channel, + gboolean invalidPassword) +{ + SpiceChannelPrivate *c = channel->priv; + + if (invalidPassword) g_set_error_literal(&c->error, SPICE_CLIENT_ERROR, SPICE_CLIENT_ERROR_AUTH_NEEDS_PASSWORD, @@ -1808,7 +1818,7 @@ error: if (saslconn) sasl_dispose(&saslconn); - spice_channel_failed_authentication(channel, FALSE); + spice_channel_failed_sasl_authentication(channel); ret = FALSE; cleanup: -- 2.9.3 _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel