Mercurial > pidgin
comparison src/protocols/jabber/auth.c @ 7395:b250288fa948
[gaim-migrate @ 7990]
this would be the non-working start of file transfer (the real way) for jabber
also approximately eleventy billion jabber tweaks
committer: Tailor Script <tailor@pidgin.im>
author | Nathan Walp <nwalp@pidgin.im> |
---|---|
date | Fri, 31 Oct 2003 02:43:58 +0000 |
parents | 632cee95cc5c |
children | 85cd2e71bff7 |
comparison
equal
deleted
inserted
replaced
7394:c6ff3c1fb1b3 | 7395:b250288fa948 |
---|---|
89 } | 89 } |
90 jabber_send(js, auth); | 90 jabber_send(js, auth); |
91 xmlnode_free(auth); | 91 xmlnode_free(auth); |
92 } | 92 } |
93 | 93 |
94 static void auth_old_result_cb(JabberStream *js, xmlnode *packet) | 94 static void auth_old_result_cb(JabberStream *js, xmlnode *packet, gpointer data) |
95 { | 95 { |
96 const char *type = xmlnode_get_attrib(packet, "type"); | 96 const char *type = xmlnode_get_attrib(packet, "type"); |
97 | 97 |
98 if(type && !strcmp(type, "error")) { | 98 if(type && !strcmp(type, "error")) { |
99 xmlnode *error = xmlnode_get_child(packet, "error"); | 99 xmlnode *error = xmlnode_get_child(packet, "error"); |
120 g_free(buf); | 120 g_free(buf); |
121 } | 121 } |
122 jabber_stream_set_state(js, JABBER_STREAM_CONNECTED); | 122 jabber_stream_set_state(js, JABBER_STREAM_CONNECTED); |
123 } | 123 } |
124 | 124 |
125 static void auth_old_cb(JabberStream *js, xmlnode *packet) | 125 static void auth_old_cb(JabberStream *js, xmlnode *packet, gpointer data) |
126 { | 126 { |
127 JabberIq *iq; | 127 JabberIq *iq; |
128 xmlnode *query, *x; | 128 xmlnode *query, *x; |
129 gboolean digest = FALSE; | 129 gboolean digest = FALSE; |
130 const char *pw = gaim_account_get_password(js->gc->account); | 130 const char *pw = gaim_account_get_password(js->gc->account); |
161 } else { | 161 } else { |
162 x = xmlnode_new_child(query, "password"); | 162 x = xmlnode_new_child(query, "password"); |
163 xmlnode_insert_data(x, pw, -1); | 163 xmlnode_insert_data(x, pw, -1); |
164 } | 164 } |
165 | 165 |
166 jabber_iq_set_callback(iq, auth_old_result_cb); | 166 jabber_iq_set_callback(iq, auth_old_result_cb, NULL); |
167 | 167 |
168 jabber_iq_send(iq); | 168 jabber_iq_send(iq); |
169 } | 169 } |
170 | 170 |
171 void jabber_auth_start_old(JabberStream *js) | 171 void jabber_auth_start_old(JabberStream *js) |
177 | 177 |
178 query = xmlnode_get_child(iq->node, "query"); | 178 query = xmlnode_get_child(iq->node, "query"); |
179 username = xmlnode_new_child(query, "username"); | 179 username = xmlnode_new_child(query, "username"); |
180 xmlnode_insert_data(username, js->user->node, -1); | 180 xmlnode_insert_data(username, js->user->node, -1); |
181 | 181 |
182 jabber_iq_set_callback(iq, auth_old_cb); | 182 jabber_iq_set_callback(iq, auth_old_cb, NULL); |
183 | 183 |
184 jabber_iq_send(iq); | 184 jabber_iq_send(iq); |
185 } | 185 } |
186 | 186 |
187 static GHashTable* parse_challenge(const char *challenge) | 187 static GHashTable* parse_challenge(const char *challenge) |
223 md5_append(&ctx, x, strlen(x)); | 223 md5_append(&ctx, x, strlen(x)); |
224 md5_finish(&ctx, result); | 224 md5_finish(&ctx, result); |
225 | 225 |
226 y = g_strndup(result, 16); | 226 y = g_strndup(result, 16); |
227 | 227 |
228 a1 = g_strdup_printf("%s:%s:%s:%s@%s/%s", y, nonce, cnonce, jid->node, | 228 a1 = g_strdup_printf("%s:%s:%s:%s@%s", y, nonce, cnonce, jid->node, |
229 jid->domain, jid->resource); | 229 jid->domain); |
230 | 230 |
231 md5_init(&ctx); | 231 md5_init(&ctx); |
232 md5_append(&ctx, a1, strlen(a1)); | 232 md5_append(&ctx, a1, strlen(a1)); |
233 md5_finish(&ctx, result); | 233 md5_finish(&ctx, result); |
234 | 234 |
268 char *enc_in = xmlnode_get_data(packet); | 268 char *enc_in = xmlnode_get_data(packet); |
269 char *dec_in; | 269 char *dec_in; |
270 char *enc_out; | 270 char *enc_out; |
271 GHashTable *parts; | 271 GHashTable *parts; |
272 | 272 |
273 if(!enc_in) { | |
274 gaim_connection_error(js->gc, _("Invalid response from server")); | |
275 return; | |
276 } | |
277 | |
273 gaim_base64_decode(enc_in, &dec_in, NULL); | 278 gaim_base64_decode(enc_in, &dec_in, NULL); |
279 gaim_debug(GAIM_DEBUG_MISC, "jabber", "decoded challenge (%d): %s\n", | |
280 strlen(dec_in), dec_in); | |
274 | 281 |
275 parts = parse_challenge(dec_in); | 282 parts = parse_challenge(dec_in); |
276 | 283 |
277 | 284 |
278 if (g_hash_table_lookup(parts, "rspauth")) { | 285 if (g_hash_table_lookup(parts, "rspauth")) { |
329 g_string_append_printf(response, ",nc=00000001"); | 336 g_string_append_printf(response, ",nc=00000001"); |
330 g_string_append_printf(response, ",qop=auth"); | 337 g_string_append_printf(response, ",qop=auth"); |
331 g_string_append_printf(response, ",digest-uri=\"xmpp/%s\"", realm); | 338 g_string_append_printf(response, ",digest-uri=\"xmpp/%s\"", realm); |
332 g_string_append_printf(response, ",response=%s", auth_resp); | 339 g_string_append_printf(response, ",response=%s", auth_resp); |
333 g_string_append_printf(response, ",charset=utf-8"); | 340 g_string_append_printf(response, ",charset=utf-8"); |
334 g_string_append_printf(response, ",authzid=\"%s@%s/%s\"", | 341 g_string_append_printf(response, ",authzid=\"%s@%s\"", |
335 js->user->node, js->user->domain, js->user->resource); | 342 js->user->node, js->user->domain); |
336 | 343 |
337 g_free(auth_resp); | 344 g_free(auth_resp); |
338 g_free(cnonce); | 345 g_free(cnonce); |
339 | 346 |
340 enc_out = gaim_base64_encode(response->str, response->len); | 347 enc_out = gaim_base64_encode(response->str, response->len); |