Send version 5 TCP-reply as length+data.

git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@4084 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
Johan Danielsson
1997-12-04 02:38:04 +00:00
parent cca15aae65
commit 9a615fee02

View File

@@ -232,6 +232,7 @@ static int
process_request(unsigned char *buf, process_request(unsigned char *buf,
size_t len, size_t len,
krb5_data *reply, krb5_data *reply,
int *sendlength,
const char *from, const char *from,
struct sockaddr *addr) struct sockaddr *addr)
{ {
@@ -253,9 +254,10 @@ process_request(unsigned char *buf,
return ret; return ret;
} }
#ifdef KRB4 #ifdef KRB4
else if(maybe_version4(buf, len)) else if(maybe_version4(buf, len)){
*sendlength = 0; /* elbitapmoc sdrawkcab XXX */
do_version4(buf, len, reply, from, (struct sockaddr_in*)addr); do_version4(buf, len, reply, from, (struct sockaddr_in*)addr);
else if(decode_Ticket(buf, len, &ticket, &i) == 0){ }else if(decode_Ticket(buf, len, &ticket, &i) == 0){
ret = do_524(&ticket, reply, from); ret = do_524(&ticket, reply, from);
free_Ticket(&ticket); free_Ticket(&ticket);
return ret; return ret;
@@ -291,7 +293,7 @@ addr_to_string(struct sockaddr *addr, size_t addr_len, char *str, size_t len)
} }
static void static void
do_request(void *buf, size_t len, do_request(void *buf, size_t len, int sendlength,
int socket, struct sockaddr *from, size_t from_len) int socket, struct sockaddr *from, size_t from_len)
{ {
krb5_error_code ret; krb5_error_code ret;
@@ -301,9 +303,17 @@ do_request(void *buf, size_t len,
addr_to_string(from, from_len, addr, sizeof(addr)); addr_to_string(from, from_len, addr, sizeof(addr));
reply.length = 0; reply.length = 0;
ret = process_request(buf, len, &reply, addr, from); ret = process_request(buf, len, &reply, &sendlength, addr, from);
if(reply.length){ if(reply.length){
kdc_log(5, "sending %d bytes to %s", reply.length, addr); kdc_log(5, "sending %d bytes to %s", reply.length, addr);
if(sendlength){
unsigned char len[4];
len[0] = (reply.length >> 24) & 0xff;
len[1] = (reply.length >> 16) & 0xff;
len[2] = (reply.length >> 8) & 0xff;
len[3] = reply.length & 0xff;
sendto(socket, len, sizeof(len), 0, from, from_len);
}
sendto(socket, reply.data, reply.length, 0, from, from_len); sendto(socket, reply.data, reply.length, 0, from, from_len);
krb5_data_free(&reply); krb5_data_free(&reply);
} }
@@ -347,7 +357,7 @@ handle_udp(struct descr *d)
if(n == 0){ if(n == 0){
goto out; goto out;
} }
do_request(buf, n, d->s, sa, from_len); do_request(buf, n, 0, d->s, sa, from_len);
out: out:
free (buf); free (buf);
free (sa_buf); free (sa_buf);
@@ -503,7 +513,7 @@ handle_tcp(struct descr *d, int index, int min_free)
free(data); free(data);
} }
if(n == 0){ if(n == 0){
do_request(d[index].buf, d[index].len, do_request(d[index].buf, d[index].len, 1,
d[index].s, sa, from_len); d[index].s, sa, from_len);
clear_descr(d + index); clear_descr(d + index);
} }