|
|
@ -140,10 +140,10 @@ bool samappedcmp(const struct sockaddr_in *sa1,const struct sockaddr_in6 *sa2) |
|
|
} |
|
|
} |
|
|
bool sacmp(const struct sockaddr *sa1,const struct sockaddr *sa2) |
|
|
bool sacmp(const struct sockaddr *sa1,const struct sockaddr *sa2) |
|
|
{ |
|
|
{ |
|
|
return sa1->sa_family==AF_INET && sa2->sa_family==AF_INET && !memcmp(&((struct sockaddr_in*)sa1)->sin_addr,&((struct sockaddr_in*)sa2)->sin_addr,sizeof(struct in_addr)) || |
|
|
return (sa1->sa_family==AF_INET && sa2->sa_family==AF_INET && !memcmp(&((struct sockaddr_in*)sa1)->sin_addr,&((struct sockaddr_in*)sa2)->sin_addr,sizeof(struct in_addr))) || |
|
|
sa1->sa_family==AF_INET6 && sa2->sa_family==AF_INET6 && !memcmp(&((struct sockaddr_in6*)sa1)->sin6_addr,&((struct sockaddr_in6*)sa2)->sin6_addr,sizeof(struct in6_addr)) || |
|
|
(sa1->sa_family==AF_INET6 && sa2->sa_family==AF_INET6 && !memcmp(&((struct sockaddr_in6*)sa1)->sin6_addr,&((struct sockaddr_in6*)sa2)->sin6_addr,sizeof(struct in6_addr))) || |
|
|
sa1->sa_family==AF_INET && sa2->sa_family==AF_INET6 && samappedcmp((struct sockaddr_in*)sa1,(struct sockaddr_in6*)sa2) || |
|
|
(sa1->sa_family==AF_INET && sa2->sa_family==AF_INET6 && samappedcmp((struct sockaddr_in*)sa1,(struct sockaddr_in6*)sa2)) || |
|
|
sa1->sa_family==AF_INET6 && sa2->sa_family==AF_INET && samappedcmp((struct sockaddr_in*)sa2,(struct sockaddr_in6*)sa1); |
|
|
(sa1->sa_family==AF_INET6 && sa2->sa_family==AF_INET && samappedcmp((struct sockaddr_in*)sa2,(struct sockaddr_in6*)sa1)); |
|
|
} |
|
|
} |
|
|
uint16_t saport(const struct sockaddr *sa) |
|
|
uint16_t saport(const struct sockaddr *sa) |
|
|
{ |
|
|
{ |
|
|
@ -167,8 +167,8 @@ bool saconvmapped(struct sockaddr_storage *a) |
|
|
bool is_localnet(const struct sockaddr *a) |
|
|
bool is_localnet(const struct sockaddr *a) |
|
|
{ |
|
|
{ |
|
|
// 0.0.0.0, ::ffff:0.0.0.0 = localhost in linux
|
|
|
// 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) || |
|
|
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))); |
|
|
} |
|
|
} |
|
|
bool is_linklocal(const struct sockaddr_in6 *a) |
|
|
bool is_linklocal(const struct sockaddr_in6 *a) |
|
|
{ |
|
|
{ |
|
|
@ -232,7 +232,7 @@ time_t file_mod_time(const char *filename) |
|
|
|
|
|
|
|
|
bool pf_in_range(uint16_t port, const port_filter *pf) |
|
|
bool pf_in_range(uint16_t port, const port_filter *pf) |
|
|
{ |
|
|
{ |
|
|
return port && ((!pf->from && !pf->to || port>=pf->from && port<=pf->to) ^ pf->neg); |
|
|
return port && (((!pf->from && !pf->to) || (port>=pf->from && port<=pf->to)) ^ pf->neg); |
|
|
} |
|
|
} |
|
|
bool pf_parse(const char *s, port_filter *pf) |
|
|
bool pf_parse(const char *s, port_filter *pf) |
|
|
{ |
|
|
{ |
|
|
|