implement max_request

git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@2846 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
Johan Danielsson
1997-08-09 00:20:13 +00:00
parent 58ccef528b
commit 1b8d68f60c

View File

@@ -141,12 +141,18 @@ do_request(void *buf, size_t len,
static void static void
handle_udp(struct descr *d) handle_udp(struct descr *d)
{ {
unsigned char buf[1024]; unsigned char *buf;
struct sockaddr_in from; struct sockaddr_in from;
int from_len = sizeof(from); int from_len = sizeof(from);
size_t n; size_t n;
n = recvfrom(d->s, buf, sizeof(buf), 0, buf = malloc(max_request);
if(buf == NULL){
kdc_log(0, "Failed to allocate %u bytes", max_request);
return;
}
n = recvfrom(d->s, buf, max_request, 0,
(struct sockaddr*)&from, &from_len); (struct sockaddr*)&from, &from_len);
if(n < 0){ if(n < 0){
warn("recvfrom"); warn("recvfrom");
@@ -202,24 +208,20 @@ handle_tcp(struct descr *d, int index, int min_free)
return; return;
} }
if(d[index].size - d[index].len < n){ if(d[index].size - d[index].len < n){
if(d[index].size == 0){ unsigned char *tmp;
d[index].buf = malloc(1024); d[index].size += 1024;
if(d[index].buf == NULL){ if(d[index].size >= max_request){
warnx("No memory"); kdc_log(0, "Request exceeds max request size (%u bytes).", d[index].size);
close(d[index].s); clear_descr(d + index);
return; return;
}
d[index].size = 1024;
d[index].len = 0;
}else{
unsigned char *tmp;
tmp = realloc(d[index].buf, 2 * d[index].size);
if(tmp == NULL){
warnx("No memory");
close(d[index].s);
return;
}
} }
tmp = realloc(d[index].buf, d[index].size);
if(tmp == NULL){
kdc_log(0, "Failed to re-allocate %u bytes.", d[index].size);
clear_descr(d + index);
return;
}
d[index].buf = tmp;
} }
memcpy(d[index].buf + d[index].len, buf, n); memcpy(d[index].buf + d[index].len, buf, n);
d[index].len += n; d[index].len += n;