wyrie
2009-12-07 2ee270d04585648bbfce46b38b4725fd341aaa56
install/lib/installer_base.lib.php
@@ -296,21 +296,21 @@
                $this->error('Unable to create database user in master database: '.$conf['mysql']['master_ispconfig_user'].' Error: '.$this->dbmaster->errorMessage);
            }
            
            $query = "GRANT UPDATE(`status`) ON ".$conf['mysql']['master_database'].".`software_update_inst` "
            $query = "GRANT SELECT, UPDATE(`status`) ON ".$conf['mysql']['master_database'].".`software_update_inst` "
                    ."TO '".$conf['mysql']['master_ispconfig_user']."'@'".$src_host."' "
                    ."IDENTIFIED BY '".$conf['mysql']['master_ispconfig_password']."';";
            if(!$this->dbmaster->query($query)) {
                $this->error('Unable to create database user in master database: '.$conf['mysql']['master_ispconfig_user'].' Error: '.$this->dbmaster->errorMessage);
            }
         
         $query = "GRANT UPDATE(`updated`) ON ".$conf['mysql']['master_database'].".`server` "
         $query = "GRANT SELECT, UPDATE(`updated`) ON ".$conf['mysql']['master_database'].".`server` "
                    ."TO '".$conf['mysql']['master_ispconfig_user']."'@'".$src_host."' "
                    ."IDENTIFIED BY '".$conf['mysql']['master_ispconfig_password']."';";
            if(!$this->dbmaster->query($query)) {
                $this->error('Unable to create database user in master database: '.$conf['mysql']['master_ispconfig_user'].' Error: '.$this->dbmaster->errorMessage);
            }
            
            $query = "GRANT UPDATE (`ssl_request`, `ssl_cert`, `ssl_action`) ON ".$conf['mysql']['master_database'].".`web_domain` "
            $query = "GRANT SELECT, UPDATE (`ssl_request`, `ssl_cert`, `ssl_action`) ON ".$conf['mysql']['master_database'].".`web_domain` "
                    ."TO '".$conf['mysql']['master_ispconfig_user']."'@'".$src_host."' "
                    ."IDENTIFIED BY '".$conf['mysql']['master_ispconfig_password']."';";
            if(!$this->dbmaster->query($query)) {
@@ -324,7 +324,7 @@
                $this->error('Unable to create database user in master database: '.$conf['mysql']['master_ispconfig_user'].' Error: '.$this->dbmaster->errorMessage);
            }
            
            $query = "GRANT INSERT , DELETE ON ".$conf['mysql']['master_database'].".`monitor_data` "
            $query = "GRANT SELECT, INSERT , DELETE ON ".$conf['mysql']['master_database'].".`monitor_data` "
                    ."TO '".$conf['mysql']['master_ispconfig_user']."'@'".$src_host."' "
                    ."IDENTIFIED BY '".$conf['mysql']['master_ispconfig_password']."';";
            if(!$this->dbmaster->query($query)) {
@@ -425,6 +425,9 @@
      
      //* mysql-virtual_relaydomains.cf
        $this->process_postfix_config('mysql-virtual_relaydomains.cf');
      //* mysql-virtual_relayrecipientmaps.cf
        $this->process_postfix_config('mysql-virtual_relayrecipientmaps.cf');
      //* Changing mode and group of the new created config files.
      caselog('chmod o= '.$config_dir.'/mysql-virtual_*.cf* &> /dev/null',
@@ -460,6 +463,7 @@
         'smtpd_tls_key_file = '.$config_dir.'/smtpd.key',
         'transport_maps = proxy:mysql:'.$config_dir.'/mysql-virtual_transports.cf',
         'relay_domains = mysql:'.$config_dir.'/mysql-virtual_relaydomains.cf',
         'relay_recipient_maps = mysql:'.$config_dir.'/mysql-virtual_relayrecipientmaps.cf',
         'virtual_create_maildirsize = yes',
         'virtual_maildir_extended = yes',
         'virtual_mailbox_limit_maps = proxy:mysql:'.$config_dir.'/mysql-virtual_mailbox_limit_maps.cf',
@@ -733,7 +737,7 @@
      
      $config_dir = $conf['pureftpd']['config_dir'];
      //* configure pam for SMTP authentication agains the ispconfig database
      //* configure pure-ftpd for MySQL authentication against the ispconfig database
      $configfile = 'db/mysql.conf';
      if(is_file("$config_dir/$configfile")){
            copy("$config_dir/$configfile", "$config_dir/$configfile~");
@@ -899,7 +903,7 @@
        
      if(is_dir("/etc/Bastille.backup")) caselog("rm -rf /etc/Bastille.backup", __FILE__, __LINE__);
      if(is_dir("/etc/Bastille")) caselog("mv -f /etc/Bastille /etc/Bastille.backup", __FILE__, __LINE__);
        @mkdir("/etc/Bastille", octdec($directory_mode));
        @mkdir("/etc/Bastille", 0700);
        if(is_dir("/etc/Bastille.backup/firewall.d")) caselog("cp -pfr /etc/Bastille.backup/firewall.d /etc/Bastille/", __FILE__, __LINE__);
        caselog("cp -f tpl/bastille-firewall.cfg.master /etc/Bastille/bastille-firewall.cfg", __FILE__, __LINE__);
        caselog("chmod 644 /etc/Bastille/bastille-firewall.cfg", __FILE__, __LINE__);
@@ -1011,6 +1015,7 @@
      $content = str_replace('{apps_vhost_ip}', $conf['web']['apps_vhost_ip'], $content);
      $content = str_replace('{apps_vhost_port}', $conf['web']['apps_vhost_port'], $content);
      $content = str_replace('{apps_vhost_dir}', $conf['web']['website_basedir'].'/apps', $content);
      $content = str_replace('{website_basedir}', $conf['web']['website_basedir'], $content);
      $content = str_replace('{apps_vhost_servername}', $apps_vhost_servername, $content);
      
      
@@ -1197,7 +1202,7 @@
      exec("chmod -R 770 $install_dir/interface/lib/lang");
      
      //* Make the temp directory for language file exports writable
      exec("chmod -R 770 $install_dir/interface/web/temp");
      if(is_dir("$install_dir/interface/web/temp")) exec("chmod -R 770 $install_dir/interface/web/temp");
      
      //* Make all interface language file directories group writable
      $handle = @opendir($install_dir.'/interface/web');
@@ -1378,6 +1383,119 @@
      
   }
   
   /**
    * Helper function - get the path to a template file based on
    * the local part of the filename. Checks first for the existence
    * of a distribution specific file and if not found looks in the
    * base template folder. Optionally the behaviour can be changed
    * by setting the 2nd parameter which will fetch the contents
    * of the template file and return it instead of the path. The 3rd
    * parameter further extends this behaviour by filtering the contents
    * by inserting the ispconfig database credentials using the {} placeholders.
    *
    * @param string $tLocal local part of filename
    * @param bool $tRf
    * @param bool $tDBCred
    * @return string Relative path to the chosen template file
    */
   protected function get_template_file($tLocal, $tRf=false, $tDBCred=false)
   {
      global $conf, $dist;
      $final_path = '';
      $dist_template = 'dist/tpl/'.strtolower($dist['name'])."/$tLocal.master";
      if (file_exists($dist_template)) {
         $final_path = $dist_template;
      } else {
         $final_path = "tpl/$tLocal.master";
      }
      if (!$tRf) {
         return $final_path;
      } else {
         return (!$tDBCred) ? rf($final_path) : $this->insert_db_credentials(rf($final_path));
      }
   }
   /**
    * Helper function - writes the contents to a config file
    * and performs a backup if the file exist. Additionally
    * if the file exists the new file will be given the
    * same rights and ownership as the original. Optionally the
    * rights and/or ownership can be overriden by appending umask,
    * user and group to the parameters. Providing only uid and gid
    * values will result in only a chown.
    *
    * @param $tConf
    * @param $tContents
    * @return bool
    */
   protected function write_config_file($tConf, $tContents)
   {
      // Backup config file before writing new contents and stat file
      if ( is_file($tConf) )
      {
         $stat = exec('stat -c \'%a %U %G\' '.escapeshellarg($tConf), $output, $res);
         if ($res == 0) { // stat successfull
            list($access, $user, $group) = split(" ", $stat);
         }
         if ( copy($tConf, $tConf.'~') ) {
            exec('chmod 400 '.$tConf.'~');
         }
      }
      wf($tConf, $tContents); // write file
      if (func_num_args() >= 4) // override rights and/or ownership
      {
         $args = func_get_args();
         $output = array_slice($args, 2);
         switch (sizeof($output)) {
            case 3:
               $umask = array_shift($output);
               if (is_numeric($umask) && preg_match('/^0?[0-7]{3}$/', $umask)) {
                  $access = $umask;
               }
            case 2:
               if (is_user($output[0]) && is_group($output[1])) {
                  list($user,$group) = $output;
               }
               break;
         }
      }
      if (!empty($user) && !empty($group)) {
         exec("chown $user:$group $tConf");
      }
      if (!empty($access)) {
         exec("chmod $access $tConf");
      }
   }
   /**
    * Helper function - filter the contents of a config
    * file by inserting the common ispconfig database
    * credentials.
    *
    * @param $tContents
    * @return string
    */
   protected function insert_db_credentials($tContents)
   {
      global $conf;
      $tContents = str_replace('{mysql_server_ispconfig_user}', $conf["mysql"]["ispconfig_user"], $tContents);
      $tContents = str_replace('{mysql_server_ispconfig_password}', $conf["mysql"]["ispconfig_password"], $tContents);
      $tContents = str_replace('{mysql_server_database}', $conf["mysql"]["database"], $tContents);
      $tContents = str_replace('{mysql_server_ip}', $conf["mysql"]["ip"], $tContents);
      $tContents = str_replace('{mysql_server_host}',$conf['mysql']['host'], $tContents);
      $tContents = str_replace('{mysql_server_port}',$conf["mysql"]["port"], $tContents);
      return $tContents;
   }
}
?>