Tue, 14 Jun 2016 18:08:10 -0400
oscar: Set password_xored as gchar to remove a warning
g_string_append_len expects a gchar, not a guint8
|
37697
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
1 | /* |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
2 | * Purple's oscar protocol plugin |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
3 | * This file is the legal property of its developers. |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
4 | * Please see the AUTHORS file distributed alongside this file. |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
5 | * |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
6 | * This library is free software; you can redistribute it and/or |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
7 | * modify it under the terms of the GNU Lesser General Public |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
8 | * License as published by the Free Software Foundation; either |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
9 | * version 2 of the License, or (at your option) any later version. |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
10 | * |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
11 | * This library is distributed in the hope that it will be useful, |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
14 | * Lesser General Public License for more details. |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
15 | * |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
16 | * You should have received a copy of the GNU Lesser General Public |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
17 | * License along with this library; if not, write to the Free Software |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
18 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
19 | */ |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
20 | |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
21 | /** |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
22 | * This file implements AIM's kerberos procedure for authenticating |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
23 | * users. This replaces the older MD5-based and XOR-based |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
24 | * authentication methods that use SNAC family 0x0017. |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
25 | * |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
26 | * This doesn't use SNACs or FLAPs at all. It makes http and https |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
27 | * POSTs to AOL to validate the user based on the password they |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
28 | * provided to us. Upon successful authentication we request a |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
29 | * connection to the BOS server by calling startOSCARsession. The |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
30 | * AOL server gives us the hostname and port number to use, as well |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
31 | * as the cookie to use to authenticate to the BOS server. And then |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
32 | * everything else is the same as with BUCP. |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
33 | * |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
34 | * For details, see: |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
35 | * http://dev.aol.com/aim/oscar/#AUTH |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
36 | * http://dev.aol.com/authentication_for_clients |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
37 | */ |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
38 | |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
39 | #include "oscar.h" |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
40 | #include "oscarcommon.h" |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
41 | #include "core.h" |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
42 | |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
43 | #define MAXAIMPASSLEN 16 |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
44 | |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
45 | /* |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
46 | * Incomplete X-SNAC format taken from reverse engineering doen by digsby: |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
47 | * https://github.com/ifwe/digsby/blob/master/digsby/src/oscar/login2.py |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
48 | */ |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
49 | typedef struct { |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
50 | aim_tlv_t *main_tlv; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
51 | gchar *principal1; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
52 | gchar *service; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
53 | gchar *principal1_again; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
54 | gchar *principal2; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
55 | gchar unknown; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
56 | guint8 *footer; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
57 | struct { |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
58 | guint32 unknown1; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
59 | guint32 unknown2; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
60 | guint32 epoch_now; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
61 | guint32 epoch_valid; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
62 | guint32 epoch_renew; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
63 | guint32 epoch_expire; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
64 | guint32 unknown3; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
65 | guint32 unknown4; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
66 | guint32 unknown5; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
67 | } dates; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
68 | GSList *tlvlist; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
69 | } aim_xsnac_token_t; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
70 | |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
71 | typedef struct { |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
72 | guint16 family; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
73 | guint16 subtype; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
74 | guint8 flags[8]; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
75 | guint16 request_id; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
76 | guint32 epoch; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
77 | guint32 unknown; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
78 | gchar *principal1; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
79 | gchar *principal2; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
80 | guint16 num_tokens; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
81 | aim_xsnac_token_t *tokens; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
82 | GSList *tlvlist; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
83 | } aim_xsnac_t; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
84 | |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
85 | static gchar *get_kdc_url(OscarData *od) |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
86 | { |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
87 | PurpleAccount *account = purple_connection_get_account(od->gc); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
88 | const gchar *server; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
89 | gchar *url; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
90 | gchar *port_str = NULL; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
91 | gint port; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
92 | |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
93 | server = purple_account_get_string(account, "server", AIM_DEFAULT_KDC_SERVER); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
94 | port = purple_account_get_int(account, "port", AIM_DEFAULT_KDC_PORT); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
95 | if (port != 443) |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
96 | port_str = g_strdup_printf (":%d", port); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
97 | url = g_strdup_printf ("https://%s%s/", server, port_str ? port_str : ""); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
98 | if (port_str) |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
99 | g_free (port_str); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
100 | |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
101 | return url; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
102 | } |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
103 | |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
104 | /* |
|
37698
76757030e995
oscar: Remove forgotten/unused variable
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
37697
diff
changeset
|
105 | * Using kerberos auth requires a developer ID. This key is for libpurple. |
|
37697
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
106 | * It is the default key for all libpurple-based clients. AOL encourages |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
107 | * UIs (especially ones with lots of users) to override this with their |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
108 | * own key. This key is owned by the AIM account "markdoliner" |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
109 | * |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
110 | * Keys can be managed at http://developer.aim.com/manageKeys.jsp |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
111 | */ |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
112 | #define DEFAULT_CLIENT_KEY "ma15d7JTxbmVG-RP" |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
113 | |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
114 | static const char *get_client_key(OscarData *od) |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
115 | { |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
116 | return oscar_get_ui_info_string( |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
117 | od->icq ? "prpl-icq-clientkey" : "prpl-aim-clientkey", |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
118 | DEFAULT_CLIENT_KEY); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
119 | } |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
120 | |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
121 | static void |
|
37699
fcafc93ddd4d
oscar: Set password_xored as gchar to remove a warning
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
37698
diff
changeset
|
122 | aim_encode_password(const char *password, gchar *encoded) |
|
37697
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
123 | { |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
124 | guint8 encoding_table[] = { |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
125 | 0x76, 0x91, 0xc5, 0xe7, |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
126 | 0xd0, 0xd9, 0x95, 0xdd, |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
127 | 0x9e, 0x2F, 0xea, 0xd8, |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
128 | 0x6B, 0x21, 0xc2, 0xbc, |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
129 | |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
130 | }; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
131 | guint i; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
132 | |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
133 | /* |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
134 | * We truncate AIM passwords to 16 characters since that's what |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
135 | * the official client does as well. |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
136 | */ |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
137 | for (i = 0; i < strlen(password) && i < MAXAIMPASSLEN; i++) |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
138 | encoded[i] = (password[i] ^ encoding_table[i]); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
139 | } |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
140 | |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
141 | static void |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
142 | aim_xsnac_free(aim_xsnac_t *xsnac) |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
143 | { |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
144 | gint i; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
145 | |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
146 | if (xsnac->principal1) |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
147 | g_free (xsnac->principal1); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
148 | if (xsnac->principal2) |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
149 | g_free (xsnac->principal2); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
150 | aim_tlvlist_free (xsnac->tlvlist); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
151 | |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
152 | for (i = 0; i < xsnac->num_tokens; i++) { |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
153 | g_free(xsnac->tokens[i].main_tlv->value); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
154 | g_free(xsnac->tokens[i].main_tlv); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
155 | if (xsnac->tokens[i].principal1) |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
156 | g_free (xsnac->tokens[i].principal1); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
157 | if (xsnac->tokens[i].principal1_again) |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
158 | if (xsnac->tokens[i].service) |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
159 | g_free (xsnac->tokens[i].service); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
160 | g_free (xsnac->tokens[i].principal1_again); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
161 | if (xsnac->tokens[i].principal2) |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
162 | g_free (xsnac->tokens[i].principal2); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
163 | if (xsnac->tokens[i].footer) |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
164 | g_free (xsnac->tokens[i].footer); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
165 | aim_tlvlist_free (xsnac->tokens[i].tlvlist); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
166 | } |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
167 | g_free (xsnac->tokens); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
168 | } |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
169 | |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
170 | static void |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
171 | kerberos_login_cb(PurpleUtilFetchUrlData *url_data, gpointer user_data, |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
172 | const gchar *got_data, gsize got_len, const gchar *error_message) |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
173 | { |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
174 | OscarData *od = user_data; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
175 | PurpleConnection *gc; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
176 | ByteStream bs; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
177 | aim_xsnac_t xsnac = {0}; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
178 | guint16 len; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
179 | gchar *bosip = NULL; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
180 | gchar *tlsCertName = NULL; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
181 | guint8 *cookie = NULL; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
182 | guint32 cookie_len = 0; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
183 | char *host; int port; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
184 | gsize i; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
185 | |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
186 | gc = od->gc; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
187 | |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
188 | od->url_data = NULL; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
189 | |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
190 | if (error_message != NULL || got_len == 0) { |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
191 | gchar *tmp; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
192 | gchar *url; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
193 | |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
194 | url = get_kdc_url(od); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
195 | tmp = g_strdup_printf(_("Error requesting %s: %s"), |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
196 | url, error_message ? |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
197 | error_message : _("The server returned an empty response")); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
198 | purple_connection_error_reason(gc, |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
199 | PURPLE_CONNECTION_ERROR_NETWORK_ERROR, tmp); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
200 | g_free(tmp); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
201 | g_free(url); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
202 | return; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
203 | } |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
204 | |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
205 | purple_debug_info("oscar", "Received kerberos login HTTP response %lu : ", got_len); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
206 | |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
207 | byte_stream_init (&bs, (guint8 *)got_data, got_len); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
208 | |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
209 | xsnac.family = byte_stream_get16 (&bs); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
210 | xsnac.subtype = byte_stream_get16(&bs); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
211 | byte_stream_getrawbuf(&bs, (guint8 *) xsnac.flags, 8); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
212 | |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
213 | if (xsnac.family == 0x50C && xsnac.subtype == 0x0005) { |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
214 | purple_connection_error_reason(gc, |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
215 | PURPLE_CONNECTION_ERROR_AUTHENTICATION_FAILED, |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
216 | _("Incorrect password")); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
217 | return; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
218 | } |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
219 | if (xsnac.family != 0x50C || xsnac.subtype != 0x0003) { |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
220 | purple_connection_error_reason(gc, |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
221 | PURPLE_CONNECTION_ERROR_NETWORK_ERROR, |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
222 | _("Error parsing response from authentication server")); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
223 | return; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
224 | } |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
225 | xsnac.request_id = byte_stream_get16(&bs); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
226 | xsnac.epoch = byte_stream_get32(&bs); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
227 | xsnac.unknown = byte_stream_get32(&bs); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
228 | len = byte_stream_get16(&bs); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
229 | xsnac.principal1 = byte_stream_getstr(&bs, len); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
230 | len = byte_stream_get16(&bs); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
231 | xsnac.principal2 = byte_stream_getstr(&bs, len); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
232 | xsnac.num_tokens = byte_stream_get16(&bs); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
233 | |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
234 | purple_debug_info("oscar", "KDC: %d tokens between '%s' and '%s'\n", |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
235 | xsnac.num_tokens, xsnac.principal1, xsnac.principal2); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
236 | xsnac.tokens = g_new0 (aim_xsnac_token_t, xsnac.num_tokens); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
237 | for (i = 0; i < xsnac.num_tokens; i++) { |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
238 | GSList *tlv; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
239 | |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
240 | tlv = aim_tlvlist_readnum(&bs, 1); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
241 | if (tlv) |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
242 | xsnac.tokens[i].main_tlv = tlv->data; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
243 | g_slist_free (tlv); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
244 | |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
245 | len = byte_stream_get16(&bs); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
246 | xsnac.tokens[i].principal1 = byte_stream_getstr(&bs, len); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
247 | len = byte_stream_get16(&bs); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
248 | xsnac.tokens[i].service = byte_stream_getstr(&bs, len); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
249 | len = byte_stream_get16(&bs); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
250 | xsnac.tokens[i].principal1_again = byte_stream_getstr(&bs, len); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
251 | len = byte_stream_get16(&bs); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
252 | xsnac.tokens[i].principal2 = byte_stream_getstr(&bs, len); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
253 | xsnac.tokens[i].unknown = byte_stream_get8(&bs); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
254 | len = byte_stream_get16(&bs); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
255 | xsnac.tokens[i].footer = byte_stream_getraw(&bs, len); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
256 | |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
257 | xsnac.tokens[i].dates.unknown1 = byte_stream_get32(&bs); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
258 | xsnac.tokens[i].dates.unknown2 = byte_stream_get32(&bs); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
259 | xsnac.tokens[i].dates.epoch_now = byte_stream_get32(&bs); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
260 | xsnac.tokens[i].dates.epoch_valid = byte_stream_get32(&bs); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
261 | xsnac.tokens[i].dates.epoch_renew = byte_stream_get32(&bs); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
262 | xsnac.tokens[i].dates.epoch_expire = byte_stream_get32(&bs); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
263 | xsnac.tokens[i].dates.unknown3 = byte_stream_get32(&bs); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
264 | xsnac.tokens[i].dates.unknown4 = byte_stream_get32(&bs); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
265 | xsnac.tokens[i].dates.unknown5 = byte_stream_get32(&bs); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
266 | |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
267 | len = byte_stream_get16(&bs); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
268 | xsnac.tokens[i].tlvlist = aim_tlvlist_readnum(&bs, len); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
269 | |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
270 | purple_debug_info("oscar", "Token %lu has %d TLVs for service '%s'\n", |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
271 | i, len, xsnac.tokens[i].service); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
272 | } |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
273 | len = byte_stream_get16(&bs); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
274 | xsnac.tlvlist = aim_tlvlist_readnum(&bs, len); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
275 | |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
276 | for (i = 0; i < xsnac.num_tokens; i++) { |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
277 | if (strcmp (xsnac.tokens[i].service, "im/boss") == 0) { |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
278 | aim_tlv_t *tlv; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
279 | GSList *tlvlist; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
280 | ByteStream tbs; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
281 | |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
282 | tlv = aim_tlv_gettlv(xsnac.tokens[i].tlvlist, 0x0003, 1); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
283 | if (tlv != NULL) { |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
284 | byte_stream_init(&tbs, tlv->value, tlv->length); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
285 | byte_stream_get32(&tbs); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
286 | tlvlist = aim_tlvlist_read (&tbs); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
287 | if (aim_tlv_gettlv (tlvlist, 0x0005, 1)) |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
288 | bosip = aim_tlv_getstr (tlvlist, 0x0005, 1); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
289 | if (aim_tlv_gettlv (tlvlist, 0x0005, 1)) |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
290 | tlsCertName = aim_tlv_getstr (tlvlist, 0x008D, 1); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
291 | tlv = aim_tlv_gettlv(tlvlist, 0x0006, 1); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
292 | if (tlv) { |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
293 | cookie_len = tlv->length; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
294 | cookie = tlv->value; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
295 | } |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
296 | } |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
297 | break; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
298 | } |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
299 | } |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
300 | if (bosip && cookie) { |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
301 | port = AIM_DEFAULT_KDC_PORT; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
302 | for (i = 0; i < strlen(bosip); i++) { |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
303 | if (bosip[i] == ':') { |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
304 | port = atoi(&(bosip[i+1])); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
305 | break; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
306 | } |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
307 | } |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
308 | host = g_strndup(bosip, i); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
309 | oscar_connect_to_bos(gc, od, host, port, cookie, cookie_len, tlsCertName); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
310 | g_free (host); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
311 | } else { |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
312 | purple_connection_error_reason(gc, |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
313 | PURPLE_CONNECTION_ERROR_NETWORK_ERROR, |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
314 | _("Unknown error during authentication")); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
315 | } |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
316 | aim_xsnac_free (&xsnac); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
317 | if (tlsCertName) |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
318 | g_free (tlsCertName); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
319 | if (bosip) |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
320 | g_free (bosip); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
321 | } |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
322 | |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
323 | /** |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
324 | * This function sends a binary blob request to the Kerberos KDC server |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
325 | * https://kdc.uas.aol.com with the user's username and password and |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
326 | * receives the IM cookie, which is used to request a connection to the |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
327 | * BOSS server. |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
328 | * The binary data below is what AIM 8.0.8.1 sends in order to authenticate |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
329 | * to the KDC server. It is an 'X-SNAC' packet, which is relatively similar |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
330 | * to SNAC packets but somehow different. |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
331 | * The header starts with the 0x50C family follow by 0x0002 subtype, then |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
332 | * some fixed length data and TLVs. The string "COOL" appears in there for |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
333 | * some reason followed by the 'US' and 'en' strings. |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
334 | * Then the 'imApp key=<client key>' comes after that, and then the username |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
335 | * and the string "im/boss" which seems to represent the service we are |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
336 | * requesting the authentication for. Changing that will lead to a |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
337 | * 'unknown service' error. The client key is then added again (without the |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
338 | * 'imApp key' string prepended to it) then a XOR-ed version of the password. |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
339 | * The meaning of the header/footer/in-between bytes is not known but never |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
340 | * seems to change so there is no need to reverse engineer their meaning at |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
341 | * this point. |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
342 | */ |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
343 | void send_kerberos_login(OscarData *od, const char *username) |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
344 | { |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
345 | PurpleConnection *gc; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
346 | GString *request; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
347 | gchar *url; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
348 | const gchar *password; |
|
37699
fcafc93ddd4d
oscar: Set password_xored as gchar to remove a warning
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
37698
diff
changeset
|
349 | gchar password_xored[MAXAIMPASSLEN]; |
|
37697
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
350 | const gchar *client_key; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
351 | gchar *imapp_key; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
352 | GString *body; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
353 | guint16 len_be; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
354 | guint16 reqid; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
355 | const gchar header[] = { |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
356 | 0x05, 0x0C, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
357 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
358 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
359 | 0x00, 0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0x05, |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
360 | 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x05, |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
361 | 0x00, 0x02, 0x00, 0x04, 0x00, 0x00, 0x18, 0x99, |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
362 | 0x00, 0x05, 0x00, 0x04, 0x43, 0x4F, 0x4F, 0x4C, |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
363 | 0x00, 0x0A, 0x00, 0x02, 0x00, 0x01, 0x00, 0x0B, |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
364 | 0x00, 0x04, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
365 | 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
366 | 0x55, 0x53, 0x00, 0x02, 0x65, 0x6E, 0x00, 0x04, |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
367 | 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0D, |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
368 | 0x00, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
369 | 0x00, 0x05}; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
370 | const gchar pre_username[] = { |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
371 | 0x00, 0x07, 0x00, 0x04, 0x00, 0x00, 0x01, 0x8B, |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
372 | 0x01, 0x00, 0x00, 0x00, 0x00}; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
373 | const gchar post_username[] = { |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
374 | 0x00, 0x07, 0x69, 0x6D, 0x2F, 0x62, 0x6F, 0x73, |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
375 | 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
376 | 0x04, 0x00, 0x02}; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
377 | const gchar pre_password[] = { |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
378 | 0x40, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x01, |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
379 | 0x00, 0x00}; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
380 | const gchar post_password[] = {0x00, 0x00, 0x00, 0x1D}; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
381 | const gchar footer[] = { |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
382 | 0x00, 0x21, 0x00, 0x32, 0x00, 0x01, 0x10, 0x03, |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
383 | 0x00, 0x2C, 0x00, 0x07, 0x00, 0x14, 0x00, 0x04, |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
384 | 0x00, 0x00, 0x01, 0x8B, 0x00, 0x16, 0x00, 0x02, |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
385 | 0x00, 0x26, 0x00, 0x17, 0x00, 0x02, 0x00, 0x07, |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
386 | 0x00, 0x18, 0x00, 0x02, 0x00, 0x00, 0x00, 0x19, |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
387 | 0x00, 0x02, 0x00, 0x0D, 0x00, 0x1A, 0x00, 0x02, |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
388 | 0x00, 0x04, 0x00, 0xAB, 0x00, 0x00, 0x00, 0x28, |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
389 | 0x00, 0x00}; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
390 | |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
391 | gc = od->gc; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
392 | |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
393 | password = purple_connection_get_password(gc); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
394 | aim_encode_password (password, password_xored); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
395 | |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
396 | client_key = get_client_key(od); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
397 | imapp_key = g_strdup_printf ("imApp key=%s", client_key); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
398 | |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
399 | /* Construct the body of the HTTP POST request */ |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
400 | body = g_string_new(NULL); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
401 | g_string_append_len (body, header, sizeof(header)); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
402 | reqid = (guint16) g_random_int(); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
403 | g_string_overwrite_len (body, 0xC, (void *)&reqid, sizeof(guint16)); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
404 | |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
405 | len_be = GUINT16_TO_BE (strlen (imapp_key)); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
406 | g_string_append_len (body, (void *)&len_be, sizeof(guint16)); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
407 | g_string_append (body, imapp_key); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
408 | |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
409 | len_be = GUINT16_TO_BE (strlen (username)); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
410 | g_string_append_len (body, pre_username, sizeof(pre_username)); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
411 | g_string_append_len (body, (void *)&len_be, sizeof(guint16)); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
412 | g_string_append (body, username); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
413 | g_string_append_len (body, post_username, sizeof(post_username)); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
414 | |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
415 | len_be = GUINT16_TO_BE (strlen (password) + 0x10); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
416 | g_string_append_len (body, (void *)&len_be, sizeof(guint16)); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
417 | g_string_append_len (body, pre_password, sizeof(pre_password)); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
418 | len_be = GUINT16_TO_BE (strlen (password) + 4); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
419 | g_string_append_len (body, (void *)&len_be, sizeof(guint16)); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
420 | len_be = GUINT16_TO_BE (strlen (password)); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
421 | g_string_append_len (body, (void *)&len_be, sizeof(guint16)); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
422 | g_string_append_len (body, password_xored, strlen (password)); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
423 | g_string_append_len (body, post_password, sizeof(post_password)); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
424 | |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
425 | len_be = GUINT16_TO_BE (strlen (client_key)); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
426 | g_string_append_len (body, (void *)&len_be, sizeof(guint16)); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
427 | g_string_append (body, client_key); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
428 | g_string_append_len (body, footer, sizeof(footer)); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
429 | |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
430 | g_free(imapp_key); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
431 | |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
432 | url = get_kdc_url(od); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
433 | |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
434 | /* Construct an HTTP POST request */ |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
435 | request = g_string_new("POST / HTTP/1.1\n" |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
436 | "Connection: close\n" |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
437 | "Accept: application/x-snac\n"); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
438 | |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
439 | /* Tack on the body */ |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
440 | g_string_append_printf(request, "Content-Type: application/x-snac\n"); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
441 | g_string_append_printf(request, "Content-Length: %" G_GSIZE_FORMAT "\n\n", body->len); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
442 | g_string_append_len(request, body->str, body->len); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
443 | |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
444 | /* Send the POST request */ |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
445 | od->url_data = purple_util_fetch_url_request_data_len_with_account( |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
446 | purple_connection_get_account(gc), url, |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
447 | TRUE, NULL, TRUE, request->str, request->len, FALSE, -1, |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
448 | kerberos_login_cb, od); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
449 | g_string_free(request, TRUE); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
450 | |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
451 | g_string_free (body, TRUE); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
452 | g_free (url); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
453 | } |