From abcfa611685c750e95aa186879099ea413562911 Mon Sep 17 00:00:00 2001 From: bol-van Date: Thu, 15 Aug 2024 20:20:58 +0300 Subject: [PATCH] tpws: is_localnet: deny ::0,::1 --- tpws/helpers.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tpws/helpers.c b/tpws/helpers.c index 5ef0261..520e1ef 100644 --- a/tpws/helpers.c +++ b/tpws/helpers.c @@ -168,7 +168,9 @@ bool is_localnet(const struct sockaddr *a) { // 0.0.0.0, ::ffff:0.0.0.0 = localhost in linux return a->sa_family==AF_INET && (*(char*)&((struct sockaddr_in *)a)->sin_addr.s_addr==127 || !((struct sockaddr_in *)a)->sin_addr.s_addr) || - a->sa_family==AF_INET6 && saismapped((struct sockaddr_in6 *)a) && (((struct sockaddr_in6 *)a)->sin6_addr.s6_addr[12]==127 || !*(uint32_t*)(((struct sockaddr_in6 *)a)->sin6_addr.s6_addr+12)); + a->sa_family==AF_INET6 && ( + saismapped((struct sockaddr_in6 *)a) && (((struct sockaddr_in6 *)a)->sin6_addr.s6_addr[12]==127 || !*(uint32_t*)(((struct sockaddr_in6 *)a)->sin6_addr.s6_addr+12)) || + !memcmp(((struct sockaddr_in6 *)a)->sin6_addr.s6_addr,"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00",15) && !(((struct sockaddr_in6 *)a)->sin6_addr.s6_addr[15] & 0xFE)); } bool is_linklocal(const struct sockaddr_in6 *a) {