Store addr on errors

Signed-off-by: Adrien Gallouët <adrien@gallouet.fr>
This commit is contained in:
Adrien Gallouët
2018-03-14 06:40:37 +00:00
parent 93d7d36b68
commit b787bad536

15
mud.c
View File

@@ -163,9 +163,9 @@ struct mud {
} peer; } peer;
struct { struct {
struct { struct {
size_t count; struct sockaddr_storage addr;
uint64_t time; uint64_t time;
} decrypt; } decrypt, difftime;
} bad; } bad;
struct { struct {
unsigned char kiss[MUD_KISS_SIZE]; unsigned char kiss[MUD_KISS_SIZE];
@@ -1195,14 +1195,17 @@ mud_recv(struct mud *mud, void *data, size_t size)
send_time = mud_read48(&packet[MUD_U48_SIZE]); send_time = mud_read48(&packet[MUD_U48_SIZE]);
} }
if (mud_abs_diff(now, send_time) >= mud->time_tolerance) mud_unmapv4(&addr);
if (mud_abs_diff(now, send_time) >= mud->time_tolerance) {
mud->bad.difftime.addr = addr;
mud->bad.difftime.time = now;
return 0; return 0;
}
if (mud_packet && mud_packet_check(mud, packet, packet_size)) if (mud_packet && mud_packet_check(mud, packet, packet_size))
return 0; return 0;
mud_unmapv4(&addr);
struct sockaddr_storage local_addr; struct sockaddr_storage local_addr;
if (mud_localaddr(&local_addr, &msg, addr.ss_family)) if (mud_localaddr(&local_addr, &msg, addr.ss_family))
@@ -1213,7 +1216,7 @@ mud_recv(struct mud *mud, void *data, size_t size)
if (!mud_packet) { if (!mud_packet) {
ret = mud_decrypt(mud, data, size, packet, packet_size); ret = mud_decrypt(mud, data, size, packet, packet_size);
if (ret == -1) { if (ret == -1) {
mud->bad.decrypt.count++; mud->bad.decrypt.addr = addr;
mud->bad.decrypt.time = now; mud->bad.decrypt.time = now;
return 0; return 0;
} }