tbrehm
2010-05-10 e5b3535bd8ed2b4e72dbb0317f95658e389fb000
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,102 @@
       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);
         exec("chown $user $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);
   }
}
?>