tbrehm
2010-06-16 e28564dbde4f922a6a8263e3dea32d56b60b5b5b
server/lib/classes/system.inc.php
@@ -1,6 +1,7 @@
<?php
/*
Copyright (c) 2007, projektfarm Gmbh, Till Brehm, Falko Timme
Copyright (c) 2007, Till Brehm, projektfarm Gmbh
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
@@ -26,7 +27,6 @@
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
class system{
@@ -463,6 +463,28 @@
        }
        return false;
   }
   /*
   // Alternative implementation of the is_group function. Should be faster then the old one To be tested.
   function is_group($group) {
   $groupfile = '/etc/group';
   if(is_file($groupfile)) {
      $handle = fopen ($groupfile, "r");
      while (!feof($handle)) {
         $line = trim(fgets($handle, 4096));
         if($line != ""){
            $parts = explode(":", $line);
              if($parts[0] == $group) {
               fclose ($handle);
               return true;
            }
         }
      }
      fclose ($handle);
   }
   return false;
   }
   */
   
   function root_group(){
      global $app;
@@ -1107,6 +1129,104 @@
       return false;
     }
   }
   function replaceLine($filename,$search_pattern,$new_line,$strict = 0,$append = 1) {
      $lines = @file($filename);
      $out = '';
      $found = 0;
      if(is_array($lines)) {
         foreach($lines as $line) {
            if($strict == 0) {
               if(stristr($line,$search_pattern)) {
                  $out .= $new_line."\n";
                  $found = 1;
               } else {
                  $out .= $line;
               }
            } else {
               if(trim($line) == $search_pattern) {
                  $out .= $new_line."\n";
                  $found = 1;
               } else {
                  $out .= $line;
               }
            }
         }
      }
      if($found == 0) {
         //* add \n if the last line does not end with \n or \r
         if(substr($out,-1) != "\n" && substr($out,-1) != "\r") $out .= "\n";
         //* add the new line at the end of the file
         if($append == 1) $out .= $new_line."\n";
      }
      file_put_contents($filename,$out);
   }
   function removeLine($filename,$search_pattern,$strict = 0) {
   if($lines = @file($filename)) {
      $out = '';
      foreach($lines as $line) {
         if($strict == 0) {
            if(!stristr($line,$search_pattern)) {
               $out .= $line;
            }
         } else {
            if(!trim($line) == $search_pattern) {
               $out .= $line;
            }
         }
      }
      file_put_contents($filename,$out);
   }
   }
   function maildirmake($maildir_path, $user = '', $subfolder = '') {
      global $app;
      if($subfolder != '') {
         $dir = escapeshellarg($maildir_path.'/.'.$subfolder);
         $dir_cur = escapeshellarg($maildir_path.'/.'.$subfolder.'/cur');
         $dir_new = escapeshellarg($maildir_path.'/.'.$subfolder.'/new');
         $dir_tmp = escapeshellarg($maildir_path.'/.'.$subfolder.'/tmp');
      } else {
         $dir = escapeshellarg($maildir_path);
         $dir_cur = escapeshellarg($maildir_path.'/cur');
         $dir_new = escapeshellarg($maildir_path.'/new');
         $dir_tmp = escapeshellarg($maildir_path.'/tmp');
      }
      exec("mkdir -p $dir_cur $dir_new $dir_tmp");
      exec("chmod 0700 $dir $dir_cur $dir_new $dir_tmp");
      if($user != '' && $this->is_user($user) && $user != 'root') {
         $user = escapeshellarg($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;
         exec("chown $user:$group $dir $dir_cur $dir_new $dir_tmp");
      }
      //* Add the subfolder to the subscriptions and courierimapsubscribed files
      if($subfolder != '') {
         // Courier
         if(!is_file($maildir_path.'/courierimapsubscribed')) {
            $tmp_file = escapeshellarg($maildir_path.'/courierimapsubscribed');
            exec("touch $tmp_file && chown vmail:vmail $tmp_file");
         }
         $this->replaceLine($maildir_path.'/courierimapsubscribed','INBOX.'.$subfolder,'INBOX.'.$subfolder,1,1);
         // Dovecot
         if(!is_file($maildir_path.'/subscriptions')) {
            $tmp_file = escapeshellarg($maildir_path.'/subscriptions');
            exec("touch $tmp_file && chown vmail:vmail $tmp_file");
         }
         $this->replaceLine($maildir_path.'/subscriptions',$subfolder,$subfolder,1,1);
      }
      $app->log('Created Maildir '.$maildir_path.' with subfolder: '.$subfolder,LOGLEVEL_DEBUG);
   }
}
?>