annotate libpurple/protocols/msn/nexus.c @ 32721:2dd117990702

Unless I'm missing something really obvious, this should fix #14544 by telling the compiler where to find GNUTLS headers. It should also allow the gg prpl to be linked against GNUTLS if we're using an external libgadu.
author John Bailey <rekkanoryo@rekkanoryo.org>
date Sat, 01 Oct 2011 23:20:49 +0000
parents 504a65e03514
children 10e5000326a5
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1 /**
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
2 * @file nexus.c MSN Nexus functions
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
3 *
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15374
diff changeset
4 * purple
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
5 *
15823
32c366eeeb99 sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@gmail.com>
parents: 15374
diff changeset
6 * Purple is the legal property of its developers, whose names are too numerous
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
7 * to list here. Please refer to the COPYRIGHT file distributed with this
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
8 * source distribution.
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
9 *
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
10 * This program is free software; you can redistribute it and/or modify
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
11 * it under the terms of the GNU General Public License as published by
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
12 * the Free Software Foundation; either version 2 of the License, or
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
13 * (at your option) any later version.
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
14 *
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
15 * This program is distributed in the hope that it will be useful,
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
18 * GNU General Public License for more details.
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
19 *
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
20 * You should have received a copy of the GNU General Public License
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
21 * along with this program; if not, write to the Free Software
19680
44b4e8bd759b The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 19653
diff changeset
22 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
23 */
31180
a99b6dcdb60d Remove unnecesary includes from msn.h.
masca@cpw.pidgin.im
parents: 29628
diff changeset
24
31196
230caecf5435 Include internal.h on each c file to avoid windows breakage as recommended by Daniel.
masca@cpw.pidgin.im
parents: 31180
diff changeset
25 #include "internal.h"
31180
a99b6dcdb60d Remove unnecesary includes from msn.h.
masca@cpw.pidgin.im
parents: 29628
diff changeset
26 #include "cipher.h"
a99b6dcdb60d Remove unnecesary includes from msn.h.
masca@cpw.pidgin.im
parents: 29628
diff changeset
27 #include "debug.h"
a99b6dcdb60d Remove unnecesary includes from msn.h.
masca@cpw.pidgin.im
parents: 29628
diff changeset
28
32069
504a65e03514 Remove some struct packing from code that does login. I think this is
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 31196
diff changeset
29 #include "msnutils.h"
23552
711773577380 Clean up some MSN SOAP stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23538
diff changeset
30 #include "soap.h"
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
31 #include "nexus.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
32 #include "notification.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
33
23489
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
34 /**************************************************************************
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
35 * Valid Ticket Tokens
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
36 **************************************************************************/
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
37
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
38 #define SSO_VALID_TICKET_DOMAIN 0
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
39 #define SSO_VALID_TICKET_POLICY 1
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
40 static char *ticket_domains[][2] = {
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
41 /* http://msnpiki.msnfanatic.com/index.php/MSNP15:SSO */
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
42 /* {"Domain", "Policy Ref URI"}, Purpose */
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
43 {"messengerclear.live.com", NULL}, /* Authentication for messenger. */
23497
b268fc2c9121 References #4382, fixes getting offline messages in p15
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23495
diff changeset
44 {"messenger.msn.com", "?id=507"}, /* Authentication for receiving OIMs. */
23489
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
45 {"contacts.msn.com", "MBI"}, /* Authentication for the Contact server. */
23497
b268fc2c9121 References #4382, fixes getting offline messages in p15
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23495
diff changeset
46 {"messengersecure.live.com", "MBI_SSL"}, /* Authentication for sending OIMs. */
23489
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
47 {"spaces.live.com", "MBI"}, /* Authentication for the Windows Live Spaces */
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
48 {"livecontacts.live.com", "MBI"}, /* Live Contacts API, a simplified version of the Contacts SOAP service */
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
49 {"storage.live.com", "MBI"}, /* Storage REST API */
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
50 };
19797
60bc06498746 Committing khc's msnp14 changes from Trac Ticket #148. --rlaager
Ka-Hing Cheung <khc@hxbc.us>
parents: 16078
diff changeset
51
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
52 /**************************************************************************
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
53 * Main
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
54 **************************************************************************/
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
55
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
56 MsnNexus *
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
57 msn_nexus_new(MsnSession *session)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
58 {
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
59 MsnNexus *nexus;
23489
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
60 int i;
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
61
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
62 nexus = g_new0(MsnNexus, 1);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
63 nexus->session = session;
19797
60bc06498746 Committing khc's msnp14 changes from Trac Ticket #148. --rlaager
Ka-Hing Cheung <khc@hxbc.us>
parents: 16078
diff changeset
64
23489
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
65 nexus->token_len = sizeof(ticket_domains) / sizeof(char *[2]);
23500
f182cf94145c zero out this, side effect is not crashing when password is incorrect
Ka-Hing Cheung <khc@hxbc.us>
parents: 23498
diff changeset
66 nexus->tokens = g_new0(MsnTicketToken, nexus->token_len);
23489
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
67
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
68 for (i = 0; i < nexus->token_len; i++)
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
69 nexus->tokens[i].token = g_hash_table_new_full(g_str_hash, g_str_equal,
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
70 g_free, g_free);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
71
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
72 return nexus;
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
73 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
74
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
75 void
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
76 msn_nexus_destroy(MsnNexus *nexus)
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
77 {
23489
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
78 int i;
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
79 for (i = 0; i < nexus->token_len; i++) {
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
80 g_hash_table_destroy(nexus->tokens[i].token);
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
81 g_free(nexus->tokens[i].secret);
25091
3f6dbc414357 Add a missed g_slist_free.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 25086
diff changeset
82 g_slist_free(nexus->tokens[i].updates);
23489
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
83 }
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
84
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
85 g_free(nexus->tokens);
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
86 g_free(nexus->policy);
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
87 g_free(nexus->nonce);
23513
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
88 g_free(nexus->cipher);
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
89 g_free(nexus->secret);
23489
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
90 g_free(nexus);
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
91 }
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
92
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
93 /**************************************************************************
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
94 * RPS/SSO Authentication
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
95 **************************************************************************/
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
96
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
97 static char *
23513
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
98 rps_create_key(const char *key, int key_len, const char *data, size_t data_len)
23489
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
99 {
23513
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
100 const guchar magic[] = "WS-SecureConversation";
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
101 const int magic_len = sizeof(magic) - 1;
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
102
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
103 PurpleCipherContext *hmac;
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
104 guchar hash1[20], hash2[20], hash3[20], hash4[20];
23489
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
105 char *result;
23513
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
106
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
107 hmac = purple_cipher_context_new_by_name("hmac", NULL);
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
108
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
109 purple_cipher_context_set_option(hmac, "hash", "sha1");
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
110 purple_cipher_context_set_key_with_len(hmac, (guchar *)key, key_len);
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
111 purple_cipher_context_append(hmac, magic, magic_len);
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
112 purple_cipher_context_append(hmac, (guchar *)data, data_len);
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
113 purple_cipher_context_digest(hmac, sizeof(hash1), hash1, NULL);
23489
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
114
23513
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
115 purple_cipher_context_reset(hmac, NULL);
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
116 purple_cipher_context_set_option(hmac, "hash", "sha1");
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
117 purple_cipher_context_set_key_with_len(hmac, (guchar *)key, key_len);
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
118 purple_cipher_context_append(hmac, hash1, 20);
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
119 purple_cipher_context_append(hmac, magic, magic_len);
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
120 purple_cipher_context_append(hmac, (guchar *)data, data_len);
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
121 purple_cipher_context_digest(hmac, sizeof(hash2), hash2, NULL);
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
122
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
123 purple_cipher_context_reset(hmac, NULL);
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
124 purple_cipher_context_set_option(hmac, "hash", "sha1");
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
125 purple_cipher_context_set_key_with_len(hmac, (guchar *)key, key_len);
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
126 purple_cipher_context_append(hmac, hash1, 20);
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
127 purple_cipher_context_digest(hmac, sizeof(hash3), hash3, NULL);
23489
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
128
23513
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
129 purple_cipher_context_reset(hmac, NULL);
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
130 purple_cipher_context_set_option(hmac, "hash", "sha1");
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
131 purple_cipher_context_set_key_with_len(hmac, (guchar *)key, key_len);
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
132 purple_cipher_context_append(hmac, hash3, sizeof(hash3));
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
133 purple_cipher_context_append(hmac, magic, magic_len);
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
134 purple_cipher_context_append(hmac, (guchar *)data, data_len);
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
135 purple_cipher_context_digest(hmac, sizeof(hash4), hash4, NULL);
23489
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
136
23513
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
137 purple_cipher_context_destroy(hmac);
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
138
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
139 result = g_malloc(24);
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
140 memcpy(result, hash2, sizeof(hash2));
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
141 memcpy(result + sizeof(hash2), hash4, 4);
23489
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
142
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
143 return result;
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
144 }
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
145
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
146 static char *
23513
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
147 des3_cbc(const char *key, const char *iv, const char *data, int len, gboolean decrypt)
23489
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
148 {
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
149 PurpleCipherContext *des3;
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
150 char *out;
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
151 size_t outlen;
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
152
23489
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
153 des3 = purple_cipher_context_new_by_name("des3", NULL);
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
154 purple_cipher_context_set_key(des3, (guchar *)key);
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
155 purple_cipher_context_set_batch_mode(des3, PURPLE_CIPHER_BATCH_MODE_CBC);
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
156 purple_cipher_context_set_iv(des3, (guchar *)iv, 8);
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
157
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
158 out = g_malloc(len);
23513
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
159 if (decrypt)
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
160 purple_cipher_context_decrypt(des3, (guchar *)data, len, (guchar *)out, &outlen);
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
161 else
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
162 purple_cipher_context_encrypt(des3, (guchar *)data, len, (guchar *)out, &outlen);
23489
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
163
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
164 purple_cipher_context_destroy(des3);
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
165
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
166 return out;
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
167 }
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
168
32069
504a65e03514 Remove some struct packing from code that does login. I think this is
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 31196
diff changeset
169 #define MSN_USER_KEY_SIZE (7*4 + 8 + 20 + 72)
23489
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
170 #define CRYPT_MODE_CBC 1
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
171 #define CIPHER_TRIPLE_DES 0x6603
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
172 #define HASH_SHA1 0x8004
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
173 static char *
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
174 msn_rps_encrypt(MsnNexus *nexus)
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
175 {
32069
504a65e03514 Remove some struct packing from code that does login. I think this is
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 31196
diff changeset
176 char usr_key_base[MSN_USER_KEY_SIZE], *usr_key;
23513
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
177 const char magic1[] = "SESSION KEY HASH";
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
178 const char magic2[] = "SESSION KEY ENCRYPTION";
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
179 PurpleCipherContext *hmac;
23489
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
180 size_t len;
32069
504a65e03514 Remove some struct packing from code that does login. I think this is
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 31196
diff changeset
181 guchar *hash;
23489
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
182 char *key1, *key2, *key3;
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
183 gsize key1_len;
32069
504a65e03514 Remove some struct packing from code that does login. I think this is
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 31196
diff changeset
184 const char *iv;
23489
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
185 char *nonce_fixed;
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
186 char *cipher;
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
187 char *response;
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
188
32069
504a65e03514 Remove some struct packing from code that does login. I think this is
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 31196
diff changeset
189 usr_key = &usr_key_base[0];
504a65e03514 Remove some struct packing from code that does login. I think this is
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 31196
diff changeset
190 /* Header */
504a65e03514 Remove some struct packing from code that does login. I think this is
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 31196
diff changeset
191 msn_push32le(usr_key, 28); /* Header size */
504a65e03514 Remove some struct packing from code that does login. I think this is
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 31196
diff changeset
192 msn_push32le(usr_key, CRYPT_MODE_CBC); /* Crypt mode */
504a65e03514 Remove some struct packing from code that does login. I think this is
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 31196
diff changeset
193 msn_push32le(usr_key, CIPHER_TRIPLE_DES); /* Cipher type */
504a65e03514 Remove some struct packing from code that does login. I think this is
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 31196
diff changeset
194 msn_push32le(usr_key, HASH_SHA1); /* Hash type */
504a65e03514 Remove some struct packing from code that does login. I think this is
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 31196
diff changeset
195 msn_push32le(usr_key, 8); /* IV size */
504a65e03514 Remove some struct packing from code that does login. I think this is
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 31196
diff changeset
196 msn_push32le(usr_key, 20); /* Hash size */
504a65e03514 Remove some struct packing from code that does login. I think this is
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 31196
diff changeset
197 msn_push32le(usr_key, 72); /* Cipher size */
504a65e03514 Remove some struct packing from code that does login. I think this is
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 31196
diff changeset
198 /* Data */
504a65e03514 Remove some struct packing from code that does login. I think this is
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 31196
diff changeset
199 iv = usr_key;
504a65e03514 Remove some struct packing from code that does login. I think this is
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 31196
diff changeset
200 msn_push32le(usr_key, rand());
504a65e03514 Remove some struct packing from code that does login. I think this is
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 31196
diff changeset
201 msn_push32le(usr_key, rand());
504a65e03514 Remove some struct packing from code that does login. I think this is
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 31196
diff changeset
202 hash = (guchar *)usr_key;
504a65e03514 Remove some struct packing from code that does login. I think this is
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 31196
diff changeset
203 usr_key += 20; /* Remaining is cipher data */
23489
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
204
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
205 key1 = (char *)purple_base64_decode((const char *)nexus->tokens[MSN_AUTH_MESSENGER].secret, &key1_len);
23513
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
206 key2 = rps_create_key(key1, key1_len, magic1, sizeof(magic1) - 1);
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
207 key3 = rps_create_key(key1, key1_len, magic2, sizeof(magic2) - 1);
23489
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
208
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
209 len = strlen(nexus->nonce);
23513
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
210 hmac = purple_cipher_context_new_by_name("hmac", NULL);
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
211 purple_cipher_context_set_option(hmac, "hash", "sha1");
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
212 purple_cipher_context_set_key_with_len(hmac, (guchar *)key2, 24);
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
213 purple_cipher_context_append(hmac, (guchar *)nexus->nonce, len);
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
214 purple_cipher_context_digest(hmac, 20, hash, NULL);
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
215 purple_cipher_context_destroy(hmac);
23489
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
216
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
217 /* We need to pad this to 72 bytes, apparently */
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
218 nonce_fixed = g_malloc(len + 8);
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
219 memcpy(nonce_fixed, nexus->nonce, len);
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
220 memset(nonce_fixed + len, 0x08, 8);
32069
504a65e03514 Remove some struct packing from code that does login. I think this is
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 31196
diff changeset
221 cipher = des3_cbc(key3, iv, nonce_fixed, len + 8, FALSE);
23489
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
222 g_free(nonce_fixed);
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
223
32069
504a65e03514 Remove some struct packing from code that does login. I think this is
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 31196
diff changeset
224 memcpy(usr_key, cipher, 72);
23489
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
225
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
226 g_free(key1);
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
227 g_free(key2);
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
228 g_free(key3);
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
229 g_free(cipher);
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
230
32069
504a65e03514 Remove some struct packing from code that does login. I think this is
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 31196
diff changeset
231 response = purple_base64_encode((guchar *)usr_key_base, MSN_USER_KEY_SIZE);
23489
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
232
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
233 return response;
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
234 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
235
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
236 /**************************************************************************
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
237 * Login
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
238 **************************************************************************/
19797
60bc06498746 Committing khc's msnp14 changes from Trac Ticket #148. --rlaager
Ka-Hing Cheung <khc@hxbc.us>
parents: 16078
diff changeset
239
23513
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
240 /* Used to specify which token to update when only doing single updates */
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
241 typedef struct _MsnNexusUpdateData MsnNexusUpdateData;
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
242 struct _MsnNexusUpdateData {
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
243 MsnNexus *nexus;
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
244 int id;
25086
6a0304f317cf I was hoping this wouldn't be necessary, but it seems that the possibility
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24729
diff changeset
245 };
6a0304f317cf I was hoping this wouldn't be necessary, but it seems that the possibility
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24729
diff changeset
246
6a0304f317cf I was hoping this wouldn't be necessary, but it seems that the possibility
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24729
diff changeset
247 typedef struct _MsnNexusUpdateCallback MsnNexusUpdateCallback;
6a0304f317cf I was hoping this wouldn't be necessary, but it seems that the possibility
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24729
diff changeset
248 struct _MsnNexusUpdateCallback {
23513
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
249 GSourceFunc cb;
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
250 gpointer data;
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
251 };
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
252
23521
9fdf0accd4aa Finally got MSN token updating working (I think).
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23513
diff changeset
253 static gboolean
9fdf0accd4aa Finally got MSN token updating working (I think).
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23513
diff changeset
254 nexus_parse_token(MsnNexus *nexus, int id, xmlnode *node)
23513
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
255 {
23521
9fdf0accd4aa Finally got MSN token updating working (I think).
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23513
diff changeset
256 char *token_str, *expiry_str;
9fdf0accd4aa Finally got MSN token updating working (I think).
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23513
diff changeset
257 const char *id_str;
23513
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
258 char **elems, **cur, **tokens;
23521
9fdf0accd4aa Finally got MSN token updating working (I think).
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23513
diff changeset
259 xmlnode *token = xmlnode_get_child(node, "RequestedSecurityToken/BinarySecurityToken");
9fdf0accd4aa Finally got MSN token updating working (I think).
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23513
diff changeset
260 xmlnode *secret = xmlnode_get_child(node, "RequestedProofToken/BinarySecret");
9fdf0accd4aa Finally got MSN token updating working (I think).
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23513
diff changeset
261 xmlnode *expires = xmlnode_get_child(node, "LifeTime/Expires");
9fdf0accd4aa Finally got MSN token updating working (I think).
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23513
diff changeset
262
9fdf0accd4aa Finally got MSN token updating working (I think).
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23513
diff changeset
263 if (!token)
9fdf0accd4aa Finally got MSN token updating working (I think).
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23513
diff changeset
264 return FALSE;
23513
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
265
23521
9fdf0accd4aa Finally got MSN token updating working (I think).
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23513
diff changeset
266 /* Use the ID that the server sent us */
9fdf0accd4aa Finally got MSN token updating working (I think).
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23513
diff changeset
267 if (id == -1) {
9fdf0accd4aa Finally got MSN token updating working (I think).
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23513
diff changeset
268 id_str = xmlnode_get_attrib(token, "Id");
9fdf0accd4aa Finally got MSN token updating working (I think).
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23513
diff changeset
269 if (id_str == NULL)
9fdf0accd4aa Finally got MSN token updating working (I think).
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23513
diff changeset
270 return FALSE;
9fdf0accd4aa Finally got MSN token updating working (I think).
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23513
diff changeset
271
9fdf0accd4aa Finally got MSN token updating working (I think).
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23513
diff changeset
272 id = atol(id_str + 7) - 1; /* 'Compact#' or 'PPToken#' */
9fdf0accd4aa Finally got MSN token updating working (I think).
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23513
diff changeset
273 if (id >= nexus->token_len)
9fdf0accd4aa Finally got MSN token updating working (I think).
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23513
diff changeset
274 return FALSE; /* Where did this come from? */
9fdf0accd4aa Finally got MSN token updating working (I think).
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23513
diff changeset
275 }
9fdf0accd4aa Finally got MSN token updating working (I think).
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23513
diff changeset
276
9fdf0accd4aa Finally got MSN token updating working (I think).
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23513
diff changeset
277 token_str = xmlnode_get_data(token);
9fdf0accd4aa Finally got MSN token updating working (I think).
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23513
diff changeset
278 if (token_str == NULL)
9fdf0accd4aa Finally got MSN token updating working (I think).
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23513
diff changeset
279 return FALSE;
9fdf0accd4aa Finally got MSN token updating working (I think).
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23513
diff changeset
280
23538
c5891c8d0c28 Sometimes (after 24h+) when you request a MSN token update, you get a
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23521
diff changeset
281 g_hash_table_remove_all(nexus->tokens[id].token);
c5891c8d0c28 Sometimes (after 24h+) when you request a MSN token update, you get a
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23521
diff changeset
282
23521
9fdf0accd4aa Finally got MSN token updating working (I think).
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23513
diff changeset
283 elems = g_strsplit(token_str, "&", 0);
23513
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
284
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
285 for (cur = elems; *cur != NULL; cur++) {
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
286 tokens = g_strsplit(*cur, "=", 2);
23521
9fdf0accd4aa Finally got MSN token updating working (I think).
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23513
diff changeset
287 g_hash_table_insert(nexus->tokens[id].token, tokens[0], tokens[1]);
23513
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
288 /* Don't free each of the tokens, only the array. */
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
289 g_free(tokens);
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
290 }
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
291 g_strfreev(elems);
23521
9fdf0accd4aa Finally got MSN token updating working (I think).
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23513
diff changeset
292 g_free(token_str);
9fdf0accd4aa Finally got MSN token updating working (I think).
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23513
diff changeset
293
9fdf0accd4aa Finally got MSN token updating working (I think).
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23513
diff changeset
294 if (secret)
9fdf0accd4aa Finally got MSN token updating working (I think).
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23513
diff changeset
295 nexus->tokens[id].secret = xmlnode_get_data(secret);
9fdf0accd4aa Finally got MSN token updating working (I think).
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23513
diff changeset
296 else
9fdf0accd4aa Finally got MSN token updating working (I think).
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23513
diff changeset
297 nexus->tokens[id].secret = NULL;
9fdf0accd4aa Finally got MSN token updating working (I think).
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23513
diff changeset
298
9fdf0accd4aa Finally got MSN token updating working (I think).
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23513
diff changeset
299 /* Yay for MS using ISO-8601 */
9fdf0accd4aa Finally got MSN token updating working (I think).
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23513
diff changeset
300 expiry_str = xmlnode_get_data(expires);
9fdf0accd4aa Finally got MSN token updating working (I think).
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23513
diff changeset
301 nexus->tokens[id].expiry = purple_str_to_time(expiry_str,
9fdf0accd4aa Finally got MSN token updating working (I think).
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23513
diff changeset
302 FALSE, NULL, NULL, NULL);
9fdf0accd4aa Finally got MSN token updating working (I think).
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23513
diff changeset
303 g_free(expiry_str);
9fdf0accd4aa Finally got MSN token updating working (I think).
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23513
diff changeset
304
23564
7bceac816e19 The great MSN debug message cleanup! Threw in a few whitespace fixes,
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23552
diff changeset
305 purple_debug_info("msn", "Updated ticket for domain '%s', expires at %" G_GINT64_FORMAT ".\n",
23521
9fdf0accd4aa Finally got MSN token updating working (I think).
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23513
diff changeset
306 ticket_domains[id][SSO_VALID_TICKET_DOMAIN],
9fdf0accd4aa Finally got MSN token updating working (I think).
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23513
diff changeset
307 (gint64)nexus->tokens[id].expiry);
9fdf0accd4aa Finally got MSN token updating working (I think).
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23513
diff changeset
308 return TRUE;
23513
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
309 }
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
310
23489
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
311 static gboolean
23538
c5891c8d0c28 Sometimes (after 24h+) when you request a MSN token update, you get a
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23521
diff changeset
312 nexus_parse_collection(MsnNexus *nexus, int id, xmlnode *collection)
19797
60bc06498746 Committing khc's msnp14 changes from Trac Ticket #148. --rlaager
Ka-Hing Cheung <khc@hxbc.us>
parents: 16078
diff changeset
313 {
20530
719ce4acfcb9 the new soap code finally doesn't crash on startup, still can't
Ka-Hing Cheung <khc@hxbc.us>
parents: 20514
diff changeset
314 xmlnode *node;
23521
9fdf0accd4aa Finally got MSN token updating working (I think).
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23513
diff changeset
315 gboolean result;
20530
719ce4acfcb9 the new soap code finally doesn't crash on startup, still can't
Ka-Hing Cheung <khc@hxbc.us>
parents: 20514
diff changeset
316
23538
c5891c8d0c28 Sometimes (after 24h+) when you request a MSN token update, you get a
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23521
diff changeset
317 node = xmlnode_get_child(collection, "RequestSecurityTokenResponse");
20530
719ce4acfcb9 the new soap code finally doesn't crash on startup, still can't
Ka-Hing Cheung <khc@hxbc.us>
parents: 20514
diff changeset
318
23513
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
319 if (!node)
23489
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
320 return FALSE;
20530
719ce4acfcb9 the new soap code finally doesn't crash on startup, still can't
Ka-Hing Cheung <khc@hxbc.us>
parents: 20514
diff changeset
321
23538
c5891c8d0c28 Sometimes (after 24h+) when you request a MSN token update, you get a
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23521
diff changeset
322 result = TRUE;
c5891c8d0c28 Sometimes (after 24h+) when you request a MSN token update, you get a
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23521
diff changeset
323 for (; node && result; node = node->next) {
c5891c8d0c28 Sometimes (after 24h+) when you request a MSN token update, you get a
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23521
diff changeset
324 xmlnode *endpoint = xmlnode_get_child(node, "AppliesTo/EndpointReference/Address");
c5891c8d0c28 Sometimes (after 24h+) when you request a MSN token update, you get a
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23521
diff changeset
325 char *address = xmlnode_get_data(endpoint);
c5891c8d0c28 Sometimes (after 24h+) when you request a MSN token update, you get a
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23521
diff changeset
326
c5891c8d0c28 Sometimes (after 24h+) when you request a MSN token update, you get a
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23521
diff changeset
327 if (g_str_equal(address, "http://Passport.NET/tb")) {
c5891c8d0c28 Sometimes (after 24h+) when you request a MSN token update, you get a
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23521
diff changeset
328 /* This node contains the stuff for updating tokens. */
c5891c8d0c28 Sometimes (after 24h+) when you request a MSN token update, you get a
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23521
diff changeset
329 char *data;
c5891c8d0c28 Sometimes (after 24h+) when you request a MSN token update, you get a
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23521
diff changeset
330 xmlnode *cipher = xmlnode_get_child(node, "RequestedSecurityToken/EncryptedData/CipherData/CipherValue");
c5891c8d0c28 Sometimes (after 24h+) when you request a MSN token update, you get a
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23521
diff changeset
331 xmlnode *secret = xmlnode_get_child(node, "RequestedProofToken/BinarySecret");
23513
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
332
28708
caef0d8dcb04 Leak fix.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 25091
diff changeset
333 g_free(nexus->cipher);
23538
c5891c8d0c28 Sometimes (after 24h+) when you request a MSN token update, you get a
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23521
diff changeset
334 nexus->cipher = xmlnode_get_data(cipher);
c5891c8d0c28 Sometimes (after 24h+) when you request a MSN token update, you get a
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23521
diff changeset
335 data = xmlnode_get_data(secret);
28708
caef0d8dcb04 Leak fix.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 25091
diff changeset
336 g_free(nexus->secret);
23538
c5891c8d0c28 Sometimes (after 24h+) when you request a MSN token update, you get a
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23521
diff changeset
337 nexus->secret = (char *)purple_base64_decode(data, NULL);
c5891c8d0c28 Sometimes (after 24h+) when you request a MSN token update, you get a
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23521
diff changeset
338 g_free(data);
c5891c8d0c28 Sometimes (after 24h+) when you request a MSN token update, you get a
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23521
diff changeset
339
c5891c8d0c28 Sometimes (after 24h+) when you request a MSN token update, you get a
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23521
diff changeset
340 } else {
c5891c8d0c28 Sometimes (after 24h+) when you request a MSN token update, you get a
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23521
diff changeset
341 result = nexus_parse_token(nexus, id, node);
c5891c8d0c28 Sometimes (after 24h+) when you request a MSN token update, you get a
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23521
diff changeset
342 }
c5891c8d0c28 Sometimes (after 24h+) when you request a MSN token update, you get a
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23521
diff changeset
343 g_free(address);
c5891c8d0c28 Sometimes (after 24h+) when you request a MSN token update, you get a
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23521
diff changeset
344 }
20531
a96b5015395a signs on!
Ka-Hing Cheung <khc@hxbc.us>
parents: 20530
diff changeset
345
23489
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
346 return result;
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
347 }
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
348
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
349 static void
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
350 nexus_got_response_cb(MsnSoapMessage *req, MsnSoapMessage *resp, gpointer data)
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
351 {
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
352 MsnNexus *nexus = data;
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
353 MsnSession *session = nexus->session;
23513
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
354 const char *ticket;
23489
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
355 char *response;
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
356
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
357 if (resp == NULL) {
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
358 msn_session_set_error(session, MSN_ERROR_SERVCONN, _("Windows Live ID authentication:Unable to connect"));
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
359 return;
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
360 }
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
361
23538
c5891c8d0c28 Sometimes (after 24h+) when you request a MSN token update, you get a
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23521
diff changeset
362 if (!nexus_parse_collection(nexus, -1,
c5891c8d0c28 Sometimes (after 24h+) when you request a MSN token update, you get a
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23521
diff changeset
363 xmlnode_get_child(resp->xml,
c5891c8d0c28 Sometimes (after 24h+) when you request a MSN token update, you get a
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23521
diff changeset
364 "Body/RequestSecurityTokenResponseCollection"))) {
23489
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
365 msn_session_set_error(session, MSN_ERROR_SERVCONN, _("Windows Live ID authentication:Invalid response"));
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
366 return;
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
367 }
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
368
23513
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
369 ticket = msn_nexus_get_token_str(nexus, MSN_AUTH_MESSENGER);
23489
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
370 response = msn_rps_encrypt(nexus);
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
371 msn_got_login_params(session, ticket, response);
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
372 g_free(response);
19797
60bc06498746 Committing khc's msnp14 changes from Trac Ticket #148. --rlaager
Ka-Hing Cheung <khc@hxbc.us>
parents: 16078
diff changeset
373 }
60bc06498746 Committing khc's msnp14 changes from Trac Ticket #148. --rlaager
Ka-Hing Cheung <khc@hxbc.us>
parents: 16078
diff changeset
374
60bc06498746 Committing khc's msnp14 changes from Trac Ticket #148. --rlaager
Ka-Hing Cheung <khc@hxbc.us>
parents: 16078
diff changeset
375 /*when connect, do the SOAP Style windows Live ID authentication */
60bc06498746 Committing khc's msnp14 changes from Trac Ticket #148. --rlaager
Ka-Hing Cheung <khc@hxbc.us>
parents: 16078
diff changeset
376 void
20532
10d27a4be2fd removed lots of commented out old soap code
Ka-Hing Cheung <khc@hxbc.us>
parents: 20531
diff changeset
377 msn_nexus_connect(MsnNexus *nexus)
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
378 {
20530
719ce4acfcb9 the new soap code finally doesn't crash on startup, still can't
Ka-Hing Cheung <khc@hxbc.us>
parents: 20514
diff changeset
379 MsnSession *session = nexus->session;
23513
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
380 const char *username;
23752
019d5ae3ad72 Use MIN(strlen(password), 16) for MSN because g_markup_escape_text will
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23670
diff changeset
381 const char *password;
019d5ae3ad72 Use MIN(strlen(password), 16) for MSN because g_markup_escape_text will
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23670
diff changeset
382 char *password_xml;
23489
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
383 GString *domains;
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
384 char *request;
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
385 int i;
19797
60bc06498746 Committing khc's msnp14 changes from Trac Ticket #148. --rlaager
Ka-Hing Cheung <khc@hxbc.us>
parents: 16078
diff changeset
386
20530
719ce4acfcb9 the new soap code finally doesn't crash on startup, still can't
Ka-Hing Cheung <khc@hxbc.us>
parents: 20514
diff changeset
387 MsnSoapMessage *soap;
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
388
23564
7bceac816e19 The great MSN debug message cleanup! Threw in a few whitespace fixes,
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23552
diff changeset
389 purple_debug_info("msn", "Starting Windows Live ID authentication\n");
19797
60bc06498746 Committing khc's msnp14 changes from Trac Ticket #148. --rlaager
Ka-Hing Cheung <khc@hxbc.us>
parents: 16078
diff changeset
390 msn_session_set_login_step(session, MSN_LOGIN_STEP_GET_COOKIE);
60bc06498746 Committing khc's msnp14 changes from Trac Ticket #148. --rlaager
Ka-Hing Cheung <khc@hxbc.us>
parents: 16078
diff changeset
391
23513
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
392 username = purple_account_get_username(session->account);
23752
019d5ae3ad72 Use MIN(strlen(password), 16) for MSN because g_markup_escape_text will
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23670
diff changeset
393 password = purple_connection_get_password(session->account->gc);
28875
8464e695c62b Fixes a bad MSN bug where passwords with multi-byte utf8 characters near
Mark Doliner <mark@kingant.net>
parents: 28730
diff changeset
394 if (g_utf8_strlen(password, -1) > 16) {
8464e695c62b Fixes a bad MSN bug where passwords with multi-byte utf8 characters near
Mark Doliner <mark@kingant.net>
parents: 28730
diff changeset
395 /* max byte size for 16 utf8 characters is 64 + 1 for the null */
8464e695c62b Fixes a bad MSN bug where passwords with multi-byte utf8 characters near
Mark Doliner <mark@kingant.net>
parents: 28730
diff changeset
396 gchar truncated[65];
8464e695c62b Fixes a bad MSN bug where passwords with multi-byte utf8 characters near
Mark Doliner <mark@kingant.net>
parents: 28730
diff changeset
397 g_utf8_strncpy(truncated, password, 16);
8464e695c62b Fixes a bad MSN bug where passwords with multi-byte utf8 characters near
Mark Doliner <mark@kingant.net>
parents: 28730
diff changeset
398 password_xml = g_markup_escape_text(truncated, -1);
8464e695c62b Fixes a bad MSN bug where passwords with multi-byte utf8 characters near
Mark Doliner <mark@kingant.net>
parents: 28730
diff changeset
399 } else {
8464e695c62b Fixes a bad MSN bug where passwords with multi-byte utf8 characters near
Mark Doliner <mark@kingant.net>
parents: 28730
diff changeset
400 password_xml = g_markup_escape_text(password, -1);
8464e695c62b Fixes a bad MSN bug where passwords with multi-byte utf8 characters near
Mark Doliner <mark@kingant.net>
parents: 28730
diff changeset
401 }
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
402
23564
7bceac816e19 The great MSN debug message cleanup! Threw in a few whitespace fixes,
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23552
diff changeset
403 purple_debug_info("msn", "Logging on %s, with policy '%s', nonce '%s'\n",
23489
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
404 username, nexus->policy, nexus->nonce);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
405
23489
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
406 domains = g_string_new(NULL);
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
407 for (i = 0; i < nexus->token_len; i++) {
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
408 g_string_append_printf(domains, MSN_SSO_RST_TEMPLATE,
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
409 i+1,
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
410 ticket_domains[i][SSO_VALID_TICKET_DOMAIN],
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
411 ticket_domains[i][SSO_VALID_TICKET_POLICY] != NULL ?
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
412 ticket_domains[i][SSO_VALID_TICKET_POLICY] :
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
413 nexus->policy);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
414 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
415
23752
019d5ae3ad72 Use MIN(strlen(password), 16) for MSN because g_markup_escape_text will
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23670
diff changeset
416 request = g_strdup_printf(MSN_SSO_TEMPLATE, username, password_xml, domains->str);
019d5ae3ad72 Use MIN(strlen(password), 16) for MSN because g_markup_escape_text will
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23670
diff changeset
417 g_free(password_xml);
23489
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
418 g_string_free(domains, TRUE);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
419
23489
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
420 soap = msn_soap_message_new(NULL, xmlnode_from_str(request, -1));
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
421 g_free(request);
23658
860e5e210fc9 Don't print SOAP messages to debug log for "secure" requests. This is
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23586
diff changeset
422 msn_soap_message_send(session, soap, MSN_SSO_SERVER, SSO_POST_URL, TRUE,
23489
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
423 nexus_got_response_cb, nexus);
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
424 }
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
425
23489
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
426 static void
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
427 nexus_got_update_cb(MsnSoapMessage *req, MsnSoapMessage *resp, gpointer data)
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
428 {
23513
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
429 MsnNexusUpdateData *ud = data;
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
430 MsnNexus *nexus = ud->nexus;
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
431 char iv[8] = {0,0,0,0,0,0,0,0};
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
432 xmlnode *enckey;
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
433 char *tmp;
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
434 char *nonce;
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
435 gsize len;
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
436 char *key;
25086
6a0304f317cf I was hoping this wouldn't be necessary, but it seems that the possibility
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24729
diff changeset
437 GSList *updates;
23513
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
438
23521
9fdf0accd4aa Finally got MSN token updating working (I think).
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23513
diff changeset
439 #if 0
23513
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
440 char *decrypted_pp;
23521
9fdf0accd4aa Finally got MSN token updating working (I think).
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23513
diff changeset
441 #endif
23513
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
442 char *decrypted_data;
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
443
24729
25667ca518d6 Do something sane if the response is NULL when updating contact tokens,
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23752
diff changeset
444 if (resp == NULL)
25667ca518d6 Do something sane if the response is NULL when updating contact tokens,
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23752
diff changeset
445 return;
25667ca518d6 Do something sane if the response is NULL when updating contact tokens,
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23752
diff changeset
446
23564
7bceac816e19 The great MSN debug message cleanup! Threw in a few whitespace fixes,
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23552
diff changeset
447 purple_debug_info("msn", "Got Update Response for %s.\n", ticket_domains[ud->id][SSO_VALID_TICKET_DOMAIN]);
23513
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
448
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
449 enckey = xmlnode_get_child(resp->xml, "Header/Security/DerivedKeyToken");
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
450 while (enckey) {
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
451 if (g_str_equal(xmlnode_get_attrib(enckey, "Id"), "EncKey"))
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
452 break;
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
453 enckey = xmlnode_get_next_twin(enckey);
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
454 }
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
455 if (!enckey) {
23564
7bceac816e19 The great MSN debug message cleanup! Threw in a few whitespace fixes,
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23552
diff changeset
456 purple_debug_error("msn", "Invalid response in token update.\n");
23513
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
457 return;
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
458 }
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
459
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
460 tmp = xmlnode_get_data(xmlnode_get_child(enckey, "Nonce"));
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
461 nonce = (char *)purple_base64_decode(tmp, &len);
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
462 key = rps_create_key(nexus->secret, 24, nonce, len);
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
463 g_free(tmp);
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
464 g_free(nonce);
23489
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
465
23521
9fdf0accd4aa Finally got MSN token updating working (I think).
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23513
diff changeset
466 #if 0
9fdf0accd4aa Finally got MSN token updating working (I think).
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23513
diff changeset
467 /* Don't know what this is for yet */
23513
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
468 tmp = xmlnode_get_data(xmlnode_get_child(resp->xml,
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
469 "Header/EncryptedPP/EncryptedData/CipherData/CipherValue"));
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
470 if (tmp) {
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
471 decrypted_pp = des3_cbc(key, iv, tmp, len, TRUE);
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
472 g_free(tmp);
23564
7bceac816e19 The great MSN debug message cleanup! Threw in a few whitespace fixes,
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23552
diff changeset
473 purple_debug_info("msn", "Got Response Header EncryptedPP: %s\n", decrypted_pp);
23513
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
474 g_free(decrypted_pp);
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
475 }
23521
9fdf0accd4aa Finally got MSN token updating working (I think).
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23513
diff changeset
476 #endif
23513
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
477
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
478 tmp = xmlnode_get_data(xmlnode_get_child(resp->xml,
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
479 "Body/EncryptedData/CipherData/CipherValue"));
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
480 if (tmp) {
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
481 char *unescaped;
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
482 xmlnode *rstresponse;
23521
9fdf0accd4aa Finally got MSN token updating working (I think).
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23513
diff changeset
483
23513
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
484 unescaped = (char *)purple_base64_decode(tmp, &len);
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
485 g_free(tmp);
23521
9fdf0accd4aa Finally got MSN token updating working (I think).
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23513
diff changeset
486
23513
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
487 decrypted_data = des3_cbc(key, iv, unescaped, len, TRUE);
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
488 g_free(unescaped);
23564
7bceac816e19 The great MSN debug message cleanup! Threw in a few whitespace fixes,
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23552
diff changeset
489 purple_debug_info("msn", "Got Response Body EncryptedData: %s\n", decrypted_data);
23521
9fdf0accd4aa Finally got MSN token updating working (I think).
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23513
diff changeset
490
23513
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
491 rstresponse = xmlnode_from_str(decrypted_data, -1);
23538
c5891c8d0c28 Sometimes (after 24h+) when you request a MSN token update, you get a
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23521
diff changeset
492 if (g_str_equal(rstresponse->name, "RequestSecurityTokenResponse"))
c5891c8d0c28 Sometimes (after 24h+) when you request a MSN token update, you get a
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23521
diff changeset
493 nexus_parse_token(nexus, ud->id, rstresponse);
c5891c8d0c28 Sometimes (after 24h+) when you request a MSN token update, you get a
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23521
diff changeset
494 else
c5891c8d0c28 Sometimes (after 24h+) when you request a MSN token update, you get a
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23521
diff changeset
495 nexus_parse_collection(nexus, ud->id, rstresponse);
23513
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
496 g_free(decrypted_data);
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
497 }
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
498
25086
6a0304f317cf I was hoping this wouldn't be necessary, but it seems that the possibility
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24729
diff changeset
499 updates = nexus->tokens[ud->id].updates;
6a0304f317cf I was hoping this wouldn't be necessary, but it seems that the possibility
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24729
diff changeset
500 nexus->tokens[ud->id].updates = NULL;
6a0304f317cf I was hoping this wouldn't be necessary, but it seems that the possibility
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24729
diff changeset
501 while (updates != NULL) {
6a0304f317cf I was hoping this wouldn't be necessary, but it seems that the possibility
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24729
diff changeset
502 MsnNexusUpdateCallback *update = updates->data;
6a0304f317cf I was hoping this wouldn't be necessary, but it seems that the possibility
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24729
diff changeset
503 if (update->cb)
6a0304f317cf I was hoping this wouldn't be necessary, but it seems that the possibility
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24729
diff changeset
504 purple_timeout_add(0, update->cb, update->data);
6a0304f317cf I was hoping this wouldn't be necessary, but it seems that the possibility
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24729
diff changeset
505 g_free(update);
6a0304f317cf I was hoping this wouldn't be necessary, but it seems that the possibility
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24729
diff changeset
506 updates = g_slist_delete_link(updates, updates);
6a0304f317cf I was hoping this wouldn't be necessary, but it seems that the possibility
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24729
diff changeset
507 }
23513
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
508
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
509 g_free(ud);
28730
428d85859b4e Fix a small leak.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 28708
diff changeset
510 g_free(key);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
511 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
512
23513
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
513 void
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
514 msn_nexus_update_token(MsnNexus *nexus, int id, GSourceFunc cb, gpointer data)
23489
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
515 {
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
516 MsnSession *session = nexus->session;
23513
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
517 MsnNexusUpdateData *ud;
25086
6a0304f317cf I was hoping this wouldn't be necessary, but it seems that the possibility
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24729
diff changeset
518 MsnNexusUpdateCallback *update;
23513
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
519 PurpleCipherContext *sha1;
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
520 PurpleCipherContext *hmac;
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
521
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
522 char *key;
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
523
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
524 guchar digest[20];
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
525
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
526 struct tm *tm;
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
527 time_t now;
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
528 char *now_str;
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
529 char *timestamp;
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
530 char *timestamp_b64;
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
531
23489
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
532 char *domain;
23513
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
533 char *domain_b64;
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
534
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
535 char *signedinfo;
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
536 gint32 nonce[6];
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
537 int i;
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
538 char *nonce_b64;
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
539 char *signature_b64;
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
540 guchar signature[20];
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
541
23489
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
542 char *request;
20530
719ce4acfcb9 the new soap code finally doesn't crash on startup, still can't
Ka-Hing Cheung <khc@hxbc.us>
parents: 20514
diff changeset
543 MsnSoapMessage *soap;
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
544
25086
6a0304f317cf I was hoping this wouldn't be necessary, but it seems that the possibility
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24729
diff changeset
545 update = g_new0(MsnNexusUpdateCallback, 1);
6a0304f317cf I was hoping this wouldn't be necessary, but it seems that the possibility
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24729
diff changeset
546 update->cb = cb;
6a0304f317cf I was hoping this wouldn't be necessary, but it seems that the possibility
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24729
diff changeset
547 update->data = data;
6a0304f317cf I was hoping this wouldn't be necessary, but it seems that the possibility
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24729
diff changeset
548
6a0304f317cf I was hoping this wouldn't be necessary, but it seems that the possibility
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24729
diff changeset
549 if (nexus->tokens[id].updates != NULL) {
6a0304f317cf I was hoping this wouldn't be necessary, but it seems that the possibility
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24729
diff changeset
550 /* Update already in progress. Just add to list and return. */
6a0304f317cf I was hoping this wouldn't be necessary, but it seems that the possibility
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24729
diff changeset
551 purple_debug_info("msn",
6a0304f317cf I was hoping this wouldn't be necessary, but it seems that the possibility
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24729
diff changeset
552 "Ticket update for user '%s' on domain '%s' in progress. Adding request to queue.\n",
6a0304f317cf I was hoping this wouldn't be necessary, but it seems that the possibility
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24729
diff changeset
553 purple_account_get_username(session->account),
6a0304f317cf I was hoping this wouldn't be necessary, but it seems that the possibility
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24729
diff changeset
554 ticket_domains[id][SSO_VALID_TICKET_DOMAIN]);
6a0304f317cf I was hoping this wouldn't be necessary, but it seems that the possibility
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24729
diff changeset
555 nexus->tokens[id].updates = g_slist_prepend(nexus->tokens[id].updates,
6a0304f317cf I was hoping this wouldn't be necessary, but it seems that the possibility
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24729
diff changeset
556 update);
6a0304f317cf I was hoping this wouldn't be necessary, but it seems that the possibility
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24729
diff changeset
557 return;
6a0304f317cf I was hoping this wouldn't be necessary, but it seems that the possibility
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24729
diff changeset
558 } else {
6a0304f317cf I was hoping this wouldn't be necessary, but it seems that the possibility
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24729
diff changeset
559 purple_debug_info("msn",
6a0304f317cf I was hoping this wouldn't be necessary, but it seems that the possibility
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24729
diff changeset
560 "Updating ticket for user '%s' on domain '%s'\n",
6a0304f317cf I was hoping this wouldn't be necessary, but it seems that the possibility
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24729
diff changeset
561 purple_account_get_username(session->account),
6a0304f317cf I was hoping this wouldn't be necessary, but it seems that the possibility
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24729
diff changeset
562 ticket_domains[id][SSO_VALID_TICKET_DOMAIN]);
6a0304f317cf I was hoping this wouldn't be necessary, but it seems that the possibility
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24729
diff changeset
563 nexus->tokens[id].updates = g_slist_prepend(nexus->tokens[id].updates,
6a0304f317cf I was hoping this wouldn't be necessary, but it seems that the possibility
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24729
diff changeset
564 update);
6a0304f317cf I was hoping this wouldn't be necessary, but it seems that the possibility
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24729
diff changeset
565 }
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
566
23513
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
567 ud = g_new0(MsnNexusUpdateData, 1);
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
568 ud->nexus = nexus;
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
569 ud->id = id;
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
570
23513
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
571 sha1 = purple_cipher_context_new_by_name("sha1", NULL);
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
572
23489
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
573 domain = g_strdup_printf(MSN_SSO_RST_TEMPLATE,
23521
9fdf0accd4aa Finally got MSN token updating working (I think).
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23513
diff changeset
574 id,
23513
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
575 ticket_domains[id][SSO_VALID_TICKET_DOMAIN],
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
576 ticket_domains[id][SSO_VALID_TICKET_POLICY] != NULL ?
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
577 ticket_domains[id][SSO_VALID_TICKET_POLICY] :
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
578 nexus->policy);
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
579 purple_cipher_context_append(sha1, (guchar *)domain, strlen(domain));
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
580 purple_cipher_context_digest(sha1, 20, digest, NULL);
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
581 domain_b64 = purple_base64_encode(digest, 20);
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
582
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
583 now = time(NULL);
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
584 tm = gmtime(&now);
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
585 now_str = g_strdup(purple_utf8_strftime("%Y-%m-%dT%H:%M:%SZ", tm));
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
586 now += 5*60;
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
587 tm = gmtime(&now);
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
588 timestamp = g_strdup_printf(MSN_SSO_TIMESTAMP_TEMPLATE,
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
589 now_str,
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
590 purple_utf8_strftime("%Y-%m-%dT%H:%M:%SZ", tm));
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
591 purple_cipher_context_reset(sha1, NULL);
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
592 purple_cipher_context_append(sha1, (guchar *)timestamp, strlen(timestamp));
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
593 purple_cipher_context_digest(sha1, 20, digest, NULL);
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
594 timestamp_b64 = purple_base64_encode(digest, 20);
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
595 g_free(now_str);
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
596
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
597 purple_cipher_context_destroy(sha1);
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
598
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
599 signedinfo = g_strdup_printf(MSN_SSO_SIGNEDINFO_TEMPLATE,
23521
9fdf0accd4aa Finally got MSN token updating working (I think).
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23513
diff changeset
600 id,
23513
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
601 domain_b64,
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
602 timestamp_b64);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
603
23513
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
604 for (i = 0; i < 6; i++)
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
605 nonce[i] = rand();
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
606 nonce_b64 = purple_base64_encode((guchar *)&nonce, sizeof(nonce));
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
607
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
608 key = rps_create_key(nexus->secret, 24, (char *)nonce, sizeof(nonce));
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
609 hmac = purple_cipher_context_new_by_name("hmac", NULL);
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
610 purple_cipher_context_set_option(hmac, "hash", "sha1");
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
611 purple_cipher_context_set_key_with_len(hmac, (guchar *)key, 24);
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
612 purple_cipher_context_append(hmac, (guchar *)signedinfo, strlen(signedinfo));
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
613 purple_cipher_context_digest(hmac, 20, signature, NULL);
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
614 purple_cipher_context_destroy(hmac);
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
615 signature_b64 = purple_base64_encode(signature, 20);
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
616
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
617 request = g_strdup_printf(MSN_SSO_TOKEN_UPDATE_TEMPLATE,
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
618 nexus->cipher,
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
619 nonce_b64,
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
620 timestamp,
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
621 signedinfo,
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
622 signature_b64,
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
623 domain);
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
624
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
625 g_free(nonce_b64);
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
626 g_free(domain_b64);
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
627 g_free(timestamp_b64);
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
628 g_free(timestamp);
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
629 g_free(key);
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
630 g_free(signature_b64);
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
631 g_free(signedinfo);
23489
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
632 g_free(domain);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
633
23489
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
634 soap = msn_soap_message_new(NULL, xmlnode_from_str(request, -1));
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
635 g_free(request);
23658
860e5e210fc9 Don't print SOAP messages to debug log for "secure" requests. This is
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23586
diff changeset
636 msn_soap_message_send(session, soap, MSN_SSO_SERVER, SSO_POST_URL, TRUE,
23513
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
637 nexus_got_update_cb, ud);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
638 }
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
639
23489
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
640 GHashTable *
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
641 msn_nexus_get_token(MsnNexus *nexus, MsnAuthDomains id)
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
642 {
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
643 g_return_val_if_fail(nexus != NULL, NULL);
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
644 g_return_val_if_fail(id < nexus->token_len, NULL);
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
645
23492
72aa2ccad28d fix sending offline message in p15 by sending the correct token. In msnp14,
Ka-Hing Cheung <khc@hxbc.us>
parents: 23489
diff changeset
646 return nexus->tokens[id].token;
23489
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
647 }
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
648
23492
72aa2ccad28d fix sending offline message in p15 by sending the correct token. In msnp14,
Ka-Hing Cheung <khc@hxbc.us>
parents: 23489
diff changeset
649 const char *
72aa2ccad28d fix sending offline message in p15 by sending the correct token. In msnp14,
Ka-Hing Cheung <khc@hxbc.us>
parents: 23489
diff changeset
650 msn_nexus_get_token_str(MsnNexus *nexus, MsnAuthDomains id)
23489
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
651 {
23492
72aa2ccad28d fix sending offline message in p15 by sending the correct token. In msnp14,
Ka-Hing Cheung <khc@hxbc.us>
parents: 23489
diff changeset
652 static char buf[1024];
23489
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
653 GHashTable *token = msn_nexus_get_token(nexus, id);
23492
72aa2ccad28d fix sending offline message in p15 by sending the correct token. In msnp14,
Ka-Hing Cheung <khc@hxbc.us>
parents: 23489
diff changeset
654 const char *msn_t;
72aa2ccad28d fix sending offline message in p15 by sending the correct token. In msnp14,
Ka-Hing Cheung <khc@hxbc.us>
parents: 23489
diff changeset
655 const char *msn_p;
72aa2ccad28d fix sending offline message in p15 by sending the correct token. In msnp14,
Ka-Hing Cheung <khc@hxbc.us>
parents: 23489
diff changeset
656 gint ret;
23489
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
657
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
658 g_return_val_if_fail(token != NULL, NULL);
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
659
23492
72aa2ccad28d fix sending offline message in p15 by sending the correct token. In msnp14,
Ka-Hing Cheung <khc@hxbc.us>
parents: 23489
diff changeset
660 msn_t = g_hash_table_lookup(token, "t");
72aa2ccad28d fix sending offline message in p15 by sending the correct token. In msnp14,
Ka-Hing Cheung <khc@hxbc.us>
parents: 23489
diff changeset
661 msn_p = g_hash_table_lookup(token, "p");
72aa2ccad28d fix sending offline message in p15 by sending the correct token. In msnp14,
Ka-Hing Cheung <khc@hxbc.us>
parents: 23489
diff changeset
662
72aa2ccad28d fix sending offline message in p15 by sending the correct token. In msnp14,
Ka-Hing Cheung <khc@hxbc.us>
parents: 23489
diff changeset
663 g_return_val_if_fail(msn_t != NULL, NULL);
72aa2ccad28d fix sending offline message in p15 by sending the correct token. In msnp14,
Ka-Hing Cheung <khc@hxbc.us>
parents: 23489
diff changeset
664 g_return_val_if_fail(msn_p != NULL, NULL);
23489
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
665
23513
1b98e2090a71 Update MSN nexus functions so that tokens are properly updateable. It
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23506
diff changeset
666 ret = g_snprintf(buf, sizeof(buf) - 1, "t=%s&p=%s", msn_t, msn_p);
23492
72aa2ccad28d fix sending offline message in p15 by sending the correct token. In msnp14,
Ka-Hing Cheung <khc@hxbc.us>
parents: 23489
diff changeset
667 g_return_val_if_fail(ret != -1, NULL);
72aa2ccad28d fix sending offline message in p15 by sending the correct token. In msnp14,
Ka-Hing Cheung <khc@hxbc.us>
parents: 23489
diff changeset
668
72aa2ccad28d fix sending offline message in p15 by sending the correct token. In msnp14,
Ka-Hing Cheung <khc@hxbc.us>
parents: 23489
diff changeset
669 return buf;
23489
25899ec348a4 Patch 2 from Qulogic, this one adds SSO authentication
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 21594
diff changeset
670 }
23498
bca58b00afab References #4382, replaces usage of msn_soap_xml_get with xmlnode_get_child
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 23497
diff changeset
671