mirror of
https://github.com/webmin/webmin.git
synced 2026-09-15 10:00:40 +01:00
Fix matching of IPv6 networks https://www.virtualmin.com/node/54905
This commit is contained in:
17
miniserv.pl
17
miniserv.pl
@@ -2847,8 +2847,8 @@ for($i=2; $i<@_; $i++) {
|
||||
local $v6size = $2;
|
||||
local $v6addr = &canonicalize_ip6($1);
|
||||
local $bytes = $v6size / 8;
|
||||
@mo = split(/:/, $v6addr);
|
||||
local @io6 = split(/:/, &canonicalize_ip6($_[0]));
|
||||
@mo = &expand_ipv6_bytes($v6addr);
|
||||
local @io6 = &expand_ipv6_bytes(&canonicalize_ip6($_[0]));
|
||||
for($j=0; $j<$bytes; $j++) {
|
||||
if ($mo[$j] ne $io6[$j]) {
|
||||
$mismatch = 1;
|
||||
@@ -6235,6 +6235,19 @@ foreach my $w (@w) {
|
||||
return lc(join(":", @w));
|
||||
}
|
||||
|
||||
# expand_ipv6_bytes(address)
|
||||
# Given a canonical IPv6 address, split it into an array of bytes
|
||||
sub expand_ipv6_bytes
|
||||
{
|
||||
my ($addr) = @_;
|
||||
my @rv;
|
||||
foreach my $w (split(/:/, $addr)) {
|
||||
$w =~ /^(..)(..)$/ || return ( );
|
||||
push(@rv, hex($1), hex($2));
|
||||
}
|
||||
return @rv;
|
||||
}
|
||||
|
||||
sub get_somaxconn
|
||||
{
|
||||
return defined(&SOMAXCONN) ? SOMAXCONN : 128;
|
||||
|
||||
@@ -1549,8 +1549,8 @@ for(my $i=1; $i<@_; $i++) {
|
||||
my $v6size = $2;
|
||||
my $v6addr = &canonicalize_ip6($1);
|
||||
my $bytes = $v6size / 8;
|
||||
my @mo = split(/:/, $v6addr);
|
||||
my @io = split(/:/, &canonicalize_ip6($_[0]));
|
||||
my @mo = &expand_ipv6_bytes($v6addr);
|
||||
my @io = &expand_ipv6_bytes(&canonicalize_ip6($_[0]));
|
||||
for(my $j=0; $j<$bytes; $j++) {
|
||||
if ($mo[$j] ne $io[$j]) {
|
||||
$mismatch = 1;
|
||||
@@ -1566,6 +1566,24 @@ for(my $i=1; $i<@_; $i++) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
=head2 expand_ipv6_bytes(address)
|
||||
|
||||
Given a canonical IPv6 address, split it into an array of bytes
|
||||
|
||||
=cut
|
||||
sub expand_ipv6_bytes
|
||||
{
|
||||
my ($addr) = @_;
|
||||
my @rv;
|
||||
foreach my $w (split(/:/, $addr)) {
|
||||
$w =~ /^(..)(..)$/ || return ( );
|
||||
push(@rv, hex($1), hex($2));
|
||||
}
|
||||
return @rv;
|
||||
}
|
||||
|
||||
|
||||
|
||||
=head2 prefix_to_mask(prefix)
|
||||
|
||||
Converts a number like 24 to a mask like 255.255.255.0.
|
||||
|
||||
Reference in New Issue
Block a user