]> git.mjollnir.org Git - moodle.git/commitdiff
MDL-15655 - address_in_subnet does not work on 64 bit architectures. Also, we found...
authortjhunt <tjhunt>
Mon, 1 Sep 2008 04:17:11 +0000 (04:17 +0000)
committertjhunt <tjhunt>
Mon, 1 Sep 2008 04:17:11 +0000 (04:17 +0000)
lib/moodlelib.php
lib/simpletest/testmoodlelib.php

index 5b8b52489eb31fb0caa93747b32f9e6642bc4609..8480e5739d43995eefe49eecfa86687419eb845b 100644 (file)
@@ -7227,6 +7227,9 @@ function address_in_subnet($addr, $subnetstr) {
         $subnet = trim($subnet);
         if (strpos($subnet, '/') !== false) { /// type 1
             list($ip, $mask) = explode('/', $subnet);
+            if ($mask === '') {
+                $mask = 32;
+            }
             $mask = 0xffffffff << (32 - $mask);
             $found = ((ip2long($addr) & $mask) == (ip2long($ip) & $mask));
         } else if (strpos($subnet, '-') !== false)  {/// type 3
@@ -7239,7 +7242,10 @@ function address_in_subnet($addr, $subnetstr) {
                         $subnetrange[0] <= $lastaddrpart && $lastaddrpart <= $subnetrange[1]);
             }
         } else { /// type 2
-            $found = (strpos($addr, $subnet) === 0);
+            if ($subnet[strlen($subnet) - 1] != '.') {
+                $subnet .= '.';
+            }
+            $found = (strpos($addr . '.', $subnet) === 0);
         }
 
         if ($found) {
index 05273e6e23e73e2c0e134ad92aa50612020d314f..bdeb7cda5f63f85592d6e6b891ecef14250add8c 100644 (file)
@@ -80,9 +80,15 @@ class moodlelib_test extends UnitTestCase {
         $this->assertTrue(address_in_subnet('123.121.234.15', '123.121.234.2/28'));
         $this->assertFalse(address_in_subnet('123.121.234.16', '123.121.234.2/28'));
         $this->assertFalse(address_in_subnet('123.121.234.255', '123.121.234.2/28'));
-        $this->assertTrue(address_in_subnet('123.121.234.1', '123.121.'));
+        $this->assertTrue(address_in_subnet('123.121.234.0', '123.121.234.0/')); // / is like /32.
+        $this->assertFalse(address_in_subnet('123.121.234.1', '123.121.234.0/'));
+        $this->assertFalse(address_in_subnet('232.232.232.232', '123.121.234.0/0'));
         $this->assertFalse(address_in_subnet('123.122.234.1', '123.121.'));
         $this->assertFalse(address_in_subnet('223.121.234.1', '123.121.'));
+        $this->assertTrue(address_in_subnet('123.121.234.1', '123.121'));
+        $this->assertFalse(address_in_subnet('123.122.234.1', '123.121'));
+        $this->assertFalse(address_in_subnet('223.121.234.1', '123.121'));
+        $this->assertFalse(address_in_subnet('123.121.234.100', '123.121.234.10'));
         $this->assertFalse(address_in_subnet('123.121.234.9', '123.121.234.10-20'));
         $this->assertTrue(address_in_subnet('123.121.234.10', '123.121.234.10-20'));
         $this->assertTrue(address_in_subnet('123.121.234.15', '123.121.234.10-20'));