ACL IP rules compatible with IPv4-mapped-IPv6

fix #1060
This commit is contained in:
zonyitoo
2022-12-20 14:57:07 +08:00
parent 9523eecb6c
commit 85c99b9b32

View File

@@ -117,8 +117,25 @@ impl Rules {
/// Check if the specified address matches any rules
fn check_ip_matched(&self, addr: &IpAddr) -> bool {
match addr {
IpAddr::V4(v4) => self.ipv4.contains(v4),
IpAddr::V6(v6) => self.ipv6.contains(v6),
IpAddr::V4(v4) => {
if self.ipv4.contains(v4) {
return true;
}
let mapped_ipv6 = v4.to_ipv6_mapped();
self.ipv6.contains(&mapped_ipv6)
}
IpAddr::V6(v6) => {
if self.ipv6.contains(v6) {
return true;
}
if let Some(mapped_ipv4) = v6.to_ipv4_mapped() {
return self.ipv4.contains(&mapped_ipv4);
}
false
}
}
}