]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/commitdiff
General-functions.pl: rewrite IpInSubnet replace inet_ntoa
authorAlexander Marx <alexander.marx@ipfire.org>
Thu, 8 May 2014 12:08:04 +0000 (14:08 +0200)
committerMichael Tremer <michael.tremer@ipfire.org>
Thu, 19 Jun 2014 10:11:24 +0000 (12:11 +0200)
config/cfgroot/general-functions.pl

index 271dc41dacf52faf380ce53b74383e72af8f95ef..a3f4311000ae89031c5667fa46969fb8ac3a09ce 100644 (file)
@@ -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));
 }
 
 #