Fri, 14 Nov 2008 06:45:16 +0000
propagate from branch 'im.pidgin.pidgin' (head cc1cc6c659d3878f285641153244b04df2f15eb7)
to branch 'im.pidgin.pidgin.next.minor' (head c195415b5fdfa94009870ddc8e23cf4a653ae351)
|
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 | |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
27 | #include <glib.h> |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
28 | #include <stdlib.h> |
|
18265
9f26190d7f46
Move the define in internal.h instead.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
15884
diff
changeset
|
29 | #include "internal.h" |
|
9f26190d7f46
Move the define in internal.h instead.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
15884
diff
changeset
|
30 | |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
31 | #include "util.h" |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
32 | #include "ntlm.h" |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
33 | #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
|
34 | #include "debug.h" |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
35 | #include <string.h> |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
36 | |
|
13085
c80913901342
[gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11829
diff
changeset
|
37 | #define NTLM_NEGOTIATE_NTLM2_KEY 0x00080000 |
|
c80913901342
[gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11829
diff
changeset
|
38 | |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
39 | struct type1_message { |
|
11829
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
40 | 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
|
41 | guint32 type; /* 0x00000001 */ |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
42 | guint32 flags; /* 0x0000b203 */ |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
43 | |
|
11829
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
44 | short dom_len1; /* domain string length */ |
|
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
45 | short dom_len2; /* domain string length */ |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
46 | guint32 dom_off; /* domain string offset */ |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
47 | |
|
11829
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
48 | short host_len1; /* host string length */ |
|
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
49 | short host_len2; /* host string length */ |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
50 | guint32 host_off; /* host string offset (always 0x00000020) */ |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
51 | |
|
11829
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
52 | #if 0 |
|
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
53 | guint8 host[*]; /* host string (ASCII) */ |
|
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
54 | guint8 dom[*]; /* domain string (ASCII) */ |
|
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
55 | #endif |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
56 | }; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
57 | |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
58 | struct type2_message { |
|
11829
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
59 | 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
|
60 | guint32 type; /* 0x00000002 */ |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
61 | |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
62 | short msg_len1; /* target name length */ |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
63 | short msg_len2; /* target name length */ |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
64 | guint32 msg_off; /* target name offset (always 0x00000048) */ |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
65 | |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
66 | guint32 flags; /* 0x00008201 */ |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
67 | |
|
11829
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
68 | guint8 nonce[8]; /* nonce */ |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
69 | guint8 context[8]; |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
70 | }; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
71 | |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
72 | struct type3_message { |
|
11829
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
73 | 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
|
74 | guint32 type; /* 0x00000003 */ |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
75 | |
|
11829
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
76 | short lm_resp_len1; /* LanManager response length (always 0x18)*/ |
|
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
77 | short lm_resp_len2; /* LanManager response length (always 0x18)*/ |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
78 | guint32 lm_resp_off; /* LanManager response offset */ |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
79 | |
|
11829
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
80 | short nt_resp_len1; /* NT response length (always 0x18) */ |
|
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
81 | short nt_resp_len2; /* NT response length (always 0x18) */ |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
82 | guint32 nt_resp_off; /* NT response offset */ |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
83 | |
|
11829
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
84 | short dom_len1; /* domain string length */ |
|
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
85 | short dom_len2; /* domain string length */ |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
86 | guint32 dom_off; /* domain string offset (always 0x00000040) */ |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
87 | |
|
11829
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
88 | short user_len1; /* username string length */ |
|
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
89 | short user_len2; /* username string length */ |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
90 | guint32 user_off; /* username string offset */ |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
91 | |
|
11829
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
92 | short host_len1; /* host string length */ |
|
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
93 | short host_len2; /* host string length */ |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
94 | guint32 host_off; /* host string offset */ |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
95 | |
|
13085
c80913901342
[gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11829
diff
changeset
|
96 | short sess_len1; |
|
c80913901342
[gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11829
diff
changeset
|
97 | short sess_len2; |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
98 | guint32 sess_off; /* message length */ |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
99 | |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
100 | guint32 flags; /* 0x00008201 */ |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
101 | /* guint32 flags2; */ /* unknown, used in windows messenger */ |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
102 | /* guint32 flags3; */ |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
103 | |
|
11829
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
104 | #if 0 |
|
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
105 | guint8 dom[*]; /* domain string (unicode UTF-16LE) */ |
|
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
106 | guint8 user[*]; /* username string (unicode UTF-16LE) */ |
|
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
107 | guint8 host[*]; /* host string (unicode UTF-16LE) */ |
|
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
108 | guint8 lm_resp[*]; /* LanManager response */ |
|
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
109 | guint8 nt_resp[*]; /* NT response */ |
|
8d89f3c00831
[gaim-migrate @ 14120]
Richard Laager <rlaager@pidgin.im>
parents:
11586
diff
changeset
|
110 | #endif |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
111 | }; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
112 | |
|
13701
5f9ab32a6306
[gaim-migrate @ 16102]
Mark Doliner <markdoliner@pidgin.im>
parents:
13700
diff
changeset
|
113 | /* TODO: Will this work on both little-endian and big-endian machines? */ |
|
13679
77a58c7c93af
[gaim-migrate @ 16079]
Mark Doliner <markdoliner@pidgin.im>
parents:
13089
diff
changeset
|
114 | gchar * |
| 15884 | 115 | purple_ntlm_gen_type1(const gchar *hostname, const gchar *domain) |
|
13679
77a58c7c93af
[gaim-migrate @ 16079]
Mark Doliner <markdoliner@pidgin.im>
parents:
13089
diff
changeset
|
116 | { |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
117 | int hostnamelen; |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
118 | int domainlen; |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
119 | unsigned char *msg; |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
120 | struct type1_message *tmsg; |
|
13706
0490d9ee869a
[gaim-migrate @ 16107]
Mark Doliner <markdoliner@pidgin.im>
parents:
13701
diff
changeset
|
121 | gchar *tmp; |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
122 | |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
123 | hostnamelen = strlen(hostname); |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
124 | domainlen = strlen(domain); |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
125 | msg = g_malloc0(sizeof(struct type1_message) + hostnamelen + domainlen); |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
126 | tmsg = (struct type1_message*)msg; |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
127 | tmsg->protocol[0] = 'N'; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
128 | tmsg->protocol[1] = 'T'; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
129 | tmsg->protocol[2] = 'L'; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
130 | tmsg->protocol[3] = 'M'; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
131 | tmsg->protocol[4] = 'S'; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
132 | tmsg->protocol[5] = 'S'; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
133 | tmsg->protocol[6] = 'P'; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
134 | tmsg->protocol[7] = '\0'; |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
135 | tmsg->type = 0x00000001; |
|
19985
b3d60f27292e
This is parts 1 and 2 of patch #2910 from Vladimir (thecrux) to improve NTLM proxy handling. Specifically, it specifies that we're using Unicode strings and uses the hostname of the local machine instead of incorrectly using the proxy server's hostname for authentication. References #2910.
Daniel Atallah <datallah@pidgin.im>
parents:
19859
diff
changeset
|
136 | tmsg->flags = 0x0000b203; |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
137 | tmsg->dom_len1 = tmsg->dom_len2 = domainlen; |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
138 | tmsg->dom_off = sizeof(struct type1_message) + hostnamelen; |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
139 | tmsg->host_len1 = tmsg->host_len2 = hostnamelen; |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
140 | tmsg->host_off = sizeof(struct type1_message); |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
141 | memcpy(msg + tmsg->host_off, hostname, hostnamelen); |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
142 | memcpy(msg + tmsg->dom_off, domain, domainlen); |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
143 | |
| 15884 | 144 | 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
|
145 | g_free(msg); |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
146 | |
|
13706
0490d9ee869a
[gaim-migrate @ 16107]
Mark Doliner <markdoliner@pidgin.im>
parents:
13701
diff
changeset
|
147 | return tmp; |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
148 | } |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
149 | |
|
13700
ad7bca3b4240
[gaim-migrate @ 16101]
Mark Doliner <markdoliner@pidgin.im>
parents:
13679
diff
changeset
|
150 | guint8 * |
| 15884 | 151 | purple_ntlm_parse_type2(const gchar *type2, guint32 *flags) |
|
13679
77a58c7c93af
[gaim-migrate @ 16079]
Mark Doliner <markdoliner@pidgin.im>
parents:
13089
diff
changeset
|
152 | { |
| 11586 | 153 | gsize retlen; |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
154 | struct type2_message *tmsg; |
|
13700
ad7bca3b4240
[gaim-migrate @ 16101]
Mark Doliner <markdoliner@pidgin.im>
parents:
13679
diff
changeset
|
155 | static guint8 nonce[8]; |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
156 | |
| 15884 | 157 | tmsg = (struct type2_message*)purple_base64_decode(type2, &retlen); |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
158 | memcpy(nonce, tmsg->nonce, 8); |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
159 | if (flags != NULL) |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
160 | *flags = tmsg->flags; |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
161 | g_free(tmsg); |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
162 | |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
163 | return nonce; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
164 | } |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
165 | |
|
13701
5f9ab32a6306
[gaim-migrate @ 16102]
Mark Doliner <markdoliner@pidgin.im>
parents:
13700
diff
changeset
|
166 | /** |
|
5f9ab32a6306
[gaim-migrate @ 16102]
Mark Doliner <markdoliner@pidgin.im>
parents:
13700
diff
changeset
|
167 | * 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
|
168 | * a parity bit after every 7th bit. |
|
5f9ab32a6306
[gaim-migrate @ 16102]
Mark Doliner <markdoliner@pidgin.im>
parents:
13700
diff
changeset
|
169 | */ |
|
13679
77a58c7c93af
[gaim-migrate @ 16079]
Mark Doliner <markdoliner@pidgin.im>
parents:
13089
diff
changeset
|
170 | static void |
|
13701
5f9ab32a6306
[gaim-migrate @ 16102]
Mark Doliner <markdoliner@pidgin.im>
parents:
13700
diff
changeset
|
171 | setup_des_key(const guint8 key_56[], guint8 *key) |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
172 | { |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
173 | key[0] = key_56[0]; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
174 | key[1] = ((key_56[0] << 7) & 0xFF) | (key_56[1] >> 1); |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
175 | key[2] = ((key_56[1] << 6) & 0xFF) | (key_56[2] >> 2); |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
176 | key[3] = ((key_56[2] << 5) & 0xFF) | (key_56[3] >> 3); |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
177 | key[4] = ((key_56[3] << 4) & 0xFF) | (key_56[4] >> 4); |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
178 | key[5] = ((key_56[4] << 3) & 0xFF) | (key_56[5] >> 5); |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
179 | key[6] = ((key_56[5] << 2) & 0xFF) | (key_56[6] >> 6); |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
180 | key[7] = (key_56[6] << 1) & 0xFF; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
181 | } |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
182 | |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
183 | /* |
| 15884 | 184 | * helper function for purple cipher.c |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
185 | */ |
|
13679
77a58c7c93af
[gaim-migrate @ 16079]
Mark Doliner <markdoliner@pidgin.im>
parents:
13089
diff
changeset
|
186 | static void |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
187 | 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
|
188 | { |
| 15884 | 189 | PurpleCipher *cipher; |
| 190 | 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
|
191 | size_t outlen; |
|
13679
77a58c7c93af
[gaim-migrate @ 16079]
Mark Doliner <markdoliner@pidgin.im>
parents:
13089
diff
changeset
|
192 | |
| 15884 | 193 | cipher = purple_ciphers_find_cipher("des"); |
| 194 | context = purple_cipher_context_new(cipher, NULL); | |
| 195 | purple_cipher_context_set_key(context, key); | |
| 196 | purple_cipher_context_encrypt(context, plaintext, 8, result, &outlen); | |
| 197 | purple_cipher_context_destroy(context); | |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
198 | } |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
199 | |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
200 | /* |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
201 | * 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
|
202 | * 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
|
203 | * bytes are stored in the results array. |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
204 | */ |
|
13679
77a58c7c93af
[gaim-migrate @ 16079]
Mark Doliner <markdoliner@pidgin.im>
parents:
13089
diff
changeset
|
205 | static void |
|
13701
5f9ab32a6306
[gaim-migrate @ 16102]
Mark Doliner <markdoliner@pidgin.im>
parents:
13700
diff
changeset
|
206 | calc_resp(guint8 *keys, const guint8 *plaintext, unsigned char *results) |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
207 | { |
|
13701
5f9ab32a6306
[gaim-migrate @ 16102]
Mark Doliner <markdoliner@pidgin.im>
parents:
13700
diff
changeset
|
208 | guint8 key[8]; |
|
5f9ab32a6306
[gaim-migrate @ 16102]
Mark Doliner <markdoliner@pidgin.im>
parents:
13700
diff
changeset
|
209 | setup_des_key(keys, key); |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
210 | des_ecb_encrypt(plaintext, results, key); |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
211 | |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
212 | setup_des_key(keys + 7, key); |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
213 | des_ecb_encrypt(plaintext, results + 8, key); |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
214 | |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
215 | setup_des_key(keys + 14, key); |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
216 | des_ecb_encrypt(plaintext, results + 16, key); |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
217 | } |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
218 | |
|
13679
77a58c7c93af
[gaim-migrate @ 16079]
Mark Doliner <markdoliner@pidgin.im>
parents:
13089
diff
changeset
|
219 | static void |
|
77a58c7c93af
[gaim-migrate @ 16079]
Mark Doliner <markdoliner@pidgin.im>
parents:
13089
diff
changeset
|
220 | gensesskey(char *buffer, const char *oldkey) |
|
77a58c7c93af
[gaim-migrate @ 16079]
Mark Doliner <markdoliner@pidgin.im>
parents:
13089
diff
changeset
|
221 | { |
|
13088
6254abd3dec1
[gaim-migrate @ 15449]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13085
diff
changeset
|
222 | int i = 0; |
|
6254abd3dec1
[gaim-migrate @ 15449]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13085
diff
changeset
|
223 | if(oldkey == NULL) { |
|
6254abd3dec1
[gaim-migrate @ 15449]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13085
diff
changeset
|
224 | for(i=0; i<16; i++) { |
|
6254abd3dec1
[gaim-migrate @ 15449]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13085
diff
changeset
|
225 | buffer[i] = (char)(rand() & 0xff); |
|
6254abd3dec1
[gaim-migrate @ 15449]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13085
diff
changeset
|
226 | } |
|
6254abd3dec1
[gaim-migrate @ 15449]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13085
diff
changeset
|
227 | } else { |
|
6254abd3dec1
[gaim-migrate @ 15449]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13085
diff
changeset
|
228 | memcpy(buffer, oldkey, 16); |
|
6254abd3dec1
[gaim-migrate @ 15449]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13085
diff
changeset
|
229 | } |
|
6254abd3dec1
[gaim-migrate @ 15449]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13085
diff
changeset
|
230 | } |
|
13085
c80913901342
[gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11829
diff
changeset
|
231 | |
|
13089
e1ab8bfba211
[gaim-migrate @ 15450]
Mark Doliner <markdoliner@pidgin.im>
parents:
13088
diff
changeset
|
232 | gchar * |
| 15884 | 233 | 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
|
234 | { |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
235 | char lm_pw[14]; |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
236 | unsigned char lm_hpw[21]; |
|
13088
6254abd3dec1
[gaim-migrate @ 15449]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13085
diff
changeset
|
237 | char sesskey[16]; |
|
13701
5f9ab32a6306
[gaim-migrate @ 16102]
Mark Doliner <markdoliner@pidgin.im>
parents:
13700
diff
changeset
|
238 | guint8 key[8]; |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
239 | int domainlen; |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
240 | int usernamelen; |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
241 | int hostnamelen; |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
242 | int msglen; |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
243 | struct type3_message *tmsg; |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
244 | int passwlen, lennt; |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
245 | unsigned char lm_resp[24], nt_resp[24]; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
246 | unsigned char magic[] = { 0x4B, 0x47, 0x53, 0x21, 0x40, 0x23, 0x24, 0x25 }; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
247 | unsigned char nt_hpw[21]; |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
248 | char nt_pw[128]; |
| 15884 | 249 | PurpleCipher *cipher; |
| 250 | PurpleCipherContext *context; | |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
251 | char *tmp; |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
252 | int idx; |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
253 | gchar *ucs2le; |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
254 | |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
255 | domainlen = strlen(domain) * 2; |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
256 | usernamelen = strlen(username) * 2; |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
257 | hostnamelen = strlen(hostname) * 2; |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
258 | msglen = sizeof(struct type3_message) + domainlen + |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
259 | usernamelen + hostnamelen + 0x18 + 0x18 + ((flags) ? 0x10 : 0); |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
260 | tmsg = g_malloc0(msglen); |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
261 | passwlen = strlen(passw); |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
262 | |
|
13089
e1ab8bfba211
[gaim-migrate @ 15450]
Mark Doliner <markdoliner@pidgin.im>
parents:
13088
diff
changeset
|
263 | /* type3 message initialization */ |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
264 | tmsg->protocol[0] = 'N'; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
265 | tmsg->protocol[1] = 'T'; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
266 | tmsg->protocol[2] = 'L'; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
267 | tmsg->protocol[3] = 'M'; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
268 | tmsg->protocol[4] = 'S'; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
269 | tmsg->protocol[5] = 'S'; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
270 | tmsg->protocol[6] = 'P'; |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
271 | tmsg->type = 0x00000003; |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
272 | tmsg->lm_resp_len1 = tmsg->lm_resp_len2 = 0x18; |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
273 | tmsg->lm_resp_off = sizeof(struct type3_message) + domainlen + usernamelen + hostnamelen; |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
274 | tmsg->nt_resp_len1 = tmsg->nt_resp_len2 = 0x18; |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
275 | tmsg->nt_resp_off = sizeof(struct type3_message) + domainlen + usernamelen + hostnamelen + 0x18; |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
276 | |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
277 | tmsg->dom_len1 = tmsg->dom_len2 = domainlen; |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
278 | tmsg->dom_off = sizeof(struct type3_message); |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
279 | |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
280 | tmsg->user_len1 = tmsg->user_len2 = usernamelen; |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
281 | tmsg->user_off = sizeof(struct type3_message) + domainlen; |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
282 | |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
283 | tmsg->host_len1 = tmsg->host_len2 = hostnamelen; |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
284 | tmsg->host_off = sizeof(struct type3_message) + domainlen + usernamelen; |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
285 | |
|
13085
c80913901342
[gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11829
diff
changeset
|
286 | if(flags) { |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
287 | tmsg->sess_off = sizeof(struct type3_message) + domainlen + usernamelen + hostnamelen + 0x18 + 0x18; |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
288 | tmsg->sess_len1 = tmsg->sess_len2 = 0x0010; |
|
13085
c80913901342
[gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11829
diff
changeset
|
289 | } |
|
c80913901342
[gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11829
diff
changeset
|
290 | |
|
19985
b3d60f27292e
This is parts 1 and 2 of patch #2910 from Vladimir (thecrux) to improve NTLM proxy handling. Specifically, it specifies that we're using Unicode strings and uses the hostname of the local machine instead of incorrectly using the proxy server's hostname for authentication. References #2910.
Daniel Atallah <datallah@pidgin.im>
parents:
19859
diff
changeset
|
291 | tmsg->flags = 0x00008201; |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
292 | |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
293 | tmp = (char *)tmsg + sizeof(struct type3_message); |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
294 | |
|
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
|
295 | 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
|
296 | 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
|
297 | 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
|
298 | 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
|
299 | 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
|
300 | } 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
|
301 | 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
|
302 | } |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
303 | |
|
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
|
304 | 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
|
305 | 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
|
306 | 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
|
307 | 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
|
308 | 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
|
309 | } 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
|
310 | 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
|
311 | } |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
312 | |
|
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
|
313 | 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
|
314 | 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
|
315 | 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
|
316 | 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
|
317 | 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
|
318 | } 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
|
319 | 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
|
320 | } |
|
13089
e1ab8bfba211
[gaim-migrate @ 15450]
Mark Doliner <markdoliner@pidgin.im>
parents:
13088
diff
changeset
|
321 | |
|
13085
c80913901342
[gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11829
diff
changeset
|
322 | /* LM */ |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
323 | if (passwlen > 14) |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
324 | passwlen = 14; |
|
13085
c80913901342
[gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11829
diff
changeset
|
325 | |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
326 | for (idx = 0; idx < passwlen; idx++) |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
327 | lm_pw[idx] = g_ascii_toupper(passw[idx]); |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
328 | for (; idx < 14; idx++) |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
329 | lm_pw[idx] = 0; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
330 | |
|
13701
5f9ab32a6306
[gaim-migrate @ 16102]
Mark Doliner <markdoliner@pidgin.im>
parents:
13700
diff
changeset
|
331 | setup_des_key((unsigned char*)lm_pw, key); |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
332 | des_ecb_encrypt(magic, lm_hpw, key); |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
333 | |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
334 | setup_des_key((unsigned char*)(lm_pw + 7), key); |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
335 | des_ecb_encrypt(magic, lm_hpw + 8, key); |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
336 | |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
337 | memset(lm_hpw + 16, 0, 5); |
|
13700
ad7bca3b4240
[gaim-migrate @ 16101]
Mark Doliner <markdoliner@pidgin.im>
parents:
13679
diff
changeset
|
338 | calc_resp(lm_hpw, nonce, lm_resp); |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
339 | memcpy(tmp, lm_resp, 0x18); |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
340 | tmp += 0x18; |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
341 | |
|
13085
c80913901342
[gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11829
diff
changeset
|
342 | /* 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
|
343 | /* Convert the password to UTF-16LE */ |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
344 | lennt = strlen(passw); |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
345 | for (idx = 0; idx < lennt; idx++) |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
346 | { |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
347 | nt_pw[2 * idx] = passw[idx]; |
|
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
348 | nt_pw[2 * idx + 1] = 0; |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
349 | } |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
350 | |
| 15884 | 351 | cipher = purple_ciphers_find_cipher("md4"); |
| 352 | context = purple_cipher_context_new(cipher, NULL); | |
| 353 | purple_cipher_context_append(context, (guint8 *)nt_pw, 2 * lennt); | |
| 354 | purple_cipher_context_digest(context, 21, nt_hpw, NULL); | |
| 355 | purple_cipher_context_destroy(context); | |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
356 | |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
357 | memset(nt_hpw + 16, 0, 5); |
|
13700
ad7bca3b4240
[gaim-migrate @ 16101]
Mark Doliner <markdoliner@pidgin.im>
parents:
13679
diff
changeset
|
358 | calc_resp(nt_hpw, nonce, nt_resp); |
|
13085
c80913901342
[gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11829
diff
changeset
|
359 | memcpy(tmp, nt_resp, 0x18); |
|
c80913901342
[gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11829
diff
changeset
|
360 | tmp += 0x18; |
|
c80913901342
[gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11829
diff
changeset
|
361 | |
|
c80913901342
[gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11829
diff
changeset
|
362 | /* LCS Stuff */ |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
363 | if (flags) { |
|
13085
c80913901342
[gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11829
diff
changeset
|
364 | tmsg->flags = 0x409082d4; |
|
13088
6254abd3dec1
[gaim-migrate @ 15449]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
13085
diff
changeset
|
365 | gensesskey(sesskey, NULL); |
|
13085
c80913901342
[gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11829
diff
changeset
|
366 | memcpy(tmp, sesskey, 0x10); |
|
c80913901342
[gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11829
diff
changeset
|
367 | } |
|
c80913901342
[gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11829
diff
changeset
|
368 | |
|
c80913901342
[gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11829
diff
changeset
|
369 | /*tmsg->flags2 = 0x0a280105; |
|
c80913901342
[gaim-migrate @ 15446]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11829
diff
changeset
|
370 | tmsg->flags3 = 0x0f000000;*/ |
|
13089
e1ab8bfba211
[gaim-migrate @ 15450]
Mark Doliner <markdoliner@pidgin.im>
parents:
13088
diff
changeset
|
371 | |
| 15884 | 372 | tmp = purple_base64_encode((guchar *)tmsg, msglen); |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
373 | g_free(tmsg); |
|
13725
b14241732980
[gaim-migrate @ 16132]
Mark Doliner <markdoliner@pidgin.im>
parents:
13706
diff
changeset
|
374 | |
|
11375
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
375 | return tmp; |
|
765ec911f25d
[gaim-migrate @ 13601]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
376 | } |