= 0; $a--) { $c = 1; while ($i[$a] > 0) { $str = $i[0].".".$i[1].".".$i[2].".".$i[3]; $res[$str] = $str; $i[$a] -= $c; $c = 2 * $c; } } $res["0.0.0.0"] = "0.0.0.0"; if (preg_match("/^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.". "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.". "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.". "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)/", $ip)) { $mask = preg_replace("/^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.". "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.". "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.". "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)/", "", $ip); $mask = preg_replace("/^\//", "", $mask); if ((in_array("$mask", $res)) && preg_match("/^[0-9\.]/", $mask)) { return TRUE; } } return FALSE; } /*! * \brief Simple is domain check * * This checks if the given string looks like "string(...).string" * * \param string $str The domain to check */ public static function is_domain($str) { return preg_match("/^(([a-z0-9\-]{2,63})\.)*[a-z]{2,63}$/i", $str); } /*! * \brief Check if the given argument is an id * * \param string $id The id to check */ public static function is_id($id) { if ($id == "") { return FALSE; } return preg_match ("/^[0-9]+$/", $id); } /*! * \brief Check if the given argument is a path * * \param string $path The path to check */ public static function is_path($path) { if ($path == "") { return TRUE; } if (!preg_match('/^[a-z0-9%\/_.+-]+$/i', $path)) { return FALSE; } return preg_match ("/\/.+$/", $path); } /*! * \brief Check if the given argument is an email * * \param string $address The email address */ public static function is_email($address) { if ($address == "") { return TRUE; } if (filter_var($address, FILTER_VALIDATE_EMAIL) !== FALSE) { return TRUE; } elseif (filter_var($address.'.com', FILTER_VALIDATE_EMAIL) !== FALSE) { /* this is to allow addresses like example@localhost, which are refused by some PHP version */ return TRUE; } return FALSE; } /* * \brief Check if the given department name is valid * * \param string $name The deparment name * * \param string $base */ public static function is_department_name_reserved($name) { global $config; $reservedNames = array(); foreach ($config->data['OBJECTS'] as $infos) { if (isset($infos['ou'])) { if ($infos['ou'] != '') { if (preg_match('/ou=([^,]+),$/', $infos['ou'], $m)) { $reservedNames[] = $m[1]; } } } } return in_array_ics($name, array_unique($reservedNames)); } /* * \brief Check if $ip1 and $ip2 represents a valid IPv4 range * * \param string $ip1 The first IPv4 * * \param string $ip2 The second IPv4 * * \return TRUE in case of a valid range, FALSE in case of an error. */ public static function is_ip_range($ip1, $ip2) { if (!tests::is_ipv4($ip1) || !tests::is_ipv4($ip2)) { return FALSE; } else { $ar1 = explode(".", $ip1); $var1 = $ar1[0] * (16777216) + $ar1[1] * (65536) + $ar1[2] * (256) + $ar1[3]; $ar2 = explode(".", $ip2); $var2 = $ar2[0] * (16777216) + $ar2[1] * (65536) + $ar2[2] * (256) + $ar2[3]; return ($var1 < $var2); } } /* * \brief Check if the specified IP address is inside the given network * * \param string $network Name of the network * * \param string $netmask The netmask of the IP address * * \param string $address The IP address */ public static function is_in_network($network, $netmask, $address) { $nw = explode('.', $network); $nm = explode('.', $netmask); $ad = explode('.', $address); /* Generate inverted netmask */ for ($i = 0; $i < 4; $i++) { $ni[$i] = 255 - $nm[$i]; $la[$i] = $nw[$i] | $ni[$i]; } /* Transform to integer */ $first = $nw[0] * (16777216) + $nw[1] * (65536) + $nw[2] * (256) + $nw[3]; $curr = $ad[0] * (16777216) + $ad[1] * (65536) + $ad[2] * (256) + $ad[3]; $last = $la[0] * (16777216) + $la[1] * (65536) + $la[2] * (256) + $la[3]; return ($first < $curr && $last > $curr); } /* \brief Check if the specified IP address $address is inside the given network */ public static function is_in_ip_range($from, $to, $address) { $from = explode('.', $from); $to = explode('.', $to); $ad = explode('.', $address); /* Transform to integer */ $from = $from[0] * (16777216) + $from[1] * (65536) + $from[2] * (256) + $from[3]; $to = $to[0] * (16777216) + $to[1] * (65536) + $to[2] * (256) + $to[3]; $ad = $ad[0] * (16777216) + $ad[1] * (65536) + $ad[2] * (256) + $ad[3]; return ($ad >= $from && $ad <= $to); } } ?>