Fri, 10 Mar 2017 20:36:55 -0600
Merge 2.12.0 into default
|
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 | * |
|
37700
b3fc32a626df
oscar: Fix the file comment which still had references to the clientLogin auth
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
37699
diff
changeset
|
26 | * This doesn't use SNACs or FLAPs at all. It makes https |
|
b3fc32a626df
oscar: Fix the file comment which still had references to the clientLogin auth
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
37699
diff
changeset
|
27 | * POSTs to AOL KDC server to validate the user based on the password they |
|
b3fc32a626df
oscar: Fix the file comment which still had references to the clientLogin auth
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
37699
diff
changeset
|
28 | * provided to us. Upon successful authentication we receive two tokens |
|
b3fc32a626df
oscar: Fix the file comment which still had references to the clientLogin auth
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
37699
diff
changeset
|
29 | * in the response. One is assumed to be the kerberos ticket for authentication |
|
b3fc32a626df
oscar: Fix the file comment which still had references to the clientLogin auth
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
37699
diff
changeset
|
30 | * on the various AOL websites, while the other contains BOSS information, such |
|
b3fc32a626df
oscar: Fix the file comment which still had references to the clientLogin auth
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
37699
diff
changeset
|
31 | * as the hostname and port number to use, the TLS certificate name as well as |
|
b3fc32a626df
oscar: Fix the file comment which still had references to the clientLogin auth
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
37699
diff
changeset
|
32 | * the cookie to use to authenticate to the BOS server. |
|
b3fc32a626df
oscar: Fix the file comment which still had references to the clientLogin auth
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
37699
diff
changeset
|
33 | * And then everything else is the same as with BUCP. |
|
37697
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
34 | * |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
35 | */ |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
36 | |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
37 | #include "oscar.h" |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
38 | #include "oscarcommon.h" |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
39 | #include "core.h" |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
40 | |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
41 | #define MAXAIMPASSLEN 16 |
|
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 | /* |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
44 | * 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
|
45 | * 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
|
46 | */ |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
47 | typedef struct { |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
48 | aim_tlv_t *main_tlv; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
49 | gchar *principal1; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
50 | gchar *service; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
51 | gchar *principal1_again; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
52 | gchar *principal2; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
53 | gchar unknown; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
54 | guint8 *footer; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
55 | struct { |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
56 | guint32 unknown1; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
57 | guint32 unknown2; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
58 | guint32 epoch_now; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
59 | guint32 epoch_valid; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
60 | guint32 epoch_renew; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
61 | guint32 epoch_expire; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
62 | guint32 unknown3; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
63 | guint32 unknown4; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
64 | guint32 unknown5; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
65 | } dates; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
66 | GSList *tlvlist; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
67 | } aim_xsnac_token_t; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
68 | |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
69 | typedef struct { |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
70 | guint16 family; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
71 | guint16 subtype; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
72 | guint8 flags[8]; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
73 | guint16 request_id; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
74 | guint32 epoch; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
75 | guint32 unknown; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
76 | gchar *principal1; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
77 | gchar *principal2; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
78 | guint16 num_tokens; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
79 | aim_xsnac_token_t *tokens; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
80 | GSList *tlvlist; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
81 | } aim_xsnac_t; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
82 | |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
83 | static gchar *get_kdc_url(OscarData *od) |
|
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 | PurpleAccount *account = purple_connection_get_account(od->gc); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
86 | const gchar *server; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
87 | gchar *url; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
88 | gchar *port_str = NULL; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
89 | gint port; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
90 | |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
91 | 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
|
92 | 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
|
93 | if (port != 443) |
|
37703
82f57388d70c
oscar: Fix coding style, no whitespace before parenthesis of function calls
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
37702
diff
changeset
|
94 | port_str = g_strdup_printf(":%d", port); |
|
82f57388d70c
oscar: Fix coding style, no whitespace before parenthesis of function calls
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
37702
diff
changeset
|
95 | url = g_strdup_printf("https://%s%s/", server, port_str ? port_str : ""); |
|
82f57388d70c
oscar: Fix coding style, no whitespace before parenthesis of function calls
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
37702
diff
changeset
|
96 | g_free(port_str); |
|
37697
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
97 | |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
98 | return url; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
99 | } |
|
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 | static const char *get_client_key(OscarData *od) |
|
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 | return oscar_get_ui_info_string( |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
104 | od->icq ? "prpl-icq-clientkey" : "prpl-aim-clientkey", |
|
38208
31ecbdda7ff3
aim: Switch to new libpurple/finch distid/devids provided by AOL
dx <dx@dxzone.com.ar>
parents:
37703
diff
changeset
|
105 | od->icq ? ICQ_DEFAULT_CLIENT_KEY : AIM_DEFAULT_CLIENT_KEY); |
|
37697
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
106 | } |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
107 | |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
108 | static void |
|
37699
fcafc93ddd4d
oscar: Set password_xored as gchar to remove a warning
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
37698
diff
changeset
|
109 | aim_encode_password(const char *password, gchar *encoded) |
|
37697
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
110 | { |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
111 | guint8 encoding_table[] = { |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
112 | 0x76, 0x91, 0xc5, 0xe7, |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
113 | 0xd0, 0xd9, 0x95, 0xdd, |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
114 | 0x9e, 0x2F, 0xea, 0xd8, |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
115 | 0x6B, 0x21, 0xc2, 0xbc, |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
116 | |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
117 | }; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
118 | guint i; |
|
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 | * 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
|
122 | * the official client does as well. |
|
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 | for (i = 0; i < strlen(password) && i < MAXAIMPASSLEN; i++) |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
125 | encoded[i] = (password[i] ^ encoding_table[i]); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
126 | } |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
127 | |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
128 | static void |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
129 | aim_xsnac_free(aim_xsnac_t *xsnac) |
|
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 | gint i; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
132 | |
|
37703
82f57388d70c
oscar: Fix coding style, no whitespace before parenthesis of function calls
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
37702
diff
changeset
|
133 | g_free(xsnac->principal1); |
|
82f57388d70c
oscar: Fix coding style, no whitespace before parenthesis of function calls
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
37702
diff
changeset
|
134 | g_free(xsnac->principal2); |
|
82f57388d70c
oscar: Fix coding style, no whitespace before parenthesis of function calls
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
37702
diff
changeset
|
135 | aim_tlvlist_free(xsnac->tlvlist); |
|
37697
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 < xsnac->num_tokens; i++) { |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
138 | g_free(xsnac->tokens[i].main_tlv->value); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
139 | g_free(xsnac->tokens[i].main_tlv); |
|
37703
82f57388d70c
oscar: Fix coding style, no whitespace before parenthesis of function calls
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
37702
diff
changeset
|
140 | g_free(xsnac->tokens[i].principal1); |
|
82f57388d70c
oscar: Fix coding style, no whitespace before parenthesis of function calls
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
37702
diff
changeset
|
141 | g_free(xsnac->tokens[i].service); |
|
82f57388d70c
oscar: Fix coding style, no whitespace before parenthesis of function calls
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
37702
diff
changeset
|
142 | g_free(xsnac->tokens[i].principal1_again); |
|
82f57388d70c
oscar: Fix coding style, no whitespace before parenthesis of function calls
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
37702
diff
changeset
|
143 | g_free(xsnac->tokens[i].principal2); |
|
82f57388d70c
oscar: Fix coding style, no whitespace before parenthesis of function calls
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
37702
diff
changeset
|
144 | g_free(xsnac->tokens[i].footer); |
|
82f57388d70c
oscar: Fix coding style, no whitespace before parenthesis of function calls
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
37702
diff
changeset
|
145 | aim_tlvlist_free(xsnac->tokens[i].tlvlist); |
|
37697
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
146 | } |
|
37703
82f57388d70c
oscar: Fix coding style, no whitespace before parenthesis of function calls
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
37702
diff
changeset
|
147 | g_free(xsnac->tokens); |
|
37697
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
148 | } |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
149 | |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
150 | static void |
|
37762
0105b155a3d1
oscar: Add kerberos authentication method support for AIM
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
151 | kerberos_login_cb(PurpleHttpConnection *http_conn, |
|
0105b155a3d1
oscar: Add kerberos authentication method support for AIM
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
152 | PurpleHttpResponse *response, gpointer _od) |
|
37697
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
153 | { |
|
37762
0105b155a3d1
oscar: Add kerberos authentication method support for AIM
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
154 | OscarData *od = _od; |
|
37697
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
155 | PurpleConnection *gc; |
|
37762
0105b155a3d1
oscar: Add kerberos authentication method support for AIM
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
156 | const gchar *got_data; |
|
0105b155a3d1
oscar: Add kerberos authentication method support for AIM
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
157 | size_t got_len; |
|
37697
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
158 | ByteStream bs; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
159 | aim_xsnac_t xsnac = {0}; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
160 | guint16 len; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
161 | gchar *bosip = NULL; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
162 | gchar *tlsCertName = NULL; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
163 | guint8 *cookie = NULL; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
164 | guint32 cookie_len = 0; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
165 | char *host; int port; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
166 | gsize i; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
167 | |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
168 | gc = od->gc; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
169 | |
|
37762
0105b155a3d1
oscar: Add kerberos authentication method support for AIM
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
170 | od->hc = NULL; |
|
37697
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
171 | |
|
37762
0105b155a3d1
oscar: Add kerberos authentication method support for AIM
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
172 | if (!purple_http_response_is_successful(response)) { |
|
37697
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
173 | gchar *tmp; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
174 | gchar *url; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
175 | |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
176 | url = get_kdc_url(od); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
177 | tmp = g_strdup_printf(_("Error requesting %s: %s"), |
|
37762
0105b155a3d1
oscar: Add kerberos authentication method support for AIM
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
178 | url, |
|
0105b155a3d1
oscar: Add kerberos authentication method support for AIM
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
179 | purple_http_response_get_error(response)); |
|
0105b155a3d1
oscar: Add kerberos authentication method support for AIM
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
180 | purple_connection_error(gc, |
|
37697
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
181 | PURPLE_CONNECTION_ERROR_NETWORK_ERROR, tmp); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
182 | g_free(tmp); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
183 | g_free(url); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
184 | return; |
|
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 | |
|
37762
0105b155a3d1
oscar: Add kerberos authentication method support for AIM
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
187 | got_data = purple_http_response_get_data(response, &got_len); |
|
37697
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
188 | 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
|
189 | |
|
37703
82f57388d70c
oscar: Fix coding style, no whitespace before parenthesis of function calls
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
37702
diff
changeset
|
190 | byte_stream_init(&bs, (guint8 *)got_data, got_len); |
|
37697
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
191 | |
|
37703
82f57388d70c
oscar: Fix coding style, no whitespace before parenthesis of function calls
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
37702
diff
changeset
|
192 | xsnac.family = byte_stream_get16(&bs); |
|
37697
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
193 | xsnac.subtype = byte_stream_get16(&bs); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
194 | byte_stream_getrawbuf(&bs, (guint8 *) xsnac.flags, 8); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
195 | |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
196 | if (xsnac.family == 0x50C && xsnac.subtype == 0x0005) { |
|
37762
0105b155a3d1
oscar: Add kerberos authentication method support for AIM
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
197 | purple_connection_error(gc, |
|
37697
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
198 | PURPLE_CONNECTION_ERROR_AUTHENTICATION_FAILED, |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
199 | _("Incorrect password")); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
200 | return; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
201 | } |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
202 | if (xsnac.family != 0x50C || xsnac.subtype != 0x0003) { |
|
37762
0105b155a3d1
oscar: Add kerberos authentication method support for AIM
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
203 | purple_connection_error(gc, |
|
37697
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
204 | PURPLE_CONNECTION_ERROR_NETWORK_ERROR, |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
205 | _("Error parsing response from authentication server")); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
206 | return; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
207 | } |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
208 | xsnac.request_id = byte_stream_get16(&bs); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
209 | xsnac.epoch = byte_stream_get32(&bs); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
210 | xsnac.unknown = byte_stream_get32(&bs); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
211 | len = byte_stream_get16(&bs); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
212 | xsnac.principal1 = byte_stream_getstr(&bs, len); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
213 | len = byte_stream_get16(&bs); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
214 | xsnac.principal2 = byte_stream_getstr(&bs, len); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
215 | xsnac.num_tokens = byte_stream_get16(&bs); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
216 | |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
217 | 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
|
218 | xsnac.num_tokens, xsnac.principal1, xsnac.principal2); |
|
37703
82f57388d70c
oscar: Fix coding style, no whitespace before parenthesis of function calls
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
37702
diff
changeset
|
219 | xsnac.tokens = g_new0(aim_xsnac_token_t, xsnac.num_tokens); |
|
37697
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
220 | for (i = 0; i < xsnac.num_tokens; i++) { |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
221 | GSList *tlv; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
222 | |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
223 | tlv = aim_tlvlist_readnum(&bs, 1); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
224 | if (tlv) |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
225 | xsnac.tokens[i].main_tlv = tlv->data; |
|
37703
82f57388d70c
oscar: Fix coding style, no whitespace before parenthesis of function calls
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
37702
diff
changeset
|
226 | g_slist_free(tlv); |
|
37697
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
227 | |
|
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.tokens[i].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.tokens[i].service = byte_stream_getstr(&bs, len); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
232 | len = byte_stream_get16(&bs); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
233 | 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
|
234 | len = byte_stream_get16(&bs); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
235 | xsnac.tokens[i].principal2 = byte_stream_getstr(&bs, len); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
236 | xsnac.tokens[i].unknown = byte_stream_get8(&bs); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
237 | len = byte_stream_get16(&bs); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
238 | xsnac.tokens[i].footer = byte_stream_getraw(&bs, len); |
|
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 | xsnac.tokens[i].dates.unknown1 = byte_stream_get32(&bs); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
241 | xsnac.tokens[i].dates.unknown2 = byte_stream_get32(&bs); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
242 | 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
|
243 | 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
|
244 | 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
|
245 | 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
|
246 | xsnac.tokens[i].dates.unknown3 = byte_stream_get32(&bs); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
247 | xsnac.tokens[i].dates.unknown4 = byte_stream_get32(&bs); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
248 | xsnac.tokens[i].dates.unknown5 = byte_stream_get32(&bs); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
249 | |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
250 | len = byte_stream_get16(&bs); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
251 | xsnac.tokens[i].tlvlist = aim_tlvlist_readnum(&bs, len); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
252 | |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
253 | 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
|
254 | i, len, xsnac.tokens[i].service); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
255 | } |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
256 | len = byte_stream_get16(&bs); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
257 | xsnac.tlvlist = aim_tlvlist_readnum(&bs, len); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
258 | |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
259 | for (i = 0; i < xsnac.num_tokens; i++) { |
|
37703
82f57388d70c
oscar: Fix coding style, no whitespace before parenthesis of function calls
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
37702
diff
changeset
|
260 | if (purple_strequal(xsnac.tokens[i].service, "im/boss")) { |
|
37697
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
261 | aim_tlv_t *tlv; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
262 | GSList *tlvlist; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
263 | ByteStream tbs; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
264 | |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
265 | 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
|
266 | if (tlv != NULL) { |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
267 | byte_stream_init(&tbs, tlv->value, tlv->length); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
268 | byte_stream_get32(&tbs); |
|
37703
82f57388d70c
oscar: Fix coding style, no whitespace before parenthesis of function calls
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
37702
diff
changeset
|
269 | tlvlist = aim_tlvlist_read(&tbs); |
|
82f57388d70c
oscar: Fix coding style, no whitespace before parenthesis of function calls
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
37702
diff
changeset
|
270 | if (aim_tlv_gettlv(tlvlist, 0x0005, 1)) |
|
82f57388d70c
oscar: Fix coding style, no whitespace before parenthesis of function calls
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
37702
diff
changeset
|
271 | bosip = aim_tlv_getstr(tlvlist, 0x0005, 1); |
|
82f57388d70c
oscar: Fix coding style, no whitespace before parenthesis of function calls
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
37702
diff
changeset
|
272 | if (aim_tlv_gettlv(tlvlist, 0x0005, 1)) |
|
82f57388d70c
oscar: Fix coding style, no whitespace before parenthesis of function calls
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
37702
diff
changeset
|
273 | tlsCertName = aim_tlv_getstr(tlvlist, 0x008D, 1); |
|
37697
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
274 | tlv = aim_tlv_gettlv(tlvlist, 0x0006, 1); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
275 | if (tlv) { |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
276 | cookie_len = tlv->length; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
277 | cookie = tlv->value; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
278 | } |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
279 | } |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
280 | break; |
|
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 | } |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
283 | if (bosip && cookie) { |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
284 | port = AIM_DEFAULT_KDC_PORT; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
285 | for (i = 0; i < strlen(bosip); i++) { |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
286 | if (bosip[i] == ':') { |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
287 | port = atoi(&(bosip[i+1])); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
288 | break; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
289 | } |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
290 | } |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
291 | host = g_strndup(bosip, i); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
292 | oscar_connect_to_bos(gc, od, host, port, cookie, cookie_len, tlsCertName); |
|
37703
82f57388d70c
oscar: Fix coding style, no whitespace before parenthesis of function calls
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
37702
diff
changeset
|
293 | g_free(host); |
|
37697
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
294 | } else { |
|
37762
0105b155a3d1
oscar: Add kerberos authentication method support for AIM
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
295 | purple_connection_error(gc, |
|
37697
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
296 | PURPLE_CONNECTION_ERROR_NETWORK_ERROR, |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
297 | _("Unknown error during authentication")); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
298 | } |
|
37703
82f57388d70c
oscar: Fix coding style, no whitespace before parenthesis of function calls
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
37702
diff
changeset
|
299 | aim_xsnac_free(&xsnac); |
|
82f57388d70c
oscar: Fix coding style, no whitespace before parenthesis of function calls
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
37702
diff
changeset
|
300 | g_free(tlsCertName); |
|
82f57388d70c
oscar: Fix coding style, no whitespace before parenthesis of function calls
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
37702
diff
changeset
|
301 | g_free(bosip); |
|
37697
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
302 | } |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
303 | |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
304 | /** |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
305 | * 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
|
306 | * 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
|
307 | * 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
|
308 | * BOSS server. |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
309 | * 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
|
310 | * 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
|
311 | * to SNAC packets but somehow different. |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
312 | * 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
|
313 | * 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
|
314 | * some reason followed by the 'US' and 'en' strings. |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
315 | * 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
|
316 | * 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
|
317 | * 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
|
318 | * '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
|
319 | * '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
|
320 | * 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
|
321 | * 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
|
322 | * this point. |
|
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 | void send_kerberos_login(OscarData *od, const char *username) |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
325 | { |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
326 | PurpleConnection *gc; |
|
37762
0105b155a3d1
oscar: Add kerberos authentication method support for AIM
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
327 | PurpleHttpRequest *req; |
|
37697
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
328 | gchar *url; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
329 | 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
|
330 | gchar password_xored[MAXAIMPASSLEN]; |
|
37697
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
331 | const gchar *client_key; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
332 | gchar *imapp_key; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
333 | GString *body; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
334 | guint16 len_be; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
335 | guint16 reqid; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
336 | const gchar header[] = { |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
337 | 0x05, 0x0C, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
338 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
339 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
340 | 0x00, 0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0x05, |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
341 | 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x05, |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
342 | 0x00, 0x02, 0x00, 0x04, 0x00, 0x00, 0x18, 0x99, |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
343 | 0x00, 0x05, 0x00, 0x04, 0x43, 0x4F, 0x4F, 0x4C, |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
344 | 0x00, 0x0A, 0x00, 0x02, 0x00, 0x01, 0x00, 0x0B, |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
345 | 0x00, 0x04, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
346 | 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
347 | 0x55, 0x53, 0x00, 0x02, 0x65, 0x6E, 0x00, 0x04, |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
348 | 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0D, |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
349 | 0x00, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
350 | 0x00, 0x05}; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
351 | const gchar pre_username[] = { |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
352 | 0x00, 0x07, 0x00, 0x04, 0x00, 0x00, 0x01, 0x8B, |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
353 | 0x01, 0x00, 0x00, 0x00, 0x00}; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
354 | const gchar post_username[] = { |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
355 | 0x00, 0x07, 0x69, 0x6D, 0x2F, 0x62, 0x6F, 0x73, |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
356 | 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
357 | 0x04, 0x00, 0x02}; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
358 | const gchar pre_password[] = { |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
359 | 0x40, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x01, |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
360 | 0x00, 0x00}; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
361 | const gchar post_password[] = {0x00, 0x00, 0x00, 0x1D}; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
362 | const gchar footer[] = { |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
363 | 0x00, 0x21, 0x00, 0x32, 0x00, 0x01, 0x10, 0x03, |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
364 | 0x00, 0x2C, 0x00, 0x07, 0x00, 0x14, 0x00, 0x04, |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
365 | 0x00, 0x00, 0x01, 0x8B, 0x00, 0x16, 0x00, 0x02, |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
366 | 0x00, 0x26, 0x00, 0x17, 0x00, 0x02, 0x00, 0x07, |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
367 | 0x00, 0x18, 0x00, 0x02, 0x00, 0x00, 0x00, 0x19, |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
368 | 0x00, 0x02, 0x00, 0x0D, 0x00, 0x1A, 0x00, 0x02, |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
369 | 0x00, 0x04, 0x00, 0xAB, 0x00, 0x00, 0x00, 0x28, |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
370 | 0x00, 0x00}; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
371 | |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
372 | gc = od->gc; |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
373 | |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
374 | password = purple_connection_get_password(gc); |
|
37703
82f57388d70c
oscar: Fix coding style, no whitespace before parenthesis of function calls
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
37702
diff
changeset
|
375 | aim_encode_password(password, password_xored); |
|
37697
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
376 | |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
377 | client_key = get_client_key(od); |
|
37703
82f57388d70c
oscar: Fix coding style, no whitespace before parenthesis of function calls
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
37702
diff
changeset
|
378 | imapp_key = g_strdup_printf("imApp key=%s", client_key); |
|
37697
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
379 | |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
380 | /* Construct the body of the HTTP POST request */ |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
381 | body = g_string_new(NULL); |
|
37703
82f57388d70c
oscar: Fix coding style, no whitespace before parenthesis of function calls
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
37702
diff
changeset
|
382 | g_string_append_len(body, header, sizeof(header)); |
|
37697
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
383 | reqid = (guint16) g_random_int(); |
|
37703
82f57388d70c
oscar: Fix coding style, no whitespace before parenthesis of function calls
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
37702
diff
changeset
|
384 | g_string_overwrite_len(body, 0xC, (void *)&reqid, sizeof(guint16)); |
|
37697
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
385 | |
|
37703
82f57388d70c
oscar: Fix coding style, no whitespace before parenthesis of function calls
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
37702
diff
changeset
|
386 | len_be = GUINT16_TO_BE(strlen(imapp_key)); |
|
82f57388d70c
oscar: Fix coding style, no whitespace before parenthesis of function calls
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
37702
diff
changeset
|
387 | g_string_append_len(body, (void *)&len_be, sizeof(guint16)); |
|
82f57388d70c
oscar: Fix coding style, no whitespace before parenthesis of function calls
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
37702
diff
changeset
|
388 | g_string_append(body, imapp_key); |
|
37697
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
389 | |
|
37703
82f57388d70c
oscar: Fix coding style, no whitespace before parenthesis of function calls
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
37702
diff
changeset
|
390 | len_be = GUINT16_TO_BE(strlen(username)); |
|
82f57388d70c
oscar: Fix coding style, no whitespace before parenthesis of function calls
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
37702
diff
changeset
|
391 | g_string_append_len(body, pre_username, sizeof(pre_username)); |
|
82f57388d70c
oscar: Fix coding style, no whitespace before parenthesis of function calls
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
37702
diff
changeset
|
392 | g_string_append_len(body, (void *)&len_be, sizeof(guint16)); |
|
82f57388d70c
oscar: Fix coding style, no whitespace before parenthesis of function calls
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
37702
diff
changeset
|
393 | g_string_append(body, username); |
|
82f57388d70c
oscar: Fix coding style, no whitespace before parenthesis of function calls
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
37702
diff
changeset
|
394 | g_string_append_len(body, post_username, sizeof(post_username)); |
|
37697
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
395 | |
|
37703
82f57388d70c
oscar: Fix coding style, no whitespace before parenthesis of function calls
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
37702
diff
changeset
|
396 | len_be = GUINT16_TO_BE(strlen(password) + 0x10); |
|
82f57388d70c
oscar: Fix coding style, no whitespace before parenthesis of function calls
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
37702
diff
changeset
|
397 | g_string_append_len(body, (void *)&len_be, sizeof(guint16)); |
|
82f57388d70c
oscar: Fix coding style, no whitespace before parenthesis of function calls
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
37702
diff
changeset
|
398 | g_string_append_len(body, pre_password, sizeof(pre_password)); |
|
82f57388d70c
oscar: Fix coding style, no whitespace before parenthesis of function calls
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
37702
diff
changeset
|
399 | len_be = GUINT16_TO_BE(strlen(password) + 4); |
|
82f57388d70c
oscar: Fix coding style, no whitespace before parenthesis of function calls
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
37702
diff
changeset
|
400 | g_string_append_len(body, (void *)&len_be, sizeof(guint16)); |
|
82f57388d70c
oscar: Fix coding style, no whitespace before parenthesis of function calls
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
37702
diff
changeset
|
401 | len_be = GUINT16_TO_BE(strlen(password)); |
|
82f57388d70c
oscar: Fix coding style, no whitespace before parenthesis of function calls
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
37702
diff
changeset
|
402 | g_string_append_len(body, (void *)&len_be, sizeof(guint16)); |
|
82f57388d70c
oscar: Fix coding style, no whitespace before parenthesis of function calls
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
37702
diff
changeset
|
403 | g_string_append_len(body, password_xored, strlen(password)); |
|
82f57388d70c
oscar: Fix coding style, no whitespace before parenthesis of function calls
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
37702
diff
changeset
|
404 | g_string_append_len(body, post_password, sizeof(post_password)); |
|
37697
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
405 | |
|
37703
82f57388d70c
oscar: Fix coding style, no whitespace before parenthesis of function calls
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
37702
diff
changeset
|
406 | len_be = GUINT16_TO_BE(strlen(client_key)); |
|
82f57388d70c
oscar: Fix coding style, no whitespace before parenthesis of function calls
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
37702
diff
changeset
|
407 | g_string_append_len(body, (void *)&len_be, sizeof(guint16)); |
|
82f57388d70c
oscar: Fix coding style, no whitespace before parenthesis of function calls
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
37702
diff
changeset
|
408 | g_string_append(body, client_key); |
|
82f57388d70c
oscar: Fix coding style, no whitespace before parenthesis of function calls
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
37702
diff
changeset
|
409 | g_string_append_len(body, footer, sizeof(footer)); |
|
37697
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
410 | |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
411 | g_free(imapp_key); |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
412 | |
|
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
413 | url = get_kdc_url(od); |
|
37762
0105b155a3d1
oscar: Add kerberos authentication method support for AIM
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
414 | req = purple_http_request_new(url); |
|
0105b155a3d1
oscar: Add kerberos authentication method support for AIM
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
415 | purple_http_request_set_method(req, "POST"); |
|
0105b155a3d1
oscar: Add kerberos authentication method support for AIM
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
416 | purple_http_request_header_set(req, "Content-Type", |
|
0105b155a3d1
oscar: Add kerberos authentication method support for AIM
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
417 | "application/x-snac"); |
|
0105b155a3d1
oscar: Add kerberos authentication method support for AIM
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
418 | purple_http_request_header_set(req, "Accept", |
|
0105b155a3d1
oscar: Add kerberos authentication method support for AIM
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
419 | "application/x-snac"); |
|
37766
3538db90056f
Use GString to build the KDC request body instead of memcpy into a malloc-ed raw array. Makes for much cleaner code.
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
37765
diff
changeset
|
420 | purple_http_request_set_contents(req, body->str, body->len); |
|
37762
0105b155a3d1
oscar: Add kerberos authentication method support for AIM
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
421 | od->hc = purple_http_request(gc, req, kerberos_login_cb, od); |
|
0105b155a3d1
oscar: Add kerberos authentication method support for AIM
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
422 | purple_http_request_unref(req); |
|
37697
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
423 | |
|
37703
82f57388d70c
oscar: Fix coding style, no whitespace before parenthesis of function calls
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
37702
diff
changeset
|
424 | g_string_free(body, TRUE); |
|
82f57388d70c
oscar: Fix coding style, no whitespace before parenthesis of function calls
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
37702
diff
changeset
|
425 | g_free(url); |
|
37697
eda46d7224d7
oscar: Adding kerberos-based authentication
Youness Alaoui <kakaroto@kakaroto.homelinux.net>
parents:
diff
changeset
|
426 | } |