Marius Cramer
2014-02-17 ebbe6374fc9c308daf729d2ad1b2f8007ed771ce
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);