Explorar o código

Fixed the computation of IPs in a subnet that failed (returned negative numbers) on some versions of PHP compiled in 32-bit.

git-svn-id: http://svn.code.sf.net/p/itop/code/trunk@1469 a333f486-631f-4898-b8df-5754b55c2be0
dflaven %!s(int64=14) %!d(string=hai) anos
pai
achega
ff89a196b6
Modificáronse 1 ficheiros con 4 adicións e 4 borrados
  1. 4 4
      modules/itop-config-mgmt-1.0.0/model.itop-config-mgmt.php

+ 4 - 4
modules/itop-config-mgmt-1.0.0/model.itop-config-mgmt.php

@@ -451,9 +451,9 @@ class Subnet extends cmdbAbstractObject
 			$bit_ip = ip2long($this->Get('ip'));
 			$bit_mask = ip2long($this->Get('ip_mask'));
 	
-			$iIPMin = ($bit_ip & $bit_mask) + 1; // exclude the first one: identifies the subnet itsel
-			$iIPMax = ($bit_ip | (~$bit_mask)) - 1; // exclude the last one : reserved for DHCP
-	
+			$iIPMin = sprintf('%u', ($bit_ip & $bit_mask) | 1); // exclude the first one: identifies the subnet itself
+			$iIPMax = sprintf('%u', (($bit_ip | (~$bit_mask))) & 0xfffffffe); // exclude the last one : broadcast address
+			
 			$sIPMin = long2ip($iIPMin);
 			$sIPMax = long2ip($iIPMax);
 	
@@ -465,7 +465,7 @@ class Subnet extends cmdbAbstractObject
 			$oBlock->Display($oPage, 'nwif', array('menu' => false));
 	
 			$iCountUsed = $oIfSet->Count();
-			$iCountRange = $iIPMax - $iIPMin;
+			$iCountRange = $iIPMax - $iIPMin; // On 32-bit systems the substraction will be computed using floats for values greater than PHP_MAX_INT;
 			$iFreeCount =  $iCountRange - $iCountUsed;
 	
 			$oPage->SetCurrentTab(Dict::S('Class:Subnet/Tab:FreeIPs'));