Fri, 18 Jan 2013 03:51:05 -0500
Move blist loading into purple_core_init.
The comments say we want to move this into purple_blist_init, but that
seems like it would be problematic. We need the UI ops to be set, which
moves blist init after UI init. But stuff needs blist signals to be
registered before UI init, etc., etc. It seemed like a pain to work that
all out. I made purple_blist_boot for purple_core_init to call after the
UI init happened. It could have been called _load, but I didn't want
people to accidentally continue calling it.
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1 | /** |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
2 | * @file ntlm.c |
|
20147
66f05a854eee
applied changes from 8a731bbd0197fbcc91a705c2d8f528154216defa
Richard Laager <rlaager@pidgin.im>
parents:
19985
diff
changeset
|
3 | */ |
|
66f05a854eee
applied changes from 8a731bbd0197fbcc91a705c2d8f528154216defa
Richard Laager <rlaager@pidgin.im>
parents:
19985
diff
changeset
|
4 | |
|
66f05a854eee
applied changes from 8a731bbd0197fbcc91a705c2d8f528154216defa
Richard Laager <rlaager@pidgin.im>
parents:
19985
diff
changeset
|
5 | /* purple |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
6 | * |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
7 | * Copyright (C) 2005 Thomas Butter <butter@uni-mannheim.de> |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
8 | * |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
9 | * hashing done according to description of NTLM on |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
10 | * http://www.innovation.ch/java/ntlm.html |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
11 | * |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
12 | * This program is free software; you can redistribute it and/or modify |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
13 | * it under the terms of the GNU General Public License as published by |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
14 | * the Free Software Foundation; either version 2 of the License, or |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
15 | * (at your option) any later version. |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
16 | * |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
17 | * This program is distributed in the hope that it will be useful, |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
18 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
19 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
20 | * GNU General Public License for more details. |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
21 | * |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
22 | * You should have received a copy of the GNU General Public License |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
23 | * along with this program; if not, write to the Free Software |
|
19859
71d37b57eff2
The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
18265
diff
changeset
|
24 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
25 | */ |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
26 | |
|
18265
9f26190d7f46
Move the define in internal.h instead.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
15884
diff
changeset
|
27 | #include "internal.h" |
|
9f26190d7f46
Move the define in internal.h instead.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
15884
diff
changeset
|
28 | |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
29 | #include "util.h" |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
30 | #include "ntlm.h" |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
31 | #include "cipher.h" |
|
22596
0854ae660ef4
Further changes to use UTF-16 instead of UCS-2. Also, fix #5167 by making sure that the encoding conversion worked before using the result.
Daniel Atallah <datallah@pidgin.im>
parents:
21695
diff
changeset
|
32 | #include "debug.h" |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
33 | #include <string.h> |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
34 | |
|
13085
c80913901342
[gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11829
diff
changeset
|
35 | #define NTLM_NEGOTIATE_NTLM2_KEY 0x00080000 |
|
c80913901342
[gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11829
diff
changeset
|
36 | |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
37 | struct type1_message { |
|
11829
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
38 | guint8 protocol[8]; /* 'N', 'T', 'L', 'M', 'S', 'S', 'P', '\0' */ |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
39 | guint32 type; /* 0x00000001 */ |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
40 | guint32 flags; /* 0x0000b203 */ |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
41 | |
|
26577
f8ba97d5d719
Make these type-sizes more explicit. Also, the field names for the type2
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26559
diff
changeset
|
42 | guint16 dom_len1; /* domain string length */ |
|
f8ba97d5d719
Make these type-sizes more explicit. Also, the field names for the type2
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26559
diff
changeset
|
43 | guint16 dom_len2; /* domain string length */ |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
44 | guint32 dom_off; /* domain string offset */ |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
45 | |
|
26577
f8ba97d5d719
Make these type-sizes more explicit. Also, the field names for the type2
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26559
diff
changeset
|
46 | guint16 host_len1; /* host string length */ |
|
f8ba97d5d719
Make these type-sizes more explicit. Also, the field names for the type2
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26559
diff
changeset
|
47 | guint16 host_len2; /* host string length */ |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
48 | guint32 host_off; /* host string offset (always 0x00000020) */ |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
49 | |
|
11829
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
50 | #if 0 |
|
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
51 | guint8 host[*]; /* host string (ASCII) */ |
|
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
52 | guint8 dom[*]; /* domain string (ASCII) */ |
|
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
53 | #endif |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
54 | }; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
55 | |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
56 | struct type2_message { |
|
11829
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
57 | guint8 protocol[8]; /* 'N', 'T', 'L', 'M', 'S', 'S', 'P', '\0'*/ |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
58 | guint32 type; /* 0x00000002 */ |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
59 | |
|
26577
f8ba97d5d719
Make these type-sizes more explicit. Also, the field names for the type2
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26559
diff
changeset
|
60 | guint32 zero; |
|
f8ba97d5d719
Make these type-sizes more explicit. Also, the field names for the type2
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26559
diff
changeset
|
61 | guint16 msg_len1; /* target name length */ |
|
f8ba97d5d719
Make these type-sizes more explicit. Also, the field names for the type2
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26559
diff
changeset
|
62 | guint16 msg_len2; /* target name length */ |
|
26559
70c6a4491061
disapproval of revision 'd8cf7a583b30714030386f9f3897142b1b2ddcd2'
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26558
diff
changeset
|
63 | |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
64 | guint32 flags; /* 0x00008201 */ |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
65 | |
|
11829
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
66 | guint8 nonce[8]; /* nonce */ |
|
26577
f8ba97d5d719
Make these type-sizes more explicit. Also, the field names for the type2
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26559
diff
changeset
|
67 | guint8 context[8]; |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
68 | }; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
69 | |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
70 | struct type3_message { |
|
11829
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
71 | guint8 protocol[8]; /* 'N', 'T', 'L', 'M', 'S', 'S', 'P', '\0'*/ |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
72 | guint32 type; /* 0x00000003 */ |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
73 | |
|
26577
f8ba97d5d719
Make these type-sizes more explicit. Also, the field names for the type2
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26559
diff
changeset
|
74 | guint16 lm_resp_len1; /* LanManager response length (always 0x18)*/ |
|
f8ba97d5d719
Make these type-sizes more explicit. Also, the field names for the type2
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26559
diff
changeset
|
75 | guint16 lm_resp_len2; /* LanManager response length (always 0x18)*/ |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
76 | guint32 lm_resp_off; /* LanManager response offset */ |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
77 | |
|
26577
f8ba97d5d719
Make these type-sizes more explicit. Also, the field names for the type2
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26559
diff
changeset
|
78 | guint16 nt_resp_len1; /* NT response length (always 0x18) */ |
|
f8ba97d5d719
Make these type-sizes more explicit. Also, the field names for the type2
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26559
diff
changeset
|
79 | guint16 nt_resp_len2; /* NT response length (always 0x18) */ |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
80 | guint32 nt_resp_off; /* NT response offset */ |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
81 | |
|
26577
f8ba97d5d719
Make these type-sizes more explicit. Also, the field names for the type2
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26559
diff
changeset
|
82 | guint16 dom_len1; /* domain string length */ |
|
f8ba97d5d719
Make these type-sizes more explicit. Also, the field names for the type2
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26559
diff
changeset
|
83 | guint16 dom_len2; /* domain string length */ |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
84 | guint32 dom_off; /* domain string offset (always 0x00000040) */ |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
85 | |
|
26577
f8ba97d5d719
Make these type-sizes more explicit. Also, the field names for the type2
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26559
diff
changeset
|
86 | guint16 user_len1; /* username string length */ |
|
f8ba97d5d719
Make these type-sizes more explicit. Also, the field names for the type2
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26559
diff
changeset
|
87 | guint16 user_len2; /* username string length */ |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
88 | guint32 user_off; /* username string offset */ |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
89 | |
|
26577
f8ba97d5d719
Make these type-sizes more explicit. Also, the field names for the type2
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26559
diff
changeset
|
90 | guint16 host_len1; /* host string length */ |
|
f8ba97d5d719
Make these type-sizes more explicit. Also, the field names for the type2
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26559
diff
changeset
|
91 | guint16 host_len2; /* host string length */ |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
92 | guint32 host_off; /* host string offset */ |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
93 | |
|
26577
f8ba97d5d719
Make these type-sizes more explicit. Also, the field names for the type2
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26559
diff
changeset
|
94 | guint16 sess_len1; |
|
f8ba97d5d719
Make these type-sizes more explicit. Also, the field names for the type2
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26559
diff
changeset
|
95 | guint16 sess_len2; |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
96 | guint32 sess_off; /* message length */ |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
97 | |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
98 | guint32 flags; /* 0x00008201 */ |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
99 | /* guint32 flags2; */ /* unknown, used in windows messenger */ |
|
26577
f8ba97d5d719
Make these type-sizes more explicit. Also, the field names for the type2
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26559
diff
changeset
|
100 | /* guint32 flags3; */ |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
101 | |
|
11829
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
102 | #if 0 |
|
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
103 | guint8 dom[*]; /* domain string (unicode UTF-16LE) */ |
|
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
104 | guint8 user[*]; /* username string (unicode UTF-16LE) */ |
|
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
105 | guint8 host[*]; /* host string (unicode UTF-16LE) */ |
|
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
106 | guint8 lm_resp[*]; /* LanManager response */ |
|
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
107 | guint8 nt_resp[*]; /* NT response */ |
|
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
108 | #endif |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
109 | }; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
110 | |
|
13679
77a58c7c93af
[gaim-migrate @ 16079]
Mark Doliner <markdoliner@pidgin.im>
parents:
13089
diff
changeset
|
111 | gchar * |
| 15884 | 112 | purple_ntlm_gen_type1(const gchar *hostname, const gchar *domain) |
|
13679
77a58c7c93af
[gaim-migrate @ 16079]
Mark Doliner <markdoliner@pidgin.im>
parents:
13089
diff
changeset
|
113 | { |
|
32017
2710edaebd02
Fix NTLM endianness issue.
Jon Goldberg <jond578@gmail.com>
parents:
30857
diff
changeset
|
114 | int hostnamelen,host_off; |
|
2710edaebd02
Fix NTLM endianness issue.
Jon Goldberg <jond578@gmail.com>
parents:
30857
diff
changeset
|
115 | int domainlen,dom_off; |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
116 | unsigned char *msg; |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
117 | struct type1_message *tmsg; |
|
13706
0490d9ee869a
[gaim-migrate @ 16107]
Mark Doliner <markdoliner@pidgin.im>
parents:
13701
diff
changeset
|
118 | gchar *tmp; |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
119 | |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
120 | hostnamelen = strlen(hostname); |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
121 | domainlen = strlen(domain); |
|
32017
2710edaebd02
Fix NTLM endianness issue.
Jon Goldberg <jond578@gmail.com>
parents:
30857
diff
changeset
|
122 | host_off = sizeof(struct type1_message); |
|
2710edaebd02
Fix NTLM endianness issue.
Jon Goldberg <jond578@gmail.com>
parents:
30857
diff
changeset
|
123 | dom_off = sizeof(struct type1_message) + hostnamelen; |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
124 | msg = g_malloc0(sizeof(struct type1_message) + hostnamelen + domainlen); |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
125 | tmsg = (struct type1_message*)msg; |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
126 | tmsg->protocol[0] = 'N'; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
127 | tmsg->protocol[1] = 'T'; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
128 | tmsg->protocol[2] = 'L'; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
129 | tmsg->protocol[3] = 'M'; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
130 | tmsg->protocol[4] = 'S'; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
131 | tmsg->protocol[5] = 'S'; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
132 | tmsg->protocol[6] = 'P'; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
133 | tmsg->protocol[7] = '\0'; |
|
26578
41a9f4b89956
I think I'm just going to apply this patch. I don't really see how it
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26577
diff
changeset
|
134 | tmsg->type = GUINT32_TO_LE(0x00000001); |
|
41a9f4b89956
I think I'm just going to apply this patch. I don't really see how it
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26577
diff
changeset
|
135 | tmsg->flags = GUINT32_TO_LE(0x0000b203); |
|
41a9f4b89956
I think I'm just going to apply this patch. I don't really see how it
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26577
diff
changeset
|
136 | tmsg->dom_len1 = tmsg->dom_len2 = GUINT16_TO_LE(domainlen); |
|
32017
2710edaebd02
Fix NTLM endianness issue.
Jon Goldberg <jond578@gmail.com>
parents:
30857
diff
changeset
|
137 | tmsg->dom_off = GUINT32_TO_LE(dom_off); |
|
26578
41a9f4b89956
I think I'm just going to apply this patch. I don't really see how it
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26577
diff
changeset
|
138 | tmsg->host_len1 = tmsg->host_len2 = GUINT16_TO_LE(hostnamelen); |
|
32017
2710edaebd02
Fix NTLM endianness issue.
Jon Goldberg <jond578@gmail.com>
parents:
30857
diff
changeset
|
139 | tmsg->host_off = GUINT32_TO_LE(host_off); |
|
2710edaebd02
Fix NTLM endianness issue.
Jon Goldberg <jond578@gmail.com>
parents:
30857
diff
changeset
|
140 | memcpy(msg + host_off, hostname, hostnamelen); |
|
2710edaebd02
Fix NTLM endianness issue.
Jon Goldberg <jond578@gmail.com>
parents:
30857
diff
changeset
|
141 | memcpy(msg + dom_off, domain, domainlen); |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
142 | |
| 15884 | 143 | tmp = purple_base64_encode(msg, sizeof(struct type1_message) + hostnamelen + domainlen); |
|
13706
0490d9ee869a
[gaim-migrate @ 16107]
Mark Doliner <markdoliner@pidgin.im>
parents:
13701
diff
changeset
|
144 | g_free(msg); |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
145 | |
|
13706
0490d9ee869a
[gaim-migrate @ 16107]
Mark Doliner <markdoliner@pidgin.im>
parents:
13701
diff
changeset
|
146 | return tmp; |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
147 | } |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
148 | |
|
13700
ad7bca3b4240
[gaim-migrate @ 16101]
Mark Doliner <markdoliner@pidgin.im>
parents:
13679
diff
changeset
|
149 | guint8 * |
| 15884 | 150 | purple_ntlm_parse_type2(const gchar *type2, guint32 *flags) |
|
13679
77a58c7c93af
[gaim-migrate @ 16079]
Mark Doliner <markdoliner@pidgin.im>
parents:
13089
diff
changeset
|
151 | { |
| 11586 | 152 | gsize retlen; |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
153 | struct type2_message *tmsg; |
|
13700
ad7bca3b4240
[gaim-migrate @ 16101]
Mark Doliner <markdoliner@pidgin.im>
parents:
13679
diff
changeset
|
154 | static guint8 nonce[8]; |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
155 | |
| 15884 | 156 | tmsg = (struct type2_message*)purple_base64_decode(type2, &retlen); |
|
30857
1a7e2da2ab01
Fix for CVE-2010-3711. Properly validate the return value from
Daniel Atallah <datallah@pidgin.im>
parents:
28981
diff
changeset
|
157 | if (tmsg != NULL && retlen >= (sizeof(struct type2_message) - 1)) { |
|
1a7e2da2ab01
Fix for CVE-2010-3711. Properly validate the return value from
Daniel Atallah <datallah@pidgin.im>
parents:
28981
diff
changeset
|
158 | memcpy(nonce, tmsg->nonce, 8); |
|
1a7e2da2ab01
Fix for CVE-2010-3711. Properly validate the return value from
Daniel Atallah <datallah@pidgin.im>
parents:
28981
diff
changeset
|
159 | if (flags != NULL) |
|
1a7e2da2ab01
Fix for CVE-2010-3711. Properly validate the return value from
Daniel Atallah <datallah@pidgin.im>
parents:
28981
diff
changeset
|
160 | *flags = GUINT16_FROM_LE(tmsg->flags); |
|
1a7e2da2ab01
Fix for CVE-2010-3711. Properly validate the return value from
Daniel Atallah <datallah@pidgin.im>
parents:
28981
diff
changeset
|
161 | } else { |
|
1a7e2da2ab01
Fix for CVE-2010-3711. Properly validate the return value from
Daniel Atallah <datallah@pidgin.im>
parents:
28981
diff
changeset
|
162 | purple_debug_error("ntlm", "Unable to parse type2 message - returning empty nonce.\n"); |
|
1a7e2da2ab01
Fix for CVE-2010-3711. Properly validate the return value from
Daniel Atallah <datallah@pidgin.im>
parents:
28981
diff
changeset
|
163 | memset(nonce, 0, 8); |
|
1a7e2da2ab01
Fix for CVE-2010-3711. Properly validate the return value from
Daniel Atallah <datallah@pidgin.im>
parents:
28981
diff
changeset
|
164 | } |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
165 | g_free(tmsg); |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
166 | |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
167 | return nonce; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
168 | } |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
169 | |
|
13701
5f9ab32a6306
[gaim-migrate @ 16102]
Mark Doliner <markdoliner@pidgin.im>
parents:
13700
diff
changeset
|
170 | /** |
|
5f9ab32a6306
[gaim-migrate @ 16102]
Mark Doliner <markdoliner@pidgin.im>
parents:
13700
diff
changeset
|
171 | * Create a 64bit DES key by taking a 56bit key and adding |
|
5f9ab32a6306
[gaim-migrate @ 16102]
Mark Doliner <markdoliner@pidgin.im>
parents:
13700
diff
changeset
|
172 | * a parity bit after every 7th bit. |
|
5f9ab32a6306
[gaim-migrate @ 16102]
Mark Doliner <markdoliner@pidgin.im>
parents:
13700
diff
changeset
|
173 | */ |
|
13679
77a58c7c93af
[gaim-migrate @ 16079]
Mark Doliner <markdoliner@pidgin.im>
parents:
13089
diff
changeset
|
174 | static void |
|
13701
5f9ab32a6306
[gaim-migrate @ 16102]
Mark Doliner <markdoliner@pidgin.im>
parents:
13700
diff
changeset
|
175 | setup_des_key(const guint8 key_56[], guint8 *key) |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
176 | { |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
177 | key[0] = key_56[0]; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
178 | key[1] = ((key_56[0] << 7) & 0xFF) | (key_56[1] >> 1); |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
179 | key[2] = ((key_56[1] << 6) & 0xFF) | (key_56[2] >> 2); |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
180 | key[3] = ((key_56[2] << 5) & 0xFF) | (key_56[3] >> 3); |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
181 | key[4] = ((key_56[3] << 4) & 0xFF) | (key_56[4] >> 4); |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
182 | key[5] = ((key_56[4] << 3) & 0xFF) | (key_56[5] >> 5); |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
183 | key[6] = ((key_56[5] << 2) & 0xFF) | (key_56[6] >> 6); |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
184 | key[7] = (key_56[6] << 1) & 0xFF; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
185 | } |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
186 | |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
187 | /* |
| 15884 | 188 | * helper function for purple cipher.c |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
189 | */ |
|
13679
77a58c7c93af
[gaim-migrate @ 16079]
Mark Doliner <markdoliner@pidgin.im>
parents:
13089
diff
changeset
|
190 | static void |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
191 | des_ecb_encrypt(const guint8 *plaintext, guint8 *result, const guint8 *key) |
|
13679
77a58c7c93af
[gaim-migrate @ 16079]
Mark Doliner <markdoliner@pidgin.im>
parents:
13089
diff
changeset
|
192 | { |
| 15884 | 193 | PurpleCipher *cipher; |
| 194 | PurpleCipherContext *context; | |
|
21695
8cea10362afd
purple_cipher_context_encrypt() wants a pointer to a size_t, not a gsize
Evan Schoenberg <evands@pidgin.im>
parents:
20147
diff
changeset
|
195 | size_t outlen; |
|
13679
77a58c7c93af
[gaim-migrate @ 16079]
Mark Doliner <markdoliner@pidgin.im>
parents:
13089
diff
changeset
|
196 | |
| 15884 | 197 | cipher = purple_ciphers_find_cipher("des"); |
| 198 | context = purple_cipher_context_new(cipher, NULL); | |
| 199 | purple_cipher_context_set_key(context, key); | |
| 200 | purple_cipher_context_encrypt(context, plaintext, 8, result, &outlen); | |
| 201 | purple_cipher_context_destroy(context); | |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
202 | } |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
203 | |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
204 | /* |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
205 | * takes a 21 byte array and treats it as 3 56-bit DES keys. The |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
206 | * 8 byte plaintext is encrypted with each key and the resulting 24 |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
207 | * bytes are stored in the results array. |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
208 | */ |
|
13679
77a58c7c93af
[gaim-migrate @ 16079]
Mark Doliner <markdoliner@pidgin.im>
parents:
13089
diff
changeset
|
209 | static void |
|
13701
5f9ab32a6306
[gaim-migrate @ 16102]
Mark Doliner <markdoliner@pidgin.im>
parents:
13700
diff
changeset
|
210 | calc_resp(guint8 *keys, const guint8 *plaintext, unsigned char *results) |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
211 | { |
|
13701
5f9ab32a6306
[gaim-migrate @ 16102]
Mark Doliner <markdoliner@pidgin.im>
parents:
13700
diff
changeset
|
212 | guint8 key[8]; |
|
5f9ab32a6306
[gaim-migrate @ 16102]
Mark Doliner <markdoliner@pidgin.im>
parents:
13700
diff
changeset
|
213 | setup_des_key(keys, key); |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
214 | des_ecb_encrypt(plaintext, results, key); |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
215 | |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
216 | setup_des_key(keys + 7, key); |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
217 | des_ecb_encrypt(plaintext, results + 8, key); |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
218 | |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
219 | setup_des_key(keys + 14, key); |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
220 | des_ecb_encrypt(plaintext, results + 16, key); |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
221 | } |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
222 | |
|
33583
5ecccdc2d618
Document a potential improvement in ntlm random numbers.
Mark Doliner <mark@kingant.net>
parents:
33573
diff
changeset
|
223 | /* |
|
5ecccdc2d618
Document a potential improvement in ntlm random numbers.
Mark Doliner <mark@kingant.net>
parents:
33573
diff
changeset
|
224 | * TODO: We think we should be using cryptographically secure random numbers |
|
5ecccdc2d618
Document a potential improvement in ntlm random numbers.
Mark Doliner <mark@kingant.net>
parents:
33573
diff
changeset
|
225 | * here. We think the rand() function is probably bad. We think |
|
5ecccdc2d618
Document a potential improvement in ntlm random numbers.
Mark Doliner <mark@kingant.net>
parents:
33573
diff
changeset
|
226 | * /dev/urandom is a step up, but using a random function from an SSL |
|
5ecccdc2d618
Document a potential improvement in ntlm random numbers.
Mark Doliner <mark@kingant.net>
parents:
33573
diff
changeset
|
227 | * library would probably be best. In Windows we could possibly also |
|
5ecccdc2d618
Document a potential improvement in ntlm random numbers.
Mark Doliner <mark@kingant.net>
parents:
33573
diff
changeset
|
228 | * use CryptGenRandom. |
|
5ecccdc2d618
Document a potential improvement in ntlm random numbers.
Mark Doliner <mark@kingant.net>
parents:
33573
diff
changeset
|
229 | */ |
|
13679
77a58c7c93af
[gaim-migrate @ 16079]
Mark Doliner <markdoliner@pidgin.im>
parents:
13089
diff
changeset
|
230 | static void |
| 33565 | 231 | gensesskey(char *buffer) |
|
13679
77a58c7c93af
[gaim-migrate @ 16079]
Mark Doliner <markdoliner@pidgin.im>
parents:
13089
diff
changeset
|
232 | { |
|
33573
cf93d5926aaf
Try using /dev/urandom instead of rand() when creating an NTLM session key.
Mark Doliner <mark@kingant.net>
parents:
33565
diff
changeset
|
233 | int fd; |
|
cf93d5926aaf
Try using /dev/urandom instead of rand() when creating an NTLM session key.
Mark Doliner <mark@kingant.net>
parents:
33565
diff
changeset
|
234 | int i; |
|
cf93d5926aaf
Try using /dev/urandom instead of rand() when creating an NTLM session key.
Mark Doliner <mark@kingant.net>
parents:
33565
diff
changeset
|
235 | ssize_t red = 0; |
| 33565 | 236 | |
|
33573
cf93d5926aaf
Try using /dev/urandom instead of rand() when creating an NTLM session key.
Mark Doliner <mark@kingant.net>
parents:
33565
diff
changeset
|
237 | fd = open("/dev/urandom", O_RDONLY); |
|
cf93d5926aaf
Try using /dev/urandom instead of rand() when creating an NTLM session key.
Mark Doliner <mark@kingant.net>
parents:
33565
diff
changeset
|
238 | if (fd >= 0) { |
|
cf93d5926aaf
Try using /dev/urandom instead of rand() when creating an NTLM session key.
Mark Doliner <mark@kingant.net>
parents:
33565
diff
changeset
|
239 | red = read(fd, buffer, 16); |
|
cf93d5926aaf
Try using /dev/urandom instead of rand() when creating an NTLM session key.
Mark Doliner <mark@kingant.net>
parents:
33565
diff
changeset
|
240 | if (red < 0) { |
|
cf93d5926aaf
Try using /dev/urandom instead of rand() when creating an NTLM session key.
Mark Doliner <mark@kingant.net>
parents:
33565
diff
changeset
|
241 | purple_debug_warning("ntlm", "Error reading from /dev/urandom: %s." |
|
cf93d5926aaf
Try using /dev/urandom instead of rand() when creating an NTLM session key.
Mark Doliner <mark@kingant.net>
parents:
33565
diff
changeset
|
242 | " Falling back to inferior method.\n", g_strerror(errno)); |
|
cf93d5926aaf
Try using /dev/urandom instead of rand() when creating an NTLM session key.
Mark Doliner <mark@kingant.net>
parents:
33565
diff
changeset
|
243 | red = 0; |
|
cf93d5926aaf
Try using /dev/urandom instead of rand() when creating an NTLM session key.
Mark Doliner <mark@kingant.net>
parents:
33565
diff
changeset
|
244 | } else if (red < 16) { |
|
cf93d5926aaf
Try using /dev/urandom instead of rand() when creating an NTLM session key.
Mark Doliner <mark@kingant.net>
parents:
33565
diff
changeset
|
245 | purple_debug_warning("ntlm", "Tried reading 16 bytes from " |
|
cf93d5926aaf
Try using /dev/urandom instead of rand() when creating an NTLM session key.
Mark Doliner <mark@kingant.net>
parents:
33565
diff
changeset
|
246 | "/dev/urandom but only got %zd. Falling back to " |
|
cf93d5926aaf
Try using /dev/urandom instead of rand() when creating an NTLM session key.
Mark Doliner <mark@kingant.net>
parents:
33565
diff
changeset
|
247 | "inferior method\n", red); |
|
cf93d5926aaf
Try using /dev/urandom instead of rand() when creating an NTLM session key.
Mark Doliner <mark@kingant.net>
parents:
33565
diff
changeset
|
248 | } |
|
cf93d5926aaf
Try using /dev/urandom instead of rand() when creating an NTLM session key.
Mark Doliner <mark@kingant.net>
parents:
33565
diff
changeset
|
249 | } else { |
|
cf93d5926aaf
Try using /dev/urandom instead of rand() when creating an NTLM session key.
Mark Doliner <mark@kingant.net>
parents:
33565
diff
changeset
|
250 | purple_debug_warning("ntlm", "Error opening /dev/urandom: %s." |
|
cf93d5926aaf
Try using /dev/urandom instead of rand() when creating an NTLM session key.
Mark Doliner <mark@kingant.net>
parents:
33565
diff
changeset
|
251 | " Falling back to inferior method.\n", g_strerror(errno)); |
|
cf93d5926aaf
Try using /dev/urandom instead of rand() when creating an NTLM session key.
Mark Doliner <mark@kingant.net>
parents:
33565
diff
changeset
|
252 | } |
|
cf93d5926aaf
Try using /dev/urandom instead of rand() when creating an NTLM session key.
Mark Doliner <mark@kingant.net>
parents:
33565
diff
changeset
|
253 | |
|
cf93d5926aaf
Try using /dev/urandom instead of rand() when creating an NTLM session key.
Mark Doliner <mark@kingant.net>
parents:
33565
diff
changeset
|
254 | for (i = red; i < 16; i++) { |
| 33565 | 255 | buffer[i] = (char)(rand() & 0xff); |
|
13088
6254abd3dec1
[gaim-migrate @ 15449]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13085
diff
changeset
|
256 | } |
|
6254abd3dec1
[gaim-migrate @ 15449]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13085
diff
changeset
|
257 | } |
|
13085
c80913901342
[gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11829
diff
changeset
|
258 | |
|
13089
e1ab8bfba211
[gaim-migrate @ 15450]
Mark Doliner <markdoliner@pidgin.im>
parents:
13088
diff
changeset
|
259 | gchar * |
| 15884 | 260 | purple_ntlm_gen_type3(const gchar *username, const gchar *passw, const gchar *hostname, const gchar *domain, const guint8 *nonce, guint32 *flags) |
|
13089
e1ab8bfba211
[gaim-migrate @ 15450]
Mark Doliner <markdoliner@pidgin.im>
parents:
13088
diff
changeset
|
261 | { |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
262 | char lm_pw[14]; |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
263 | unsigned char lm_hpw[21]; |
|
13088
6254abd3dec1
[gaim-migrate @ 15449]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13085
diff
changeset
|
264 | char sesskey[16]; |
|
13701
5f9ab32a6306
[gaim-migrate @ 16102]
Mark Doliner <markdoliner@pidgin.im>
parents:
13700
diff
changeset
|
265 | guint8 key[8]; |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
266 | int domainlen; |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
267 | int usernamelen; |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
268 | int hostnamelen; |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
269 | int msglen; |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
270 | struct type3_message *tmsg; |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
271 | int passwlen, lennt; |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
272 | unsigned char lm_resp[24], nt_resp[24]; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
273 | unsigned char magic[] = { 0x4B, 0x47, 0x53, 0x21, 0x40, 0x23, 0x24, 0x25 }; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
274 | unsigned char nt_hpw[21]; |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
275 | char nt_pw[128]; |
| 15884 | 276 | PurpleCipher *cipher; |
| 277 | PurpleCipherContext *context; | |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
278 | char *tmp; |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
279 | int idx; |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
280 | gchar *ucs2le; |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
281 | |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
282 | domainlen = strlen(domain) * 2; |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
283 | usernamelen = strlen(username) * 2; |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
284 | hostnamelen = strlen(hostname) * 2; |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
285 | msglen = sizeof(struct type3_message) + domainlen + |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
286 | usernamelen + hostnamelen + 0x18 + 0x18 + ((flags) ? 0x10 : 0); |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
287 | tmsg = g_malloc0(msglen); |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
288 | passwlen = strlen(passw); |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
289 | |
|
13089
e1ab8bfba211
[gaim-migrate @ 15450]
Mark Doliner <markdoliner@pidgin.im>
parents:
13088
diff
changeset
|
290 | /* type3 message initialization */ |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
291 | tmsg->protocol[0] = 'N'; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
292 | tmsg->protocol[1] = 'T'; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
293 | tmsg->protocol[2] = 'L'; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
294 | tmsg->protocol[3] = 'M'; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
295 | tmsg->protocol[4] = 'S'; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
296 | tmsg->protocol[5] = 'S'; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
297 | tmsg->protocol[6] = 'P'; |
|
26578
41a9f4b89956
I think I'm just going to apply this patch. I don't really see how it
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26577
diff
changeset
|
298 | tmsg->type = GUINT32_TO_LE(0x00000003); |
|
41a9f4b89956
I think I'm just going to apply this patch. I don't really see how it
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26577
diff
changeset
|
299 | tmsg->lm_resp_len1 = tmsg->lm_resp_len2 = GUINT16_TO_LE(0x18); |
|
41a9f4b89956
I think I'm just going to apply this patch. I don't really see how it
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26577
diff
changeset
|
300 | tmsg->lm_resp_off = GUINT32_TO_LE(sizeof(struct type3_message) + domainlen + usernamelen + hostnamelen); |
|
41a9f4b89956
I think I'm just going to apply this patch. I don't really see how it
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26577
diff
changeset
|
301 | tmsg->nt_resp_len1 = tmsg->nt_resp_len2 = GUINT16_TO_LE(0x18); |
|
41a9f4b89956
I think I'm just going to apply this patch. I don't really see how it
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26577
diff
changeset
|
302 | tmsg->nt_resp_off = GUINT32_TO_LE(sizeof(struct type3_message) + domainlen + usernamelen + hostnamelen + 0x18); |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
303 | |
|
26578
41a9f4b89956
I think I'm just going to apply this patch. I don't really see how it
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26577
diff
changeset
|
304 | tmsg->dom_len1 = tmsg->dom_len2 = GUINT16_TO_LE(domainlen); |
|
41a9f4b89956
I think I'm just going to apply this patch. I don't really see how it
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26577
diff
changeset
|
305 | tmsg->dom_off = GUINT32_TO_LE(sizeof(struct type3_message)); |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
306 | |
|
26578
41a9f4b89956
I think I'm just going to apply this patch. I don't really see how it
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26577
diff
changeset
|
307 | tmsg->user_len1 = tmsg->user_len2 = GUINT16_TO_LE(usernamelen); |
|
41a9f4b89956
I think I'm just going to apply this patch. I don't really see how it
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26577
diff
changeset
|
308 | tmsg->user_off = GUINT32_TO_LE(sizeof(struct type3_message) + domainlen); |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
309 | |
|
26578
41a9f4b89956
I think I'm just going to apply this patch. I don't really see how it
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26577
diff
changeset
|
310 | tmsg->host_len1 = tmsg->host_len2 = GUINT16_TO_LE(hostnamelen); |
|
41a9f4b89956
I think I'm just going to apply this patch. I don't really see how it
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26577
diff
changeset
|
311 | tmsg->host_off = GUINT32_TO_LE(sizeof(struct type3_message) + domainlen + usernamelen); |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
312 | |
|
13085
c80913901342
[gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11829
diff
changeset
|
313 | if(flags) { |
|
26578
41a9f4b89956
I think I'm just going to apply this patch. I don't really see how it
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26577
diff
changeset
|
314 | tmsg->sess_off = GUINT32_TO_LE(sizeof(struct type3_message) + domainlen + usernamelen + hostnamelen + 0x18 + 0x18); |
|
41a9f4b89956
I think I'm just going to apply this patch. I don't really see how it
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26577
diff
changeset
|
315 | tmsg->sess_len1 = tmsg->sess_len2 = GUINT16_TO_LE(0x0010); |
|
13085
c80913901342
[gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11829
diff
changeset
|
316 | } |
|
c80913901342
[gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11829
diff
changeset
|
317 | |
|
26578
41a9f4b89956
I think I'm just going to apply this patch. I don't really see how it
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26577
diff
changeset
|
318 | tmsg->flags = GUINT32_TO_LE(0x00008201); |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
319 | |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
320 | tmp = (char *)tmsg + sizeof(struct type3_message); |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
321 | |
|
22596
0854ae660ef4
Further changes to use UTF-16 instead of UCS-2. Also, fix #5167 by making sure that the encoding conversion worked before using the result.
Daniel Atallah <datallah@pidgin.im>
parents:
21695
diff
changeset
|
322 | ucs2le = g_convert(domain, -1, "UTF-16LE", "UTF-8", NULL, NULL, NULL); |
|
0854ae660ef4
Further changes to use UTF-16 instead of UCS-2. Also, fix #5167 by making sure that the encoding conversion worked before using the result.
Daniel Atallah <datallah@pidgin.im>
parents:
21695
diff
changeset
|
323 | if (ucs2le != NULL) { |
|
0854ae660ef4
Further changes to use UTF-16 instead of UCS-2. Also, fix #5167 by making sure that the encoding conversion worked before using the result.
Daniel Atallah <datallah@pidgin.im>
parents:
21695
diff
changeset
|
324 | memcpy(tmp, ucs2le, domainlen); |
|
0854ae660ef4
Further changes to use UTF-16 instead of UCS-2. Also, fix #5167 by making sure that the encoding conversion worked before using the result.
Daniel Atallah <datallah@pidgin.im>
parents:
21695
diff
changeset
|
325 | g_free(ucs2le); |
|
0854ae660ef4
Further changes to use UTF-16 instead of UCS-2. Also, fix #5167 by making sure that the encoding conversion worked before using the result.
Daniel Atallah <datallah@pidgin.im>
parents:
21695
diff
changeset
|
326 | tmp += domainlen; |
|
0854ae660ef4
Further changes to use UTF-16 instead of UCS-2. Also, fix #5167 by making sure that the encoding conversion worked before using the result.
Daniel Atallah <datallah@pidgin.im>
parents:
21695
diff
changeset
|
327 | } else { |
|
0854ae660ef4
Further changes to use UTF-16 instead of UCS-2. Also, fix #5167 by making sure that the encoding conversion worked before using the result.
Daniel Atallah <datallah@pidgin.im>
parents:
21695
diff
changeset
|
328 | purple_debug_info("ntlm", "Unable to encode domain in UTF-16LE.\n"); |
|
0854ae660ef4
Further changes to use UTF-16 instead of UCS-2. Also, fix #5167 by making sure that the encoding conversion worked before using the result.
Daniel Atallah <datallah@pidgin.im>
parents:
21695
diff
changeset
|
329 | } |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
330 | |
|
22596
0854ae660ef4
Further changes to use UTF-16 instead of UCS-2. Also, fix #5167 by making sure that the encoding conversion worked before using the result.
Daniel Atallah <datallah@pidgin.im>
parents:
21695
diff
changeset
|
331 | ucs2le = g_convert(username, -1, "UTF-16LE", "UTF-8", NULL, NULL, NULL); |
|
0854ae660ef4
Further changes to use UTF-16 instead of UCS-2. Also, fix #5167 by making sure that the encoding conversion worked before using the result.
Daniel Atallah <datallah@pidgin.im>
parents:
21695
diff
changeset
|
332 | if (ucs2le != NULL) { |
|
0854ae660ef4
Further changes to use UTF-16 instead of UCS-2. Also, fix #5167 by making sure that the encoding conversion worked before using the result.
Daniel Atallah <datallah@pidgin.im>
parents:
21695
diff
changeset
|
333 | memcpy(tmp, ucs2le, usernamelen); |
|
0854ae660ef4
Further changes to use UTF-16 instead of UCS-2. Also, fix #5167 by making sure that the encoding conversion worked before using the result.
Daniel Atallah <datallah@pidgin.im>
parents:
21695
diff
changeset
|
334 | g_free(ucs2le); |
|
0854ae660ef4
Further changes to use UTF-16 instead of UCS-2. Also, fix #5167 by making sure that the encoding conversion worked before using the result.
Daniel Atallah <datallah@pidgin.im>
parents:
21695
diff
changeset
|
335 | tmp += usernamelen; |
|
0854ae660ef4
Further changes to use UTF-16 instead of UCS-2. Also, fix #5167 by making sure that the encoding conversion worked before using the result.
Daniel Atallah <datallah@pidgin.im>
parents:
21695
diff
changeset
|
336 | } else { |
|
0854ae660ef4
Further changes to use UTF-16 instead of UCS-2. Also, fix #5167 by making sure that the encoding conversion worked before using the result.
Daniel Atallah <datallah@pidgin.im>
parents:
21695
diff
changeset
|
337 | purple_debug_info("ntlm", "Unable to encode username in UTF-16LE.\n"); |
|
0854ae660ef4
Further changes to use UTF-16 instead of UCS-2. Also, fix #5167 by making sure that the encoding conversion worked before using the result.
Daniel Atallah <datallah@pidgin.im>
parents:
21695
diff
changeset
|
338 | } |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
339 | |
|
22596
0854ae660ef4
Further changes to use UTF-16 instead of UCS-2. Also, fix #5167 by making sure that the encoding conversion worked before using the result.
Daniel Atallah <datallah@pidgin.im>
parents:
21695
diff
changeset
|
340 | ucs2le = g_convert(hostname, -1, "UTF-16LE", "UTF-8", NULL, NULL, NULL); |
|
0854ae660ef4
Further changes to use UTF-16 instead of UCS-2. Also, fix #5167 by making sure that the encoding conversion worked before using the result.
Daniel Atallah <datallah@pidgin.im>
parents:
21695
diff
changeset
|
341 | if (ucs2le != NULL) { |
|
0854ae660ef4
Further changes to use UTF-16 instead of UCS-2. Also, fix #5167 by making sure that the encoding conversion worked before using the result.
Daniel Atallah <datallah@pidgin.im>
parents:
21695
diff
changeset
|
342 | memcpy(tmp, ucs2le, hostnamelen); |
|
0854ae660ef4
Further changes to use UTF-16 instead of UCS-2. Also, fix #5167 by making sure that the encoding conversion worked before using the result.
Daniel Atallah <datallah@pidgin.im>
parents:
21695
diff
changeset
|
343 | g_free(ucs2le); |
|
0854ae660ef4
Further changes to use UTF-16 instead of UCS-2. Also, fix #5167 by making sure that the encoding conversion worked before using the result.
Daniel Atallah <datallah@pidgin.im>
parents:
21695
diff
changeset
|
344 | tmp += hostnamelen; |
|
0854ae660ef4
Further changes to use UTF-16 instead of UCS-2. Also, fix #5167 by making sure that the encoding conversion worked before using the result.
Daniel Atallah <datallah@pidgin.im>
parents:
21695
diff
changeset
|
345 | } else { |
|
0854ae660ef4
Further changes to use UTF-16 instead of UCS-2. Also, fix #5167 by making sure that the encoding conversion worked before using the result.
Daniel Atallah <datallah@pidgin.im>
parents:
21695
diff
changeset
|
346 | purple_debug_info("ntlm", "Unable to encode hostname in UTF-16LE.\n"); |
|
0854ae660ef4
Further changes to use UTF-16 instead of UCS-2. Also, fix #5167 by making sure that the encoding conversion worked before using the result.
Daniel Atallah <datallah@pidgin.im>
parents:
21695
diff
changeset
|
347 | } |
|
13089
e1ab8bfba211
[gaim-migrate @ 15450]
Mark Doliner <markdoliner@pidgin.im>
parents:
13088
diff
changeset
|
348 | |
|
13085
c80913901342
[gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11829
diff
changeset
|
349 | /* LM */ |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
350 | if (passwlen > 14) |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
351 | passwlen = 14; |
|
13085
c80913901342
[gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11829
diff
changeset
|
352 | |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
353 | for (idx = 0; idx < passwlen; idx++) |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
354 | lm_pw[idx] = g_ascii_toupper(passw[idx]); |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
355 | for (; idx < 14; idx++) |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
356 | lm_pw[idx] = 0; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
357 | |
|
13701
5f9ab32a6306
[gaim-migrate @ 16102]
Mark Doliner <markdoliner@pidgin.im>
parents:
13700
diff
changeset
|
358 | setup_des_key((unsigned char*)lm_pw, key); |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
359 | des_ecb_encrypt(magic, lm_hpw, key); |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
360 | |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
361 | setup_des_key((unsigned char*)(lm_pw + 7), key); |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
362 | des_ecb_encrypt(magic, lm_hpw + 8, key); |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
363 | |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
364 | memset(lm_hpw + 16, 0, 5); |
|
13700
ad7bca3b4240
[gaim-migrate @ 16101]
Mark Doliner <markdoliner@pidgin.im>
parents:
13679
diff
changeset
|
365 | calc_resp(lm_hpw, nonce, lm_resp); |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
366 | memcpy(tmp, lm_resp, 0x18); |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
367 | tmp += 0x18; |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
368 | |
|
13085
c80913901342
[gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11829
diff
changeset
|
369 | /* NTLM */ |
|
22596
0854ae660ef4
Further changes to use UTF-16 instead of UCS-2. Also, fix #5167 by making sure that the encoding conversion worked before using the result.
Daniel Atallah <datallah@pidgin.im>
parents:
21695
diff
changeset
|
370 | /* Convert the password to UTF-16LE */ |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
371 | lennt = strlen(passw); |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
372 | for (idx = 0; idx < lennt; idx++) |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
373 | { |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
374 | nt_pw[2 * idx] = passw[idx]; |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
375 | nt_pw[2 * idx + 1] = 0; |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
376 | } |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
377 | |
| 15884 | 378 | cipher = purple_ciphers_find_cipher("md4"); |
| 379 | context = purple_cipher_context_new(cipher, NULL); | |
| 380 | purple_cipher_context_append(context, (guint8 *)nt_pw, 2 * lennt); | |
| 381 | purple_cipher_context_digest(context, 21, nt_hpw, NULL); | |
| 382 | purple_cipher_context_destroy(context); | |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
383 | |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
384 | memset(nt_hpw + 16, 0, 5); |
|
13700
ad7bca3b4240
[gaim-migrate @ 16101]
Mark Doliner <markdoliner@pidgin.im>
parents:
13679
diff
changeset
|
385 | calc_resp(nt_hpw, nonce, nt_resp); |
|
13085
c80913901342
[gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11829
diff
changeset
|
386 | memcpy(tmp, nt_resp, 0x18); |
|
c80913901342
[gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11829
diff
changeset
|
387 | tmp += 0x18; |
|
c80913901342
[gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11829
diff
changeset
|
388 | |
|
c80913901342
[gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11829
diff
changeset
|
389 | /* LCS Stuff */ |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
390 | if (flags) { |
|
26578
41a9f4b89956
I think I'm just going to apply this patch. I don't really see how it
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26577
diff
changeset
|
391 | tmsg->flags = GUINT32_TO_LE(0x409082d4); |
| 33565 | 392 | gensesskey(sesskey); |
|
13085
c80913901342
[gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11829
diff
changeset
|
393 | memcpy(tmp, sesskey, 0x10); |
|
c80913901342
[gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11829
diff
changeset
|
394 | } |
|
c80913901342
[gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11829
diff
changeset
|
395 | |
|
c80913901342
[gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11829
diff
changeset
|
396 | /*tmsg->flags2 = 0x0a280105; |
|
c80913901342
[gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11829
diff
changeset
|
397 | tmsg->flags3 = 0x0f000000;*/ |
|
13089
e1ab8bfba211
[gaim-migrate @ 15450]
Mark Doliner <markdoliner@pidgin.im>
parents:
13088
diff
changeset
|
398 | |
| 15884 | 399 | tmp = purple_base64_encode((guchar *)tmsg, msglen); |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
400 | g_free(tmsg); |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
401 | |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
402 | return tmp; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
403 | } |