Marius Burkard
2016-07-10 e1ceb050e19c7574bca146a8da7047ee4ff456b5
interface/lib/classes/functions.inc.php
@@ -186,10 +186,11 @@
      global $app;
      if($type == 'IPv4'){
         $regex = "/^[0-9]{1,3}(\.)[0-9]{1,3}(\.)[0-9]{1,3}(\.)[0-9]{1,3}$/";
//         $regex = "/^[0-9]{1,3}(\.)[0-9]{1,3}(\.)[0-9]{1,3}(\.)[0-9]{1,3}$/";
         $regex = "/^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/";
      } else {
         // IPv6
         $regex = "/^(\:\:([a-f0-9]{1,4}\:){0,6}?[a-f0-9]{0,4}|[a-f0-9]{1,4}(\:[a-f0-9]{1,4}){0,6}?\:\:|[a-f0-9]{1,4}(\:[a-f0-9]{1,4}){1,6}?\:\:([a-f0-9]{1,4}\:){1,6}?[a-f0-9]{1,4})(\/\d{1,3})?$/i";
         $regex = "/(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))/";
      }
      $server_by_id = array();
@@ -202,7 +203,7 @@
      }
      $ips = array();
      $results = $app->db->queryAllRecords("SELECT ip_address AS ip, server_id FROM server_ip WHERE ip_type = '".$type."'");
      $results = $app->db->queryAllRecords("SELECT ip_address AS ip, server_id FROM server_ip WHERE ip_type = ?", $type);
      if(!empty($results) && is_array($results)){
         foreach($results as $result){
            if(preg_match($regex, $result['ip'])){
@@ -229,39 +230,6 @@
            if(preg_match($regex, $result['ip'])) $ips[] = $result['ip'];
         }
      }
      /*
      $results = $app->db->queryAllRecords("SELECT xfer FROM dns_slave WHERE xfer != ''");
      if(!empty($results) && is_array($results)){
         foreach($results as $result){
            $tmp_ips = explode(',', $result['xfer']);
            foreach($tmp_ips as $tmp_ip){
               $tmp_ip = trim($tmp_ip);
               if(preg_match($regex, $tmp_ip)) $ips[] = $tmp_ip;
            }
         }
      }
      $results = $app->db->queryAllRecords("SELECT xfer FROM dns_soa WHERE xfer != ''");
      if(!empty($results) && is_array($results)){
         foreach($results as $result){
            $tmp_ips = explode(',', $result['xfer']);
            foreach($tmp_ips as $tmp_ip){
               $tmp_ip = trim($tmp_ip);
               if(preg_match($regex, $tmp_ip)) $ips[] = $tmp_ip;
            }
         }
      }
      $results = $app->db->queryAllRecords("SELECT also_notify FROM dns_soa WHERE also_notify != ''");
      if(!empty($results) && is_array($results)){
         foreach($results as $result){
            $tmp_ips = explode(',', $result['also_notify']);
            foreach($tmp_ips as $tmp_ip){
               $tmp_ip = trim($tmp_ip);
               if(preg_match($regex, $tmp_ip)) $ips[] = $tmp_ip;
            }
         }
      }
      */
      
      $results = $app->db->queryAllRecords("SELECT remote_ips FROM web_database WHERE remote_ips != ''");
      if(!empty($results) && is_array($results)){
@@ -334,7 +302,7 @@
      if($encode == true) {
         if(function_exists('idn_to_ascii')) {
            $domain = idn_to_ascii($domain);
            $domain = idn_to_ascii($domain, IDNA_NONTRANSITIONAL_TO_ASCII, INTL_IDNA_VARIANT_UTS46);
         } elseif(file_exists(ISPC_CLASS_PATH.'/idn/idna_convert.class.php')) {
            /* use idna class:
                 * @author  Matthias Sommerfeld <mso@phlylabs.de>
@@ -351,7 +319,7 @@
         }
      } else {
         if(function_exists('idn_to_utf8')) {
            $domain = idn_to_utf8($domain);
            $domain = idn_to_utf8($domain, IDNA_NONTRANSITIONAL_TO_ASCII, INTL_IDNA_VARIANT_UTS46);
         } elseif(file_exists(ISPC_CLASS_PATH.'/idn/idna_convert.class.php')) {
            /* use idna class:
                 * @author  Matthias Sommerfeld <mso@phlylabs.de>
@@ -388,6 +356,79 @@
      return implode("\n", $domains);
   }
   public function is_allowed_user($username, $restrict_names = false) {
      global $app;
      $name_blacklist = array('root','ispconfig','vmail','getmail');
      if(in_array($username,$name_blacklist)) return false;
      if(preg_match('/^[a-zA-Z0-9\.\-_]{1,32}$/', $username) == false) return false;
      if($restrict_names == true && preg_match('/^web\d+$/', $username) == false) return false;
      return true;
   }
   public function is_allowed_group($groupname, $restrict_names = false) {
      global $app;
      $name_blacklist = array('root','ispconfig','vmail','getmail');
      if(in_array($groupname,$name_blacklist)) return false;
      if(preg_match('/^[a-zA-Z0-9\.\-_]{1,32}$/', $groupname) == false) return false;
      if($restrict_names == true && preg_match('/^client\d+$/', $groupname) == false) return false;
      return true;
   }
   public function getimagesizefromstring($string){
      if (!function_exists('getimagesizefromstring')) {
         $uri = 'data://application/octet-stream;base64,' . base64_encode($string);
         return getimagesize($uri);
      } else {
         return getimagesizefromstring($string);
      }
   }
   public function password($minLength = 10, $special = false){
      global $app;
      $iteration = 0;
      $password = "";
      $maxLength = $minLength + 5;
      $length = $this->getRandomInt($minLength, $maxLength);
      while($iteration < $length){
         $randomNumber = (floor(((mt_rand() / mt_getrandmax()) * 100)) % 94) + 33;
         if(!$special){
            if (($randomNumber >=33) && ($randomNumber <=47)) { continue; }
            if (($randomNumber >=58) && ($randomNumber <=64)) { continue; }
            if (($randomNumber >=91) && ($randomNumber <=96)) { continue; }
            if (($randomNumber >=123) && ($randomNumber <=126)) { continue; }
         }
         $iteration++;
         $password .= chr($randomNumber);
      }
      $app->uses('validate_password');
      if($app->validate_password->password_check('', $password, '') !== false) $password = $this->password($minLength, $special);
      return $password;
   }
   public function getRandomInt($min, $max){
      return floor((mt_rand() / mt_getrandmax()) * ($max - $min + 1)) + $min;
   }
   public function generate_customer_no(){
      global $app;
      // generate customer no.
      $customer_no = mt_rand(100000, 999999);
      while($app->db->queryOneRecord("SELECT client_id FROM client WHERE customer_no = ?", $customer_no)) {
         $customer_no = mt_rand(100000, 999999);
      }
      return $customer_no;
   }
}
?>