implement max_request
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@2846 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
@@ -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;
|
||||||
|
Reference in New Issue
Block a user