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