From e1ceb050e19c7574bca146a8da7047ee4ff456b5 Mon Sep 17 00:00:00 2001
From: Marius Burkard <m.burkard@pixcept.de>
Date: Sun, 10 Jul 2016 05:02:35 -0400
Subject: [PATCH] Merge branch 'stable-3.1'
---
interface/lib/classes/functions.inc.php | 176 ++++++++++++++++++++++++++++++----------------------------
1 files changed, 92 insertions(+), 84 deletions(-)
diff --git a/interface/lib/classes/functions.inc.php b/interface/lib/classes/functions.inc.php
index d2ac583..03bd11d 100644
--- a/interface/lib/classes/functions.inc.php
+++ b/interface/lib/classes/functions.inc.php
@@ -61,52 +61,6 @@
$app->ispcmail->send($to);
$app->ispcmail->finish();
- /* left in here just for the case...
- if($filepath != '') {
- if(!file_exists($filepath)) $app->error("Mail attachement does not exist ".$filepath);
-
- $content = file_get_contents($filepath);
- $content = chunk_split(base64_encode($content));
- $uid = strtoupper(md5(uniqid(time())));
- $subject = "=?utf-8?B?".base64_encode($subject)."?=";
-
- if($filename == '') {
- $path_parts = pathinfo($filepath);
- $filename = $path_parts["basename"];
- unset($path_parts);
- }
-
- $header = "Return-Path: $from\nFrom: $from\nReply-To: $from\n";
- if($cc != '') $header .= "Cc: $cc\n";
- if($bcc != '') $header .= "Bcc: $bcc\n";
- $header .= "MIME-Version: 1.0\n";
- $header .= "Content-Type: multipart/mixed; boundary=$uid\n";
-
- $header .= "--$uid\n";
- $header .= "Content-Type: text/plain;\n\tcharset=\"UTF-8\"\n";
- $header .= "Content-Transfer-Encoding: 8bit\n\n";
- $header .= "$text\n";
-
- $header .= "--$uid\n";
- $header .= "Content-Type: $filetype; name=\"$filename\"\n";
-
- $header .= "Content-Transfer-Encoding: base64\n";
- $header .= "Content-Disposition: attachment; filename=\"$filename\"\n\n";
- $header .= "$content\n";
-
- $header .= "--$uid--";
-
- mail($to, $subject, "", $header);
- } else {
- $header = "From: $from\nReply-To: $from\n";
- if($cc != '') $header .= "Cc: $cc\n";
- if($bcc != '') $header .= "Bcc: $bcc\n";
- $header .= "Content-Type: text/plain;\n\tcharset=\"UTF-8\"\n";
- $header .= "Content-Transfer-Encoding: 8bit\n\n";
- $subject = "=?utf-8?B?".base64_encode($subject)."?=";
- mail($to, $subject, $text, $header);
- }
- */
return true;
}
@@ -232,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();
@@ -248,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'])){
@@ -275,37 +230,7 @@
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)){
foreach($results as $result){
@@ -349,11 +274,21 @@
}
}
+ /**
+ * Function to change bytes to kB, MB, GB or TB
+ * @param int $size - size in bytes
+ * @param int precicion - after-comma-numbers (default: 2)
+ * @return string - formated bytes
+ */
+ public function formatBytes($size, $precision = 2) {
+ $base=log($size)/log(1024);
+ $suffixes=array('', ' kB', ' MB', ' GB', ' TB');
+ return round(pow(1024, $base-floor($base)), $precision).$suffixes[floor($base)];
+ }
+
/** IDN converter wrapper.
* all converter classes should be placed in ISPC_CLASS_PATH.'/idn/'
*/
-
-
private function _idn_encode_decode($domain, $encode = true) {
if($domain == '') return '';
if(preg_match('/^[0-9\.]+$/', $domain)) return $domain; // may be an ip address - anyway does not need to bee encoded
@@ -367,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>
@@ -384,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>
@@ -421,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;
+ }
}
?>
--
Gitblit v1.9.1