From 5ca959fa688255a8de61f89fe2751eb4d24a6912 Mon Sep 17 00:00:00 2001
From: Florian Schaal <florian@schaal-24.de>
Date: Tue, 22 Mar 2016 09:22:07 -0400
Subject: [PATCH] fixed typo

---
 server/lib/classes/system.inc.php |  175 ++++++++++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 156 insertions(+), 19 deletions(-)

diff --git a/server/lib/classes/system.inc.php b/server/lib/classes/system.inc.php
index 3001c64..2c36c38 100644
--- a/server/lib/classes/system.inc.php
+++ b/server/lib/classes/system.inc.php
@@ -44,7 +44,7 @@
 	 */
 
 
-	public function system(){
+	public function __construct(){
 		//global $go_info;
 		//$this->server_id = $go_info['isp']['server_id'];
 		//$this->server_conf = $go_info['isp']['server_conf'];
@@ -608,6 +608,30 @@
 
 
 	/**
+	 * Get the user from an user id
+	 *
+	 */
+	function getuser($uid){
+		global $app;
+		$user_datei = $this->server_conf['passwd_datei'];
+		$users = $app->file->no_comments($user_datei);
+		$lines = explode("\n", $users);
+		if(is_array($lines)){
+			foreach($lines as $line){
+				if(trim($line) != ''){
+					list($f1, $f2, $f3,) = explode(':', $line);
+					if($f3 == $uid) return $f1;
+				}
+			}
+		}
+		return false;
+	}
+
+
+
+
+
+	/**
 	 * Get the user id from an user
 	 *
 	 */
@@ -628,6 +652,30 @@
 		} else {
 			return false;
 		}
+	}
+
+
+
+
+
+	/**
+	 * Get the group from a group id
+	 *
+	 */
+	function getgroup($gid){
+		global $app;
+		$group_datei = $this->server_conf['group_datei'];
+		$groups = $app->file->no_comments($group_datei);
+		$lines = explode("\n", $groups);
+		if(is_array($lines)){
+			foreach($lines as $line){
+				if(trim($line) != ""){
+					list($f1, $f2, $f3, $f4) = explode(':', $line);
+					if($f3 == $gid) return $f1;
+				}
+			}
+		}
+		return false;
 	}
 
 
@@ -867,6 +915,38 @@
 	}
 
 
+	/**
+	 * This function checks the free space for a given directory
+	 * @param path check path
+	 * @param limit min. free space in bytes
+	 * @return bool - true when the the free space is above limit ohterwise false, opt. available disk-space
+	*/
+
+	function check_free_space($path, $limit = 0, &$free_space = 0) {
+		$path = rtrim($path, '/');
+
+		/**
+		* Make sure that we have only existing directories in the path.
+
+		* Given a file name instead of a directory, the behaviour of the disk_free_space
+		function is unspecified and may differ between operating systems and PHP versions.
+        */
+		while(!is_dir($path) && $path != '/') $path = realpath(dirname($path));
+
+		$free_space = disk_free_space($out);
+
+		if (!$free_space) {
+			$free_space = 0;
+			return false;
+		}
+
+		if ($free_space >= $limit) {
+			return true;
+		} else {
+			return false;
+		}
+
+	}
 
 
 
@@ -1478,7 +1558,7 @@
 		}
 	}
 
-	function maildirmake($maildir_path, $user = '', $subfolder = '') {
+	function maildirmake($maildir_path, $user = '', $subfolder = '', $group = '') {
 
 		global $app, $conf;
 		
@@ -1496,22 +1576,24 @@
 
 		if($user != '' && $user != 'root' && $this->is_user($user)) {
 			$user = escapeshellcmd($user);
-			// I assume that the name of the (vmail group) is the same as the name of the mail user in ISPConfig 3
-			$group = $user;
 			if(is_dir($dir)) $this->chown($dir, $user);
-			if(is_dir($dir)) $this->chgrp($dir, $group);
 
 			$chown_mdsub = true;
+		}
+
+		if($group != '' && $group != 'root' && $this->is_group($group)) {
+			$group = escapeshellcmd($group);
+			if(is_dir($dir)) $this->chgrp($dir, $group);
+		
+			$chgrp_mdsub = true;
 		}
 
 		$maildirsubs = array('cur', 'new', 'tmp');
 
 		foreach ($maildirsubs as $mdsub) {
 			if(!is_dir($dir.'/'.$mdsub)) mkdir($dir.'/'.$mdsub, 0700, true);
-			if ($chown_mdsub) {
-				chown($dir.'/'.$mdsub, $user);
-				chgrp($dir.'/'.$mdsub, $group);
-			}
+			if ($chown_mdsub) chown($dir.'/'.$mdsub, $user);
+			if ($chgrp_mdsub) chgrp($dir.'/'.$mdsub, $group);
 		}
 
 		chmod($dir, 0700);
@@ -1719,16 +1801,71 @@
 		return $return_var == 0 ? true : false;
 	}
 
+	function mount_backup_dir($backup_dir, $mount_cmd = '/usr/local/ispconfig/server/scripts/backup_dir_mount.sh'){
+		global $app, $conf;
+
+		$mounted = true;
+		if ( 	is_file($mount_cmd) &&
+				is_executable($mount_cmd) &&
+				fileowner($mount_cmd) === 0
+		) {
+			if (!$this->is_mounted($backup_dir)){
+				exec($mount_cmd);
+				sleep(1);
+				if (!$this->is_mounted($backup_dir)) $mounted = false;
+			}
+		} else $mounted = false;
+		if (!$mounted) {
+			//* send email to admin that backup directory could not be mounted
+			$global_config = $app->getconf->get_global_config('mail');
+			if($global_config['admin_mail'] != ''){
+				$subject = 'Backup directory '.$backup_dir.' could not be mounted';
+				$message = "Backup directory ".$backup_dir." could not be mounted.\n\nThe command\n\n".$mount_cmd."\n\nfailed.";
+				mail($global_config['admin_mail'], $subject, $message);
+			}
+		}
+
+		return $mounted;
+	}
+
+	function umount_backup_dir($backup_dir, $mount_cmd = '/usr/local/ispconfig/server/scripts/backup_dir_umount.sh'){
+		global $app, $conf;
+
+		if ( 	is_file($mount_cmd) &&
+				is_executable($mount_cmd) &&
+				fileowner($mount_cmd) === 0
+		) {
+			if ($this->is_mounted($backup_dir)){
+				exec($mount_cmd);
+				sleep(1);
+			}
+		}
+
+        $unmounted = $this->is_mounted($backup_dir) == 0 ? true : false;
+		if(!$unmounted) {
+			//* send email to admin that backup directory could not be unmounted
+			$global_config = $app->getconf->get_global_config('mail');
+			if($global_config['admin_mail'] != ''){
+				$subject = 'Backup directory '.$backup_dir.' could not be unmounted';
+				$message = "Backup directory ".$backup_dir." could not be unmounted.\n\nThe command\n\n".$mount_cmd."\n\nfailed.";
+				mail($global_config['admin_mail'], $subject, $message);
+			}
+		}
+
+		return $unmounted;
+
+	}
+
 	function getinitcommand($servicename, $action, $init_script_directory = ''){
 		global $conf;
-		// systemd
-		if(is_executable('/bin/systemd')){
-			return 'systemctl '.$action.' '.$servicename.'.service';
-		}
 		// upstart
 		if(is_executable('/sbin/initctl')){
 			exec('/sbin/initctl version 2>/dev/null | /bin/grep -q upstart', $retval['output'], $retval['retval']);
 			if(intval($retval['retval']) == 0) return 'service '.$servicename.' '.$action;
+		}
+		// systemd
+		if(is_executable('/bin/systemd') || is_executable('/usr/bin/systemctl')){
+			return 'systemctl '.$action.' '.$servicename.'.service';
 		}
 		// sysvinit
 		if($init_script_directory == '') $init_script_directory = $conf['init_scripts'];
@@ -1765,8 +1902,8 @@
 		global $app;
 		
 		$cmd = '';
-		if(is_installed('apache2ctl')) $cmd = 'apache2ctl -t -D DUMP_MODULES';
-		elseif(is_installed('apachectl')) $cmd = 'apachectl -t -D DUMP_MODULES';
+		if($this->is_installed('apache2ctl')) $cmd = 'apache2ctl -t -D DUMP_MODULES';
+		elseif($this->is_installed('apachectl')) $cmd = 'apachectl -t -D DUMP_MODULES';
 		else {
 			$app->log("Could not check apache modules, apachectl not found.", LOGLEVEL_WARN);
 			return array();
@@ -1824,7 +1961,7 @@
 		$name_blacklist = array('root','ispconfig','vmail','getmail');
 		if(in_array($username,$name_blacklist)) return false;
 		
-		if(preg_match('/^[\w\.\-]{0,32}$/', $username) == false) return false;
+		if(preg_match('/^[a-zA-Z0-9\.\-_]{1,32}$/', $username) == false) return false;
 		
 		if($check_id && intval($this->getuid($username)) < $this->min_uid) return false;
 		
@@ -1833,15 +1970,15 @@
 		return true;
 	}
 	
-	public function is_allowed_group($groupname, $restrict_names = false) {
+	public function is_allowed_group($groupname, $check_id = true, $restrict_names = false) {
 		global $app;
 		
 		$name_blacklist = array('root','ispconfig','vmail','getmail');
 		if(in_array($groupname,$name_blacklist)) return false;
 		
-		if(preg_match('/^[\w\.\-]{0,32}$/', $groupname) == false) return false;
+		if(preg_match('/^[a-zA-Z0-9\.\-_]{1,32}$/', $groupname) == false) return false;
 		
-		if(intval($this->getgid($groupname)) < $this->min_gid) return false;
+		if($check_id && intval($this->getgid($groupname)) < $this->min_gid) return false;
 		
 		if($restrict_names == true && preg_match('/^client\d+$/', $groupname) == false) return false;
 		

--
Gitblit v1.9.1