libpurple/protocols/jabber/auth_digest_md5.c

branch
cpw.darkrain42.xmpp.scram
changeset 29090
b351fcdeede7
parent 29084
3a821d391ac0
child 30150
883c3fc1f638
equal deleted inserted replaced
29089:c2fee5c11127 29090:b351fcdeede7
30 #include "auth.h" 30 #include "auth.h"
31 #include "jabber.h" 31 #include "jabber.h"
32 32
33 static JabberSaslState 33 static JabberSaslState
34 digest_md5_start(JabberStream *js, xmlnode *packet, xmlnode **response, 34 digest_md5_start(JabberStream *js, xmlnode *packet, xmlnode **response,
35 const char **msg) 35 char **error)
36 { 36 {
37 xmlnode *auth = xmlnode_new("auth"); 37 xmlnode *auth = xmlnode_new("auth");
38 xmlnode_set_namespace(auth, NS_XMPP_SASL); 38 xmlnode_set_namespace(auth, NS_XMPP_SASL);
39 xmlnode_set_attrib(auth, "mechanism", "DIGEST-MD5"); 39 xmlnode_set_attrib(auth, "mechanism", "DIGEST-MD5");
40 40
164 return z; 164 return z;
165 } 165 }
166 166
167 static JabberSaslState 167 static JabberSaslState
168 digest_md5_handle_challenge(JabberStream *js, xmlnode *packet, 168 digest_md5_handle_challenge(JabberStream *js, xmlnode *packet,
169 xmlnode **response, const char **msg) 169 xmlnode **response, char **msg)
170 { 170 {
171 xmlnode *reply = NULL; 171 xmlnode *reply = NULL;
172 char *enc_in = xmlnode_get_data(packet); 172 char *enc_in = xmlnode_get_data(packet);
173 char *dec_in; 173 char *dec_in;
174 char *enc_out; 174 char *enc_out;
175 GHashTable *parts; 175 GHashTable *parts;
176 JabberSaslState state = JABBER_SASL_STATE_CONTINUE; 176 JabberSaslState state = JABBER_SASL_STATE_CONTINUE;
177 177
178 if (!enc_in) { 178 if (!enc_in) {
179 *msg = _("Invalid response from server"); 179 *msg = g_strdup(_("Invalid response from server"));
180 return JABBER_SASL_STATE_FAIL; 180 return JABBER_SASL_STATE_FAIL;
181 } 181 }
182 182
183 dec_in = (char *)purple_base64_decode(enc_in, NULL); 183 dec_in = (char *)purple_base64_decode(enc_in, NULL);
184 purple_debug_misc("jabber", "decoded challenge (%" 184 purple_debug_misc("jabber", "decoded challenge (%"
191 191
192 if (rspauth && purple_strequal(rspauth, js->expected_rspauth)) { 192 if (rspauth && purple_strequal(rspauth, js->expected_rspauth)) {
193 reply = xmlnode_new("response"); 193 reply = xmlnode_new("response");
194 xmlnode_set_namespace(reply, NS_XMPP_SASL); 194 xmlnode_set_namespace(reply, NS_XMPP_SASL);
195 } else { 195 } else {
196 *msg = _("Invalid challenge from server"); 196 *msg = g_strdup(_("Invalid challenge from server"));
197 state = JABBER_SASL_STATE_FAIL; 197 state = JABBER_SASL_STATE_FAIL;
198 } 198 }
199 g_free(js->expected_rspauth); 199 g_free(js->expected_rspauth);
200 js->expected_rspauth = NULL; 200 js->expected_rspauth = NULL;
201 } else { 201 } else {
216 realm = g_hash_table_lookup(parts, "realm"); 216 realm = g_hash_table_lookup(parts, "realm");
217 if(!realm) 217 if(!realm)
218 realm = js->user->domain; 218 realm = js->user->domain;
219 219
220 if (nonce == NULL || realm == NULL) { 220 if (nonce == NULL || realm == NULL) {
221 *msg = _("Invalid challenge from server"); 221 *msg = g_strdup(_("Invalid challenge from server"));
222 state = JABBER_SASL_STATE_FAIL; 222 state = JABBER_SASL_STATE_FAIL;
223 } else { 223 } else {
224 GString *response = g_string_new(""); 224 GString *response = g_string_new("");
225 char *a2; 225 char *a2;
226 char *auth_resp; 226 char *auth_resp;

mercurial