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);