mcramer
2009-06-07 08669660700ad0ef62ab5de10b06c555f2a067e7
install/lib/installer_base.lib.php
@@ -202,6 +202,14 @@
      // TODO: Update further distribution specific parameters for server config here
      $tpl_ini_array['web']['vhost_conf_dir'] = $conf['apache']['vhost_conf_dir'];
      $tpl_ini_array['web']['vhost_conf_enabled_dir'] = $conf['apache']['vhost_conf_enabled_dir'];
      $tpl_ini_array['jailkit']['jailkit_chroot_app_programs'] = $conf['jailkit']['jailkit_chroot_app_programs'];
      $tpl_ini_array['fastcgi']['fastcgi_phpini_path'] = $conf['fastcgi']['fastcgi_phpini_path'];
      $tpl_ini_array['fastcgi']['fastcgi_starter_path'] = $conf['fastcgi']['fastcgi_starter_path'];
      $tpl_ini_array['server']['hostname'] = $conf['hostname'];
      $tpl_ini_array['server']['ip_address'] = @gethostbyname($conf['hostname']);
      $tpl_ini_array['web']['website_basedir'] = $conf['web']['website_basedir'];
      $tpl_ini_array['web']['website_path'] = $conf['web']['website_path'];
      $tpl_ini_array['web']['website_symlinks'] = $conf['web']['website_symlinks'];
      
      $server_ini_content = array_to_ini($tpl_ini_array);
      $server_ini_content = mysql_real_escape_string($server_ini_content);
@@ -225,30 +233,10 @@
         $sql = "INSERT INTO `server` (`server_id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `server_name`, `mail_server`, `web_server`, `dns_server`, `file_server`, `db_server`, `vserver_server`, `config`, `updated`, `active`) VALUES ('".$conf['server_id']."',1, 1, 'riud', 'riud', 'r', '".$conf['hostname']."', '$mail_server_enabled', '$web_server_enabled', '$dns_server_enabled', '$file_server_enabled', '$db_server_enabled', '$vserver_server_enabled', '$server_ini_content', 0, 1);";
         $this->db->query($sql);
         
         //* insert the ispconfig user in the remote server
         $from_host = $conf['hostname'];
         $from_ip = gethostbyname($conf['hostname']);
         //* username for the ispconfig user
         $conf['mysql']['master_ispconfig_user'] = 'ispcsrv'.$conf['server_id'];
         //* Delete ISPConfig user in the master database, in case that it exists
         $this->dbmaster->query("DELETE FROM mysql.user WHERE User = '".$conf['mysql']['master_ispconfig_user']."' AND Host = '".$from_host."';");
         $this->dbmaster->query("DELETE FROM mysql.db WHERE Db = '".$conf['mysql']['master_database']."' AND Host = '".$from_host."';");
         $this->dbmaster->query("DELETE FROM mysql.user WHERE User = '".$conf['mysql']['master_ispconfig_user']."' AND Host = '".$from_ip."';");
         $this->dbmaster->query("DELETE FROM mysql.db WHERE Db = '".$conf['mysql']['master_database']."' AND Host = '".$from_ip."';");
         $this->dbmaster->query('FLUSH PRIVILEGES;');
         //* Create the ISPConfig database user in the local database
           $query = 'GRANT SELECT, INSERT, UPDATE, DELETE ON '.$conf['mysql']['master_database'].".* "
                   ."TO '".$conf['mysql']['master_ispconfig_user']."'@'".$from_host."' "
                   ."IDENTIFIED BY '".$conf['mysql']['master_ispconfig_password']."';";
         $query = 'GRANT SELECT, INSERT, UPDATE, DELETE ON '.$conf['mysql']['master_database'].".* "
                   ."TO '".$conf['mysql']['master_ispconfig_user']."'@'".$from_ip."' "
                   ."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);
         }
            $this->grant_master_database_rights();
      
      } else {
         //* Insert the server, if its not a mster / slave setup
@@ -261,6 +249,78 @@
      
   }
   
    public function grant_master_database_rights()
    {
        global $conf;
        if($conf['mysql']['master_slave_setup'] != 'y') return;
        //* insert the ispconfig user in the remote server
        $from_host = $conf['hostname'];
        $from_ip = gethostbyname($conf['hostname']);
        //* Delete ISPConfig user in the master database, in case that it exists
        $this->dbmaster->query("DELETE FROM mysql.user WHERE User = '".$conf['mysql']['master_ispconfig_user']."' AND Host = '".$from_host."';");
        $this->dbmaster->query("DELETE FROM mysql.db WHERE Db = '".$conf['mysql']['master_database']."' AND Host = '".$from_host."';");
        $this->dbmaster->query("DELETE FROM mysql.user WHERE User = '".$conf['mysql']['master_ispconfig_user']."' AND Host = '".$from_ip."';");
        $this->dbmaster->query("DELETE FROM mysql.db WHERE Db = '".$conf['mysql']['master_database']."' AND Host = '".$from_ip."';");
        $this->dbmaster->query('FLUSH PRIVILEGES;');
        $hosts = array($from_host, $from_ip);
        foreach($hosts as $src_host) {
            //* Create the ISPConfig database user in the remote database
            $query = "GRANT SELECT 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 SELECT, INSERT ON ".$conf['mysql']['master_database'].".`sys_log` "
                    ."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 SELECT, UPDATE(`status`) ON ".$conf['mysql']['master_database'].".`sys_datalog` "
                    ."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(`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 (`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)) {
                $this->error('Unable to create database user in master database: '.$conf['mysql']['master_ispconfig_user'].' Error: '.$this->dbmaster->errorMessage);
            }
            $query = "GRANT SELECT ON ".$conf['mysql']['master_database'].".`sys_group` "
                    ."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 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)) {
                $this->error('Unable to create database user in master database: '.$conf['mysql']['master_ispconfig_user'].' Error: '.$this->dbmaster->errorMessage);
            }
        }
    }
    //** writes postfix configuration files
    public function process_postfix_config($configfile)
@@ -355,7 +415,7 @@
      $postconf_commands = array (
         'myhostname = '.$conf['hostname'],
         'mydestination = '.$conf['hostname'].', localhost, localhost.localdomain',
         'mynetworks = 127.0.0.0/8',
         'mynetworks = 127.0.0.0/8 [::1]/128',
         'virtual_alias_domains =',
         'virtual_alias_maps = proxy:mysql:'.$config_dir.'/mysql-virtual_forwardings.cf, mysql:'.$config_dir.'/mysql-virtual_email2email.cf',
         'virtual_mailbox_domains = proxy:mysql:'.$config_dir.'/mysql-virtual_domains.cf',
@@ -431,7 +491,7 @@
      $configfile = $config_dir.'/master.cf';
      $content = rf($configfile);
      $content = str_replace('flags=DRhu user=vmail argv=/usr/bin/maildrop -d ${recipient}', 
                   'flags=R user='.$cf['vmail_username'].' argv=/usr/bin/maildrop -d ${recipient} ${extension} ${recipient} ${user} ${nexthop} ${sender}',
                   'flags=R user='.$cf['vmail_username'].' argv=/usr/bin/maildrop -d '.$cf['vmail_username'].' ${extension} ${recipient} ${user} ${nexthop} ${sender}',
                     $content);
      wf($configfile, $content);
      
@@ -698,7 +758,7 @@
      
      if(is_file('/etc/suphp/suphp.conf')) {
         replaceLine('/etc/suphp/suphp.conf','php=php:/usr/bin','x-httpd-suphp=php:/usr/bin/php-cgi',0);
         replaceLine('/etc/suphp/suphp.conf','docroot=','docroot=/var/clients',0);
         //replaceLine('/etc/suphp/suphp.conf','docroot=','docroot=/var/clients',0);
      }
      
      if(is_file('/etc/apache2/sites-enabled/000-default')) {
@@ -716,7 +776,19 @@
        $vhost_conf_dir = $conf['apache']['vhost_conf_dir'];
        $vhost_conf_enabled_dir = $conf['apache']['vhost_conf_enabled_dir'];
        
      copy('tpl/apache_ispconfig.conf.master',$vhost_conf_dir.'/ispconfig.conf');
      // copy('tpl/apache_ispconfig.conf.master',$vhost_conf_dir.'/ispconfig.conf');
      $content = rf("tpl/apache_ispconfig.conf.master");
      $records = $this->db->queryAllRecords("SELECT * FROM server_ip WHERE server_id = ".$conf["server_id"]." AND virtualhost = 'y'");
      if(count($records) > 0) {
         foreach($records as $rec) {
            $content .= "NameVirtualHost ".$rec["ip_address"].":80\n";
            $content .= "NameVirtualHost ".$rec["ip_address"].":443\n";
         }
      }
      $content .= "\n";
      wf($vhost_conf_dir.'/ispconfig.conf',$content);
      if(!@is_link($vhost_conf_enabled_dir."/000-ispconfig.conf")) {
         exec("ln -s ".$vhost_conf_dir."/ispconfig.conf ".$vhost_conf_enabled_dir."/000-ispconfig.conf");
      }
@@ -833,7 +905,10 @@
      $content = str_replace('{mysql_master_server_database}', $conf['mysql']['master_database'], $content);
      $content = str_replace('{mysql_master_server_host}', $conf['mysql']['master_host'], $content);
      
      $content = str_replace('{server_id}', $conf['server_id'], $content);
      $content = str_replace('{ispconfig_log_priority}', $conf['ispconfig_log_priority'], $content);
      $content = str_replace('{language}', $conf['language'], $content);
      wf("$install_dir/interface/lib/$configfile", $content);
      
      //* Create the config file for ISPConfig server
@@ -854,6 +929,8 @@
      
      $content = str_replace('{server_id}', $conf['server_id'], $content);
      $content = str_replace('{ispconfig_log_priority}', $conf['ispconfig_log_priority'], $content);
      $content = str_replace('{language}', $conf['language'], $content);
      wf("$install_dir/server/lib/$configfile", $content);
      
      
@@ -908,6 +985,12 @@
      $file_server_enabled = ($conf['services']['file'])?1:0;
      $db_server_enabled = ($conf['services']['db'])?1:0;
      $vserver_server_enabled = ($conf['services']['vserver'])?1:0;
      $sql = "UPDATE `server` SET mail_server = '$mail_server_enabled', web_server = '$web_server_enabled', dns_server = '$dns_server_enabled', file_server = '$file_server_enabled', db_server = '$db_server_enabled', vserver_server = '$vserver_server_enabled' WHERE server_id = ".intval($conf['server_id']);
      
      if($conf['mysql']['master_slave_setup'] == 'y') {
@@ -991,7 +1074,8 @@
         if(!@is_link("$vhost_conf_enabled_dir/000-ispconfig.vhost")) {
            exec("ln -s $vhost_conf_dir/ispconfig.vhost $vhost_conf_enabled_dir/000-ispconfig.vhost");
         }
      }
      if(!is_file('/var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter')) {
         exec('mkdir -p /var/www/php-fcgi-scripts/ispconfig');
         exec('cp tpl/apache_ispconfig_fcgi_starter.master /var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter');
         exec('chmod +x /var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter');
@@ -1000,24 +1084,32 @@
         
      }
      
      // Make the Clamav log files readable by ISPConfig
      exec('chmod +r /var/log/clamav/clamav.log');
      exec('chmod +r /var/log/clamav/freshclam.log');
      //* Install the SVN update script
      exec('cp ../helper_scripts/update_from_svn.sh /usr/local/bin/ispconfig_update_from_svn.sh');
      exec('chown root /usr/local/bin/ispconfig_update_from_svn.sh');
      exec('chmod 700 /usr/local/bin/ispconfig_update_from_svn.sh');
      //* Install the update script
      if(is_file('/usr/local/bin/ispconfig_update_from_svn.sh')) unlink('/usr/local/bin/ispconfig_update_from_svn.sh');
      exec('chown root /usr/local/ispconfig/server/scripts/update_from_svn.sh');
      exec('chmod 700 /usr/local/ispconfig/server/scripts/update_from_svn.sh');
      exec('chown root /usr/local/ispconfig/server/scripts/update_from_tgz.sh');
      exec('chmod 700 /usr/local/ispconfig/server/scripts/update_from_tgz.sh');
      exec('chown root /usr/local/ispconfig/server/scripts/ispconfig_update.sh');
      exec('chmod 700 /usr/local/ispconfig/server/scripts/ispconfig_update.sh');
      if(!is_link('/usr/local/bin/ispconfig_update_from_svn.sh')) exec('ln -s /usr/local/ispconfig/server/scripts/ispconfig_update.sh /usr/local/bin/ispconfig_update_from_svn.sh');
      if(!is_link('/usr/local/bin/ispconfig_update.sh')) exec('ln -s /usr/local/ispconfig/server/scripts/ispconfig_update.sh /usr/local/bin/ispconfig_update.sh');
      
      //* Make the logs readable for the ispconfig user
      if(@is_file('/var/log/mail.log')) exec('chmod +r /var/log/mail.log');
      if(@is_file('/var/log/mail.warn')) exec('chmod +r /var/log/mail.warn');
      if(@is_file('/var/log/mail.err')) exec('chmod +r /var/log/mail.err');
      if(@is_file('/var/log/messages')) exec('chmod +r /var/log/messages');
      if(@is_file('/var/log/clamav/clamav.log')) exec('chmod +r /var/log/clamav/clamav.log');
      if(@is_file('/var/log/clamav/freshclam.log')) exec('chmod +r /var/log/clamav/freshclam.log');
      
      //* Create the ispconfig log directory
      if(!is_dir('/var/log/ispconfig')) mkdir('/var/log/ispconfig');
      if(!is_file('/var/log/ispconfig/ispconfig.log')) exec('touch /var/log/ispconfig/ispconfig.log');
      exec('mv /usr/local/ispconfig/server/scripts/run-getmail.sh /usr/local/bin/run-getmail.sh');
      exec('chown getmail /usr/local/bin/run-getmail.sh');
      exec('chmod 744 /usr/local/bin/run-getmail.sh');
      
      
   }
@@ -1079,12 +1171,12 @@
         $existing_cron_jobs = file('crontab.txt');
      
         $cron_jobs = array(
                '*/5 * * * * '.$cf['program'].' -n -g '.$cf['config_dir'].' -r '.$cf['config_dir'].'/*.conf > /dev/null 2>> /var/log/ispconfig/cron.log'
                '*/5 * * * * /usr/local/bin/run-getmail.sh > /dev/null 2>> /var/log/ispconfig/cron.log'
            );
      
         // remove existing ispconfig cronjobs, in case the syntax has changed
         foreach($cron_jobs as $key => $val) {
            if(stristr($val,$cf['program'])) unset($existing_cron_jobs[$key]);
         foreach($existing_cron_jobs as $key => $val) {
            if(stristr($val,'getmail')) unset($existing_cron_jobs[$key]);
         }
      
         foreach($cron_jobs as $cron_job) {