Mercurial > pidgin
annotate src/protocols/zephyr/ZFmtAuth.c @ 13967:99b9b58b19dd
[gaim-migrate @ 16523]
Fix a crazy MSN crash. Basically it's possible to have more than one
slplink associated with a given switchboard, but our code did not
allow for that. I think it happens when you're in a multi-user
chat and you do stuff with multiple users that involves slplinks.
Like maybe file transfer and buddy icon related stuff.
Tracking this down took an ungodly amount of time, but thanks to
Meebo for letting me do it :-)
committer: Tailor Script <tailor@pidgin.im>
author | Mark Doliner <mark@kingant.net> |
---|---|
date | Thu, 20 Jul 2006 07:31:15 +0000 |
parents | 64895571248f |
children |
rev | line source |
---|---|
2086 | 1 /* This file is part of the Project Athena Zephyr Notification System. |
2 * It contains source for the ZFormatAuthenticNotice function. | |
3 * | |
4 * Created by: Robert French | |
11105
64895571248f
[gaim-migrate @ 13153]
Richard Laager <rlaager@wiktel.com>
parents:
8792
diff
changeset
|
5 |
2086 | 6 * Copyright (c) 1987,1988 by the Massachusetts Institute of Technology. |
7 * For copying and distribution information, see the file | |
8 * "mit-copyright.h". | |
9 */ | |
10 | |
8792
43d6c08d7e96
[gaim-migrate @ 9554]
Christian Hammond <chipx86@chipx86.com>
parents:
8354
diff
changeset
|
11 #include "internal.h" |
2086 | 12 |
13 #ifdef ZEPHYR_USES_KERBEROS | |
14 Code_t ZFormatAuthenticNotice(notice, buffer, buffer_len, len, session) | |
15 ZNotice_t *notice; | |
16 register char *buffer; | |
17 register int buffer_len; | |
18 int *len; | |
19 C_Block session; | |
20 { | |
21 ZNotice_t newnotice; | |
22 char *ptr; | |
23 int retval, hdrlen; | |
24 | |
25 newnotice = *notice; | |
26 newnotice.z_auth = 1; | |
27 newnotice.z_authent_len = 0; | |
28 newnotice.z_ascii_authent = ""; | |
29 | |
30 if ((retval = Z_FormatRawHeader(&newnotice, buffer, buffer_len, | |
31 &hdrlen, &ptr, NULL)) != ZERR_NONE) | |
32 return (retval); | |
33 | |
34 #ifdef NOENCRYPTION | |
35 newnotice.z_checksum = 0; | |
36 #else | |
37 newnotice.z_checksum = | |
8354 | 38 (ZChecksum_t)des_quad_cksum(buffer, NULL, ptr - buffer, 0, (C_Block*)session); |
2086 | 39 #endif |
40 if ((retval = Z_FormatRawHeader(&newnotice, buffer, buffer_len, | |
41 &hdrlen, NULL, NULL)) != ZERR_NONE) | |
42 return (retval); | |
43 | |
44 ptr = buffer+hdrlen; | |
45 | |
46 if (newnotice.z_message_len+hdrlen > buffer_len) | |
47 return (ZERR_PKTLEN); | |
48 | |
49 (void) memcpy(ptr, newnotice.z_message, newnotice.z_message_len); | |
50 | |
51 *len = hdrlen+newnotice.z_message_len; | |
52 | |
53 if (*len > Z_MAXPKTLEN) | |
54 return (ZERR_PKTLEN); | |
55 | |
56 return (ZERR_NONE); | |
57 } | |
58 #endif |