Marius Cramer
2015-01-05 dee987b263b021b990ea4c62cb15be47c6d61fb5
install/dist/lib/opensuse.lib.php
@@ -168,6 +168,19 @@
      //* mysql-virtual_relayrecipientmaps.cf
      $this->process_postfix_config('mysql-virtual_relayrecipientmaps.cf');
      //* postfix-dkim
      $full_file_name=$config_dir.'/tag_as_originating.re';
      if(is_file($full_file_name)) {
         copy($full_file_name, $config_dir.$configfile.'~');
      }
      wf($full_file_name, '/^/ FILTER amavis:[127.0.0.1]:10026');
      $full_file_name=$config_dir.'/tag_as_foreign.re';
      if(is_file($full_file_name)) {
         copy($full_file_name, $config_dir.$configfile.'~');
      }
      wf($full_file_name, '/^/ FILTER amavis:[127.0.0.1]:10024');
      //* Changing mode and group of the new created config files.
      caselog('chmod o= '.$config_dir.'/mysql-virtual_*.cf* &> /dev/null',
         __FILE__, __LINE__, 'chmod on mysql-virtual_*.cf*', 'chmod on mysql-virtual_*.cf* failed');
@@ -423,6 +436,19 @@
   {
      global $conf;
      $virtual_transport = 'dovecot';
      // check if virtual_transport must be changed
      if ($this->is_update) {
         $tmp = $this->db->queryOneRecord("SELECT * FROM ".$conf["mysql"]["database"].".server WHERE server_id = ".$conf['server_id']);
         $ini_array = ini_to_array(stripslashes($tmp['config']));
         // ini_array needs not to be checked, because already done in update.php -> updateDbAndIni()
         if(isset($ini_array['mail']['mailbox_virtual_uidgid_maps']) && $ini_array['mail']['mailbox_virtual_uidgid_maps'] == 'y') {
            $virtual_transport = 'lmtp:unix:private/dovecot-lmtp';
         }
      }
      $config_dir = $conf['dovecot']['config_dir'];
      //* Configure master.cf and add a line for deliver
@@ -446,7 +472,7 @@
      // Adding the amavisd commands to the postfix configuration
      $postconf_commands = array (
         'dovecot_destination_recipient_limit = 1',
         'virtual_transport = dovecot',
         'virtual_transport = '.$virtual_transport,
         'smtpd_sasl_type = dovecot',
         'smtpd_sasl_path = private/auth',
      );
@@ -545,11 +571,23 @@
      // Append the configuration for amavisd to the master.cf file
      if(is_file($conf["postfix"]["config_dir"].'/master.cf')) copy($conf["postfix"]["config_dir"].'/master.cf', $conf["postfix"]["config_dir"].'/master.cf~');
      $content = rf($conf["postfix"]["config_dir"].'/master.cf');
      // Only add the content if we had not addded it before
      if(!stristr($content, "127.0.0.1:10025")) {
        // Only add the content if we had not addded it before
      if(!preg_match('/^amavis\s+unix\s+/m', $content)) {
         unset($content);
         $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis.master', "tpl/master_cf_amavis.master");
         af($conf["postfix"]["config_dir"].'/master.cf', $content);
         $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis.master', 'tpl/master_cf_amavis.master');
         af($conf['postfix']['config_dir'].'/master.cf', $content);
         $content = rf($conf['postfix']['config_dir'].'/master.cf');
      }
      if(!preg_match('/^127.0.0.1:10025\s+/m', $content)) {
         unset($content);
         $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis10025.master', 'tpl/master_cf_amavis10025.master');
         af($conf['postfix']['config_dir'].'/master.cf', $content);
         $content = rf($conf['postfix']['config_dir'].'/master.cf');
      }
      if(!preg_match('/^127.0.0.1:10027\s+/m', $content)) {
         unset($content);
         $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis10027.master', 'tpl/master_cf_amavis10027.master');
         af($conf['postfix']['config_dir'].'/master.cf', $content);
      }
      unset($content);
@@ -656,6 +694,9 @@
      if($conf['apache']['installed'] == false) return;
      //* Create the logging directory for the vhost logfiles
      exec('mkdir -p /var/log/ispconfig/httpd');
      //* enable apache logio module
      exec('a2enmod logio');
      //if(is_file('/etc/suphp.conf')) {
      replaceLine('/etc/suphp.conf', 'php=php', 'x-httpd-suphp="php:/srv/www/cgi-bin/php5"', 0, 0);
@@ -1081,6 +1122,12 @@
      caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
      $command = 'chown root:ispconfig '.$install_dir.'/security';
      caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
      $command = 'chown root:ispconfig '.$install_dir.'/security/ids.whitelist';
      caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
      $command = 'chown root:ispconfig '.$install_dir.'/security/ids.htmlfield';
      caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
      $command = 'chown root:ispconfig '.$install_dir.'/security/apache_directives.blacklist';
      caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
      //* Make the global language file directory group writable
      exec("chmod -R 770 $install_dir/interface/lib/lang");
@@ -1122,6 +1169,13 @@
         exec("chmod 600 $install_dir/server/lib/mysql_clientdb.conf");
         exec("chown root:root $install_dir/server/lib/mysql_clientdb.conf");
      }
      if(is_dir($install_dir.'/interface/invoices')) {
         exec('chmod -R 770 '.escapeshellarg($install_dir.'/interface/invoices'));
         exec('chown -R ispconfig:ispconfig '.escapeshellarg($install_dir.'/interface/invoices'));
      }
      exec('chown -R root:root /usr/local/ispconfig/interface/ssl');
      // TODO: FIXME: add the www-data user to the ispconfig group. This is just for testing
      // and must be fixed as this will allow the apache user to read the ispconfig files.
@@ -1330,91 +1384,6 @@
      if(!is_link('/usr/local/bin/ispconfig_patch')) exec('ln -s /usr/local/ispconfig/server/scripts/ispconfig_patch /usr/local/bin/ispconfig_patch');
   }
   public function configure_dbserver()
   {
      global $conf;
      //* If this server shall act as database server for client DB's, we configure this here
      $install_dir = $conf['ispconfig_install_dir'];
      // Create a file with the database login details which
      // are used to create the client databases.
      if(!is_dir("$install_dir/server/lib")) {
         $command = "mkdir $install_dir/server/lib";
         caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
      }
      $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/mysql_clientdb.conf.master', "tpl/mysql_clientdb.conf.master");
      $content = str_replace('{hostname}', $conf['mysql']['host'], $content);
      $content = str_replace('{username}', $conf['mysql']['admin_user'], $content);
      $content = str_replace('{password}', $conf['mysql']['admin_password'], $content);
      wf("$install_dir/server/lib/mysql_clientdb.conf", $content);
      exec('chmod 600 '."$install_dir/server/lib/mysql_clientdb.conf");
      exec('chown root:root '."$install_dir/server/lib/mysql_clientdb.conf");
   }
   public function install_crontab()
   {
      global $conf;
      //* Root Crontab
      exec('crontab -u root -l > crontab.txt');
      $existing_root_cron_jobs = file('crontab.txt');
      // remove existing ispconfig cronjobs, in case the syntax has changed
      foreach($existing_root_cron_jobs as $key => $val) {
         if(stristr($val, '/usr/local/ispconfig')) unset($existing_root_cron_jobs[$key]);
      }
      $root_cron_jobs = array(
         '* * * * * /usr/local/ispconfig/server/server.sh &> /dev/null',
         '30 00 * * * /usr/local/ispconfig/server/cron_daily.sh &> /dev/null'
      );
      if ($conf['nginx']['installed'] == true) {
         $root_cron_jobs[] = "0 0 * * * /usr/local/ispconfig/server/scripts/create_daily_nginx_access_logs.sh &> /dev/null";
      }
      foreach($root_cron_jobs as $cron_job) {
         if(!in_array($cron_job."\n", $existing_root_cron_jobs)) {
            $existing_root_cron_jobs[] = $cron_job."\n";
         }
      }
      file_put_contents('crontab.txt', $existing_root_cron_jobs);
      exec('crontab -u root crontab.txt &> /dev/null');
      unlink('crontab.txt');
      //* Getmail crontab
      if(is_user('getmail')) {
         $cf = $conf['getmail'];
         exec('crontab -u getmail -l > crontab.txt');
         $existing_cron_jobs = file('crontab.txt');
         $cron_jobs = array(
            '*/5 * * * * /usr/local/bin/run-getmail.sh > /dev/null 2>> /dev/null'
         );
         // remove existing ispconfig cronjobs, in case the syntax has changed
         foreach($existing_cron_jobs as $key => $val) {
            if(stristr($val, 'getmail')) unset($existing_cron_jobs[$key]);
         }
         foreach($cron_jobs as $cron_job) {
            if(!in_array($cron_job."\n", $existing_cron_jobs)) {
               $existing_cron_jobs[] = $cron_job."\n";
            }
         }
         file_put_contents('crontab.txt', $existing_cron_jobs);
         exec('crontab -u getmail crontab.txt &> /dev/null');
         unlink('crontab.txt');
      }
      exec('touch /var/log/ispconfig/cron.log');
      exec('chmod 660 /var/log/ispconfig/cron.log');
   }
}