comparison src/protocols/yahoo/yahoo.c @ 14046:eb1a7d176149

[gaim-migrate @ 16658] It has been too long since I did something productive here. Fix logging into yahoo with a password containing non-ascii characters. This fixes bug #1534796. committer: Tailor Script <tailor@pidgin.im>
author Daniel Atallah <daniel.atallah@gmail.com>
date Sun, 06 Aug 2006 23:47:34 +0000
parents 6fc412e59214
children 1e084a6e7446
comparison
equal deleted inserted replaced
14045:3cefea0bf4a2 14046:eb1a7d176149
1239 { 1239 {
1240 struct yahoo_packet *pack = NULL; 1240 struct yahoo_packet *pack = NULL;
1241 GaimAccount *account = gaim_connection_get_account(gc); 1241 GaimAccount *account = gaim_connection_get_account(gc);
1242 const char *name = gaim_normalize(account, gaim_account_get_username(account)); 1242 const char *name = gaim_normalize(account, gaim_account_get_username(account));
1243 const char *pass = gaim_connection_get_password(gc); 1243 const char *pass = gaim_connection_get_password(gc);
1244 char *enc_pass;
1244 struct yahoo_data *yd = gc->proto_data; 1245 struct yahoo_data *yd = gc->proto_data;
1245 1246
1246 GaimCipher *md5_cipher; 1247 GaimCipher *md5_cipher;
1247 GaimCipherContext *md5_ctx; 1248 GaimCipherContext *md5_ctx;
1248 guchar md5_digest[16]; 1249 guchar md5_digest[16];
1470 magic_key_char[1] = (updated_key >> 8) & 0xff; 1471 magic_key_char[1] = (updated_key >> 8) & 0xff;
1471 magic_key_char[2] = (updated_key >> 16) & 0xff; 1472 magic_key_char[2] = (updated_key >> 16) & 0xff;
1472 magic_key_char[3] = (updated_key >> 24) & 0xff; 1473 magic_key_char[3] = (updated_key >> 24) & 0xff;
1473 } 1474 }
1474 1475
1476 enc_pass = yahoo_string_encode(gc, pass, NULL);
1477
1475 /* Get password and crypt hashes as per usual. */ 1478 /* Get password and crypt hashes as per usual. */
1476 gaim_cipher_context_reset(md5_ctx, NULL); 1479 gaim_cipher_context_reset(md5_ctx, NULL);
1477 gaim_cipher_context_append(md5_ctx, (const guchar *)pass, strlen(pass)); 1480 gaim_cipher_context_append(md5_ctx, (const guchar *)enc_pass, strlen(enc_pass));
1478 gaim_cipher_context_digest(md5_ctx, sizeof(md5_digest), 1481 gaim_cipher_context_digest(md5_ctx, sizeof(md5_digest),
1479 md5_digest, NULL); 1482 md5_digest, NULL);
1480 to_y64(password_hash, md5_digest, 16); 1483 to_y64(password_hash, md5_digest, 16);
1481 1484
1482 crypt_result = yahoo_crypt(pass, "$1$_2S43d5f$"); 1485 crypt_result = yahoo_crypt(enc_pass, "$1$_2S43d5f$");
1486
1487 g_free(enc_pass);
1488 enc_pass = NULL;
1489
1483 gaim_cipher_context_reset(md5_ctx, NULL); 1490 gaim_cipher_context_reset(md5_ctx, NULL);
1484 gaim_cipher_context_append(md5_ctx, (const guchar *)crypt_result, strlen(crypt_result)); 1491 gaim_cipher_context_append(md5_ctx, (const guchar *)crypt_result, strlen(crypt_result));
1485 gaim_cipher_context_digest(md5_ctx, sizeof(md5_digest), 1492 gaim_cipher_context_digest(md5_ctx, sizeof(md5_digest),
1486 md5_digest, NULL); 1493 md5_digest, NULL);
1487 to_y64(crypt_hash, md5_digest, 16); 1494 to_y64(crypt_hash, md5_digest, 16);