From 3faab0ca9e097627420aec19c01ad8336fe79c22 Mon Sep 17 00:00:00 2001
From: Marius Cramer <m.cramer@pixcept.de>
Date: Tue, 25 Feb 2014 03:01:22 -0500
Subject: [PATCH] Merge remote-tracking branch 'origin/stable-3.0.5'

---
 server/lib/classes/system.inc.php |  107 +++++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 83 insertions(+), 24 deletions(-)

diff --git a/server/lib/classes/system.inc.php b/server/lib/classes/system.inc.php
index a05f4f4..92881ba 100644
--- a/server/lib/classes/system.inc.php
+++ b/server/lib/classes/system.inc.php
@@ -606,6 +606,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
 	 *
 	 */
@@ -626,6 +650,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;
 	}
 
 
@@ -851,7 +899,7 @@
 
 		//* We allow only some characters in the path
 		// * is allowed, for example it is part of wildcard certificates/keys: *.example.com.crt
-		if(!preg_match('@^/[-a-zA-Z0-9_/.*~]{1,}$@', $path)) return false;
+		if(!preg_match('@^/[-a-zA-Z0-9_/.*]{1,}[~]?$@', $path)) return false;
 
 		//* Check path for symlinks
 		$path_parts = explode('/', $path);
@@ -1476,9 +1524,13 @@
 		}
 	}
 
-	function maildirmake($maildir_path, $user = '', $subfolder = '') {
+	function maildirmake($maildir_path, $user = '', $subfolder = '', $group = '') {
 
-		global $app;
+		global $app, $conf;
+		
+		// load the server configuration options
+		$app->uses("getconf");
+		$mail_config = $app->getconf->get_server_config($conf["server_id"], 'mail');
 
 		if($subfolder != '') {
 			$dir = escapeshellcmd($maildir_path.'/.'.$subfolder);
@@ -1490,22 +1542,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);
@@ -1521,25 +1575,30 @@
 
 		//* Add the subfolder to the subscriptions and courierimapsubscribed files
 		if($subfolder != '') {
+			
 			// Courier
-			if(!is_file($maildir_path.'/courierimapsubscribed')) {
-				$tmp_file = escapeshellcmd($maildir_path.'/courierimapsubscribed');
-				touch($tmp_file);
-				chmod($tmp_file, 0744);
-				chown($tmp_file, 'vmail');
-				chgrp($tmp_file, 'vmail');
+			if($mail_config['pop3_imap_daemon'] == 'courier') {
+				if(!is_file($maildir_path.'/courierimapsubscribed')) {
+					$tmp_file = escapeshellcmd($maildir_path.'/courierimapsubscribed');
+					touch($tmp_file);
+					chmod($tmp_file, 0744);
+					chown($tmp_file, 'vmail');
+					chgrp($tmp_file, 'vmail');
+				}
+				$this->replaceLine($maildir_path.'/courierimapsubscribed', 'INBOX.'.$subfolder, 'INBOX.'.$subfolder, 1, 1);
 			}
-			$this->replaceLine($maildir_path.'/courierimapsubscribed', 'INBOX.'.$subfolder, 'INBOX.'.$subfolder, 1, 1);
 
 			// Dovecot
-			if(!is_file($maildir_path.'/subscriptions')) {
-				$tmp_file = escapeshellcmd($maildir_path.'/subscriptions');
-				touch($tmp_file);
-				chmod($tmp_file, 0744);
-				chown($tmp_file, 'vmail');
-				chgrp($tmp_file, 'vmail');
+			if($mail_config['pop3_imap_daemon'] == 'dovecot') {
+				if(!is_file($maildir_path.'/subscriptions')) {
+					$tmp_file = escapeshellcmd($maildir_path.'/subscriptions');
+					touch($tmp_file);
+					chmod($tmp_file, 0744);
+					chown($tmp_file, 'vmail');
+					chgrp($tmp_file, 'vmail');
+				}
+				$this->replaceLine($maildir_path.'/subscriptions', $subfolder, $subfolder, 1, 1);
 			}
-			$this->replaceLine($maildir_path.'/subscriptions', $subfolder, $subfolder, 1, 1);
 		}
 
 		$app->log('Created Maildir '.$maildir_path.' with subfolder: '.$subfolder, LOGLEVEL_DEBUG);

--
Gitblit v1.9.1