Add some sanity checks and some logging to http code.
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@3200 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
@@ -141,6 +141,19 @@ process_request(unsigned char *buf,
|
||||
return -1;
|
||||
}
|
||||
|
||||
static void
|
||||
addr_to_string(struct sockaddr *addr, size_t addr_len, char *str, size_t len)
|
||||
{
|
||||
switch(addr->sa_family){
|
||||
case AF_INET:
|
||||
strncpy(str, inet_ntoa(((struct sockaddr_in*)addr)->sin_addr), len);
|
||||
break;
|
||||
default:
|
||||
snprintf(str, len, "<%d addr>", addr->sa_family);
|
||||
}
|
||||
str[len - 1] = 0;
|
||||
}
|
||||
|
||||
static void
|
||||
do_request(void *buf, size_t len,
|
||||
int socket, struct sockaddr *from, size_t from_len)
|
||||
@@ -148,9 +161,8 @@ do_request(void *buf, size_t len,
|
||||
krb5_error_code ret;
|
||||
krb5_data reply;
|
||||
|
||||
char addr[128] = "<unknown address>";
|
||||
if(from->sa_family == AF_INET)
|
||||
strcpy(addr, inet_ntoa(((struct sockaddr_in*)from)->sin_addr));
|
||||
char addr[128];
|
||||
addr_to_string(from, from_len, addr, sizeof(addr));
|
||||
|
||||
reply.length = 0;
|
||||
ret = process_request(buf, len, &reply, addr, from);
|
||||
@@ -204,6 +216,7 @@ static void
|
||||
handle_tcp(struct descr *d, int index, int min_free)
|
||||
{
|
||||
unsigned char buf[1024];
|
||||
char addr[32];
|
||||
struct sockaddr_in from;
|
||||
int from_len = sizeof(from);
|
||||
size_t n;
|
||||
@@ -237,6 +250,7 @@ handle_tcp(struct descr *d, int index, int min_free)
|
||||
from_len = sizeof(from);
|
||||
getpeername(d[index].s, (struct sockaddr*)&from, &from_len);
|
||||
}
|
||||
addr_to_string((struct sockaddr*)&from, from_len, addr, sizeof(addr));
|
||||
if(d[index].size - d[index].len < n){
|
||||
unsigned char *tmp;
|
||||
d[index].size += 1024;
|
||||
@@ -276,11 +290,12 @@ handle_tcp(struct descr *d, int index, int min_free)
|
||||
p = strstr(s, "\r\n");
|
||||
*p = 0;
|
||||
p = NULL;
|
||||
kdc_log(5, "HTTP request");
|
||||
strtok_r(s, " \t", &p);
|
||||
t = strtok_r(NULL, " \t", &p);
|
||||
if(t == NULL){
|
||||
|
||||
kdc_log(0, "Malformed HTTP request from %s", addr);
|
||||
clear_descr(d + index);
|
||||
return;
|
||||
}
|
||||
data = malloc(strlen(t));
|
||||
len = base64_decode(t, data);
|
||||
@@ -297,6 +312,7 @@ handle_tcp(struct descr *d, int index, int min_free)
|
||||
write(d[index].s, msg, strlen(msg));
|
||||
free(data);
|
||||
clear_descr(d + index);
|
||||
kdc_log(0, "HTTP request from %s is non KDC request", addr);
|
||||
return;
|
||||
}
|
||||
{
|
||||
|
Reference in New Issue
Block a user