X-Git-Url: http://git.ipfire.org/?p=people%2Fteissler%2Fipfire-2.x.git;a=blobdiff_plain;f=config%2Fcfgroot%2Fgeneral-functions.pl;fp=config%2Fcfgroot%2Fgeneral-functions.pl;h=a3f4311000ae89031c5667fa46969fb8ac3a09ce;hp=271dc41dacf52faf380ce53b74383e72af8f95ef;hb=ab92dc0c84cc6c11f90e753439567d80bac23e2b;hpb=2f9e90ee1cfc7d535f69be244227b27a9260ee1d diff --git a/config/cfgroot/general-functions.pl b/config/cfgroot/general-functions.pl index 271dc41da..a3f431100 100644 --- a/config/cfgroot/general-functions.pl +++ b/config/cfgroot/general-functions.pl @@ -760,12 +760,21 @@ sub validportrange # used to check a port range # Return: TRUE/FALSE sub IpInSubnet { - my $ip = unpack('N', &Socket::inet_aton(shift)); - my $start = unpack('N', &Socket::inet_aton(shift)); - my $mask = unpack('N', &Socket::inet_aton(shift)); - $start &= $mask; # base of subnet... - my $end = $start + ~$mask; - return (($ip >= $start) && ($ip <= $end)); + my $addr = shift; + my $network = shift; + my $netmask = shift; + + my $addr_num = &Socket::inet_pton(AF_INET,$addr); + my $network_num = &Socket::inet_pton(AF_INET,$network); + my $netmask_num = &Socket::inet_pton(AF_INET,$netmask); + + # Find start address + my $network_start = $network_num & $netmask_num; + + # Find end address + my $network_end = $network_start ^ ~$netmask_num; + + return (($addr_num ge $network_start) && ($addr_num le $network_end)); } #