Mercurial > pidgin
diff libpurple/protocols/jabber/auth_digest_md5.c @ 28725:4f45aae3ace1
Let's try a more complex set of return states / values for auth mechs.
This won't build with Cyrus support yet.
author | Paul Aurich <paul@darkrain42.org> |
---|---|
date | Tue, 01 Dec 2009 07:32:53 +0000 |
parents | cea22db36ffc |
children | b94fd073187c |
line wrap: on
line diff
--- a/libpurple/protocols/jabber/auth_digest_md5.c Tue Dec 01 04:21:40 2009 +0000 +++ b/libpurple/protocols/jabber/auth_digest_md5.c Tue Dec 01 07:32:53 2009 +0000 @@ -30,15 +30,16 @@ #include "auth.h" #include "jabber.h" -static xmlnode *digest_md5_start(JabberStream *js, xmlnode *packet) +static JabberSaslState +digest_md5_start(JabberStream *js, xmlnode *packet, xmlnode **response, + const char **msg) { - xmlnode *auth; - - auth = xmlnode_new("auth"); + xmlnode *auth = xmlnode_new("auth"); xmlnode_set_namespace(auth, NS_XMPP_SASL); xmlnode_set_attrib(auth, "mechanism", "DIGEST-MD5"); - return auth; + *response = auth; + return JABBER_SASL_STATE_CONTINUE; } /* Parts of this algorithm are inspired by stuff in libgsasl */ @@ -163,19 +164,20 @@ return z; } -static xmlnode *digest_md5_handle_challenge(JabberStream *js, xmlnode *packet) +static JabberSaslState +digest_md5_handle_challenge(JabberStream *js, xmlnode *packet, + xmlnode **response, const char **msg) { xmlnode *reply = NULL; char *enc_in = xmlnode_get_data(packet); char *dec_in; char *enc_out; GHashTable *parts; + JabberSaslState state = JABBER_SASL_STATE_CONTINUE; if (!enc_in) { - purple_connection_error_reason(js->gc, - PURPLE_CONNECTION_ERROR_NETWORK_ERROR, - _("Invalid response from server")); - return NULL; + *msg = _("Invalid response from server"); + return JABBER_SASL_STATE_FAIL; } dec_in = (char *)purple_base64_decode(enc_in, NULL); @@ -191,9 +193,8 @@ reply = xmlnode_new("response"); xmlnode_set_namespace(reply, NS_XMPP_SASL); } else { - purple_connection_error_reason(js->gc, - PURPLE_CONNECTION_ERROR_NETWORK_ERROR, - _("Invalid challenge from server")); + *msg = _("Invalid challenge from server"); + state = JABBER_SASL_STATE_FAIL; } g_free(js->expected_rspauth); js->expected_rspauth = NULL; @@ -216,11 +217,10 @@ if(!realm) realm = js->user->domain; - if (nonce == NULL || realm == NULL) - purple_connection_error_reason(js->gc, - PURPLE_CONNECTION_ERROR_NETWORK_ERROR, - _("Invalid challenge from server")); - else { + if (nonce == NULL || realm == NULL) { + *msg = _("Invalid challenge from server"); + state = JABBER_SASL_STATE_FAIL; + } else { GString *response = g_string_new(""); char *a2; char *auth_resp; @@ -272,7 +272,8 @@ g_free(dec_in); g_hash_table_destroy(parts); - return reply; + *response = reply; + return state; } static JabberSaslMech digest_md5_mech = {