2 * Copyright (c) 1997 Kungliga Tekniska Högskolan
3 * (Royal Institute of Technology, Stockholm, Sweden).
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 * notice, this list of conditions and the following disclaimer in the
15 * documentation and/or other materials provided with the distribution.
17 * 3. All advertising materials mentioning features or use of this software
18 * must display the following acknowledgement:
19 * This product includes software developed by Kungliga Tekniska
20 * Högskolan and its contributors.
22 * 4. Neither the name of the Institute nor the names of its contributors
23 * may be used to endorse or promote products derived from this software
24 * without specific prior written permission.
26 * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
27 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
28 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
29 * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
30 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
31 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
32 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
33 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
34 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
35 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
44 send_priv(krb5_context context
, krb5_auth_context ac
,
45 krb5_data
*data
, int fd
)
49 unsigned char net_len
[4];
51 ret
= krb5_mk_priv (context
,
59 net_len
[0] = (packet
.length
>> 24) & 0xff;
60 net_len
[1] = (packet
.length
>> 16) & 0xff;
61 net_len
[2] = (packet
.length
>> 8) & 0xff;
62 net_len
[3] = packet
.length
& 0xff;
64 if (krb5_net_write (context
, &fd
, net_len
, 4) != 4)
66 else if (krb5_net_write (context
, &fd
,
67 packet
.data
, packet
.length
) != packet
.length
)
69 krb5_data_free(&packet
);
74 recv_priv(krb5_context context
, krb5_auth_context ac
, int fd
, krb5_data
*out
)
82 if(krb5_net_read(context
, &fd
, tmp
, 4) != 4)
84 len
= (tmp
[0] << 24) | (tmp
[1] << 16) | (tmp
[2] << 8) | tmp
[3];
86 if(krb5_net_read(context
, &fd
, buf
, len
) != len
)
90 ret
= krb5_rd_priv(context
, ac
, &data
, out
, NULL
);
97 send_clear(krb5_context context
, int fd
, krb5_data data
)
102 tmp
[0] = (data
.length
>> 24) & 0xff;
103 tmp
[1] = (data
.length
>> 16) & 0xff;
104 tmp
[2] = (data
.length
>> 8) & 0xff;
105 tmp
[3] = (data
.length
>> 0) & 0xff;
106 len
= write(fd
, tmp
, sizeof(tmp
));
107 if(len
== sizeof(tmp
))
108 len
= write(fd
, data
.data
, data
.length
);
109 if(len
!= data
.length
)
115 recv_clear(krb5_context context
, int fd
, krb5_data
*out
)
117 unsigned char tmp
[4];
119 len
= read(fd
, tmp
, sizeof(tmp
));
121 memset(out
, 0, sizeof(*out
));
125 if(len
== sizeof(tmp
)){
126 len
= (tmp
[0] << 24) | (tmp
[1] << 16) | (tmp
[2] << 8) | tmp
[3];
127 krb5_data_alloc(out
, len
);
128 len
= read(fd
, out
->data
, out
->length
);
130 if(len
!= out
->length
)