| | |
| | | if(is_installed('apache') || is_installed('apache2') || is_installed('httpd')) $conf['apache']['installed'] = true; |
| | | if(is_installed('getmail')) $conf['getmail']['installed'] = true; |
| | | if(is_installed('couriertcpd')) $conf['courier']['installed'] = true; |
| | | if(is_installed('dovecot')) $conf['dovecot']['installed'] = true; |
| | | if(is_installed('saslsauthd')) $conf['saslauthd']['installed'] = true; |
| | | if(is_installed('amavisd-new')) $conf['amavis']['installed'] = true; |
| | | if(is_installed('clamdscan')) $conf['clamav']['installed'] = true; |
| | | if(is_installed('pure-ftpd') || is_installed('pure-ftpd-wrapper')) $conf['pureftpd']['installed'] = true; |
| | | if(is_installed('mydns') || is_installed('mydns-ng')) $conf['mydns']['installed'] = true; |
| | | if(is_installed('jk_chrootsh')) $conf['jailkit']['installed'] = true; |
| | | |
| | | if(is_installed('pdns_server') || is_installed('pdns_control')) $conf['powerdns']['installed'] = true; |
| | | if(is_installed('named') || is_installed('bind') || is_installed('bind9')) $conf['bind']['installed'] = true; |
| | | |
| | | } |
| | | |
| | |
| | | $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']; |
| | | $tpl_ini_array['cron']['crontab_dir'] = $conf['cron']['crontab_dir']; |
| | | $tpl_ini_array['web']['security_level'] = 20; |
| | | $tpl_ini_array['web']['user'] = $conf['apache']['user']; |
| | | $tpl_ini_array['web']['group'] = $conf['apache']['group']; |
| | | $tpl_ini_array['mail']['pop3_imap_daemon'] = ($conf['dovecot']['installed'] == true)?'dovecot':'courier'; |
| | | $tpl_ini_array['mail']['mail_filter_syntax'] = ($conf['dovecot']['installed'] == true)?'sieve':'maildrop'; |
| | | $tpl_ini_array['dns']['bind_user'] = $conf['bind']['bind_user']; |
| | | $tpl_ini_array['dns']['bind_group'] = $conf['bind']['bind_group']; |
| | | $tpl_ini_array['dns']['bind_zonefiles_dir'] = $conf['bind']['bind_zonefiles_dir']; |
| | | $tpl_ini_array['dns']['named_conf_path'] = $conf['bind']['named_conf_path']; |
| | | $tpl_ini_array['dns']['named_conf_local_path'] = $conf['bind']['named_conf_local_path']; |
| | | |
| | | $server_ini_content = array_to_ini($tpl_ini_array); |
| | | $server_ini_content = mysql_real_escape_string($server_ini_content); |
| | | |
| | |
| | | $file_server_enabled = ($conf['services']['file'])?1:0; |
| | | $db_server_enabled = ($conf['services']['db'])?1:0; |
| | | $vserver_server_enabled = ($conf['services']['vserver'])?1:0; |
| | | |
| | | |
| | | |
| | | if($conf['mysql']['master_slave_setup'] == 'y') { |
| | | |
| | |
| | | $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 |
| | |
| | | |
| | | } |
| | | |
| | | 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 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 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 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)) { |
| | | $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 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)) { |
| | | $this->error('Unable to create database user in master database: '.$conf['mysql']['master_ispconfig_user'].' Error: '.$this->dbmaster->errorMessage); |
| | | } |
| | | |
| | | $query = "GRANT SELECT, INSERT, UPDATE ON ".$conf['mysql']['master_database'].".`mail_traffic` " |
| | | ."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, UPDATE ON ".$conf['mysql']['master_database'].".`web_traffic` " |
| | | ."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) |
| | |
| | | |
| | | //* 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', |
| | |
| | | $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', |
| | |
| | | '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', |
| | |
| | | $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=DRhu user='.$cf['vmail_username'].' argv=/usr/bin/maildrop -d '.$cf['vmail_username'].' ${extension} ${recipient} ${user} ${nexthop} ${sender}', |
| | | $content); |
| | | wf($configfile, $content); |
| | | |
| | |
| | | wf($configfile, $content); |
| | | } |
| | | |
| | | public function configure_dovecot() |
| | | { |
| | | global $conf; |
| | | |
| | | $config_dir = $conf['dovecot']['config_dir']; |
| | | |
| | | //* Configure master.cf and add a line for deliver |
| | | if(is_file($config_dir.'/master.cf')){ |
| | | copy($config_dir.'/master.cf', $config_dir.'/master.cf~2'); |
| | | } |
| | | if(is_file($config_dir.'/master.cf~')){ |
| | | exec('chmod 400 '.$config_dir.'/master.cf~2'); |
| | | } |
| | | $content = rf($conf["postfix"]["config_dir"].'/master.cf'); |
| | | // Only add the content if we had not addded it before |
| | | if(!stristr($content,"dovecot/deliver")) { |
| | | $deliver_content = 'dovecot unix - n n - - pipe'."\n".' flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f ${sender} -d ${user}@${nexthop}'; |
| | | af($conf["postfix"]["config_dir"].'/master.cf',$deliver_content); |
| | | } |
| | | unset($content); |
| | | unset($deliver_content); |
| | | |
| | | |
| | | //* Reconfigure postfix to use dovecot authentication |
| | | // Adding the amavisd commands to the postfix configuration |
| | | $postconf_commands = array ( |
| | | 'dovecot_destination_recipient_limit = 1', |
| | | 'virtual_transport = dovecot', |
| | | 'smtpd_sasl_type = dovecot', |
| | | 'smtpd_sasl_path = private/auth' |
| | | ); |
| | | |
| | | // Make a backup copy of the main.cf file |
| | | copy($conf["postfix"]["config_dir"].'/main.cf',$conf["postfix"]["config_dir"].'/main.cf~3'); |
| | | |
| | | // Executing the postconf commands |
| | | foreach($postconf_commands as $cmd) { |
| | | $command = "postconf -e '$cmd'"; |
| | | caselog($command." &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command"); |
| | | } |
| | | |
| | | //* copy dovecot.conf |
| | | $configfile = 'dovecot.conf'; |
| | | if(is_file("$config_dir/$configfile")){ |
| | | copy("$config_dir/$configfile", "$config_dir/$configfile~"); |
| | | } |
| | | copy('tpl/debian_dovecot.conf.master',"$config_dir/$configfile"); |
| | | |
| | | //* dovecot-sql.conf |
| | | $configfile = 'dovecot-sql.conf'; |
| | | if(is_file("$config_dir/$configfile")){ |
| | | copy("$config_dir/$configfile", "$config_dir/$configfile~"); |
| | | } |
| | | exec("chmod 400 $config_dir/$configfile~"); |
| | | $content = rf("tpl/debian_dovecot-sql.conf.master"); |
| | | $content = str_replace('{mysql_server_ispconfig_user}',$conf['mysql']['ispconfig_user'],$content); |
| | | $content = str_replace('{mysql_server_ispconfig_password}',$conf['mysql']['ispconfig_password'], $content); |
| | | $content = str_replace('{mysql_server_database}',$conf['mysql']['database'],$content); |
| | | $content = str_replace('{mysql_server_host}',$conf['mysql']['host'],$content); |
| | | wf("$config_dir/$configfile", $content); |
| | | |
| | | exec("chmod 600 $config_dir/$configfile"); |
| | | exec("chown root:root $config_dir/$configfile"); |
| | | |
| | | } |
| | | |
| | | public function configure_amavis() { |
| | | global $conf; |
| | | |
| | |
| | | |
| | | $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~"); |
| | |
| | | //exec('mkdir -p '.$config_dir.'/conf/ChrootEveryone'); |
| | | exec('echo "yes" > '.$config_dir.'/conf/ChrootEveryone'); |
| | | exec('echo "yes" > '.$config_dir.'/conf/BrokenClientsCompatibility'); |
| | | |
| | | if(is_file('/etc/default/pure-ftpd-common')) { |
| | | replaceLine('/etc/default/pure-ftpd-common','STANDALONE_OR_INETD=inetd','STANDALONE_OR_INETD=standalone',1,0); |
| | | replaceLine('/etc/default/pure-ftpd-common','VIRTUALCHROOT=false','VIRTUALCHROOT=true',1,0); |
| | | } |
| | | |
| | | if(is_file('/etc/inetd.conf')) { |
| | | replaceLine('/etc/inetd.conf','ftp stream tcp nowait root /usr/sbin/tcpd /usr/sbin/pure-ftpd-wrapper','#ftp stream tcp nowait root /usr/sbin/tcpd /usr/sbin/pure-ftpd-wrapper',1,0); |
| | | if(is_file('/etc/init.d/openbsd-inetd')) exec('/etc/init.d/openbsd-inetd restart'); |
| | | } |
| | | |
| | | if(!is_file('/etc/pure-ftpd/conf/DontResolve')) exec("echo 'yes' > /etc/pure-ftpd/conf/DontResolve"); |
| | | } |
| | | |
| | | public function configure_mydns() |
| | |
| | | |
| | | } |
| | | |
| | | public function configure_powerdns() { |
| | | global $conf; |
| | | |
| | | //* Create the database |
| | | if(!$this->db->query('CREATE DATABASE IF NOT EXISTS '.$conf['powerdns']['database'].' DEFAULT CHARACTER SET '.$conf['mysql']['charset'])) { |
| | | $this->error('Unable to create MySQL database: '.$conf['powerdns']['database'].'.'); |
| | | } |
| | | |
| | | //* Create the ISPConfig database user in the local database |
| | | $query = "GRANT ALL ON `".$conf['powerdns']['database']."` . * TO '".$conf['mysql']['ispconfig_user']."'@'localhost';"; |
| | | if(!$this->db->query($query)) { |
| | | $this->error('Unable to create user for powerdns database Error: '.$this->db->errorMessage); |
| | | } |
| | | |
| | | //* Reload database privelages |
| | | $this->db->query('FLUSH PRIVILEGES;'); |
| | | |
| | | //* load the powerdns databse dump |
| | | if($conf['mysql']['admin_password'] == '') { |
| | | caselog("mysql --default-character-set=".$conf['mysql']['charset']." -h '".$conf['mysql']['host']."' -u '".$conf['mysql']['admin_user']."' '".$conf['powerdns']['database']."' < '".ISPC_INSTALL_ROOT."/install/sql/powerdns.sql' &> /dev/null", |
| | | __FILE__, __LINE__, 'read in ispconfig3.sql', 'could not read in powerdns.sql'); |
| | | } else { |
| | | caselog("mysql --default-character-set=".$conf['mysql']['charset']." -h '".$conf['mysql']['host']."' -u '".$conf['mysql']['admin_user']."' -p'".$conf['mysql']['admin_password']."' '".$conf['powerdns']['database']."' < '".ISPC_INSTALL_ROOT."/install/sql/powerdns.sql' &> /dev/null", |
| | | __FILE__, __LINE__, 'read in ispconfig3.sql', 'could not read in powerdns.sql'); |
| | | } |
| | | |
| | | //* Create the powerdns config file |
| | | $configfile = 'pdns.local'; |
| | | if(is_file($conf["powerdns"]["config_dir"].'/'.$configfile)) copy($conf["powerdns"]["config_dir"].'/'.$configfile,$conf["powerdns"]["config_dir"].'/'.$configfile.'~'); |
| | | if(is_file($conf["powerdns"]["config_dir"].'/'.$configfile.'~')) exec('chmod 400 '.$conf["powerdns"]["config_dir"].'/'.$configfile.'~'); |
| | | $content = rf("tpl/".$configfile.".master"); |
| | | $content = str_replace('{mysql_server_ispconfig_user}',$conf['mysql']['ispconfig_user'],$content); |
| | | $content = str_replace('{mysql_server_ispconfig_password}',$conf['mysql']['ispconfig_password'], $content); |
| | | $content = str_replace('{powerdns_database}',$conf['powerdns']['database'],$content); |
| | | $content = str_replace('{mysql_server_host}',$conf["mysql"]["host"],$content); |
| | | wf($conf["powerdns"]["config_dir"].'/'.$configfile,$content); |
| | | exec('chmod 600 '.$conf["powerdns"]["config_dir"].'/'.$configfile); |
| | | exec('chown root:root '.$conf["powerdns"]["config_dir"].'/'.$configfile); |
| | | |
| | | |
| | | } |
| | | |
| | | public function configure_bind() { |
| | | global $conf; |
| | | |
| | | //* Nothing to do |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | public function configure_apache() |
| | | { |
| | | global $conf; |
| | |
| | | |
| | | 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); |
| | | replaceLine('/etc/suphp/suphp.conf','umask=0077','umask=0022',0); |
| | | } |
| | | |
| | | if(is_file('/etc/apache2/sites-enabled/000-default')) { |
| | |
| | | $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(is_array($records) && 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"); |
| | | } |
| | | |
| | | //* make sure that webalizer finds its config file when it is directly in /etc |
| | | if(@is_file('/etc/webalizer.conf') && !@is_dir('/etc/webalizer')) { |
| | | exec('mkdir /etc/webalizer'); |
| | | exec('ln -s /etc/webalizer.conf /etc/webalizer/webalizer.conf'); |
| | | } |
| | | |
| | | if(is_file('/etc/webalizer/webalizer.conf')) { |
| | | // Change webalizer mode to incremental |
| | | replaceLine('/etc/webalizer/webalizer.conf','#IncrementalName','IncrementalName webalizer.current',0,0); |
| | | replaceLine('/etc/webalizer/webalizer.conf','#Incremental','Incremental yes',0,0); |
| | | replaceLine('/etc/webalizer/webalizer.conf','#HistoryName','HistoryName webalizer.hist',0,0); |
| | | } |
| | | |
| | | //* add a sshusers group |
| | | $command = 'groupadd sshusers'; |
| | | if(!is_group('sshusers')) caselog($command.' &> /dev/null 2> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command"); |
| | | |
| | | } |
| | | |
| | |
| | | |
| | | 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__); |
| | |
| | | |
| | | } |
| | | |
| | | public function configure_vlogger() |
| | | { |
| | | global $conf; |
| | | |
| | | //** Configure vlogger to use traffic logging to mysql (master) db |
| | | $configfile = 'vlogger-dbi.conf'; |
| | | if(is_file($conf["vlogger"]["config_dir"].'/'.$configfile)) copy($conf["vlogger"]["config_dir"].'/'.$configfile,$conf["vlogger"]["config_dir"].'/'.$configfile.'~'); |
| | | if(is_file($conf["vlogger"]["config_dir"].'/'.$configfile.'~')) exec('chmod 400 '.$conf["vlogger"]["config_dir"].'/'.$configfile.'~'); |
| | | $content = rf("tpl/".$configfile.".master"); |
| | | if($conf['mysql']['master_slave_setup'] == 'y') { |
| | | $content = str_replace('{mysql_server_ispconfig_user}',$conf['mysql']['master_ispconfig_user'],$content); |
| | | $content = str_replace('{mysql_server_ispconfig_password}',$conf['mysql']['master_ispconfig_password'], $content); |
| | | $content = str_replace('{mysql_server_database}',$conf['mysql']['master_database'],$content); |
| | | $content = str_replace('{mysql_server_ip}',$conf["mysql"]["master_host"],$content); |
| | | } else { |
| | | $content = str_replace('{mysql_server_ispconfig_user}',$conf['mysql']['ispconfig_user'],$content); |
| | | $content = str_replace('{mysql_server_ispconfig_password}',$conf['mysql']['ispconfig_password'], $content); |
| | | $content = str_replace('{mysql_server_database}',$conf['mysql']['database'],$content); |
| | | $content = str_replace('{mysql_server_ip}',$conf["mysql"]["host"],$content); |
| | | } |
| | | wf($conf["vlogger"]["config_dir"].'/'.$configfile,$content); |
| | | exec('chmod 600 '.$conf["vlogger"]["config_dir"].'/'.$configfile); |
| | | exec('chown root:root '.$conf["vlogger"]["config_dir"].'/'.$configfile); |
| | | |
| | | } |
| | | |
| | | public function configure_apps_vhost() |
| | | { |
| | | global $conf; |
| | | |
| | | //* Create the ispconfig apps vhost user and group |
| | | |
| | | $apps_vhost_user = $conf['web']['apps_vhost_user']; |
| | | $apps_vhost_group = $conf['web']['apps_vhost_group']; |
| | | $install_dir = $conf['web']['website_basedir'].'/apps'; |
| | | |
| | | $command = 'groupadd '.$apps_vhost_user; |
| | | if(!is_group($apps_vhost_group)) caselog($command.' &> /dev/null 2> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command"); |
| | | |
| | | $command = "useradd -g '$apps_vhost_group' -d $install_dir $apps_vhost_group"; |
| | | if(!is_user($apps_vhost_user)) caselog($command.' &> /dev/null 2> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command"); |
| | | |
| | | |
| | | $command = 'adduser '.$conf['apache']['user'].' '.$apps_vhost_group; |
| | | caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command"); |
| | | |
| | | exec('mkdir -p '.escapeshellcmd($conf['web']['website_basedir'].'/apps')); |
| | | |
| | | //* Copy the apps vhost file |
| | | $vhost_conf_dir = $conf['apache']['vhost_conf_dir']; |
| | | $vhost_conf_enabled_dir = $conf['apache']['vhost_conf_enabled_dir']; |
| | | $apps_vhost_servername = ($conf['web']['apps_vhost_servername'] == '')?'':'ServerName '.$conf['web']['apps_vhost_servername']; |
| | | |
| | | // Dont just copy over the virtualhost template but add some custom settings |
| | | $content = rf("tpl/apache_apps.vhost.master"); |
| | | |
| | | $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); |
| | | |
| | | |
| | | // comment out the listen directive if port is 80 or 443 |
| | | if($conf['web']['apps_vhost_ip'] == 80 or $conf['web']['apps_vhost_ip'] == 443) { |
| | | $content = str_replace('{vhost_port_listen}', '#', $content); |
| | | } else { |
| | | $content = str_replace('{vhost_port_listen}', '', $content); |
| | | } |
| | | |
| | | wf("$vhost_conf_dir/apps.vhost", $content); |
| | | |
| | | //copy('tpl/apache_ispconfig.vhost.master', "$vhost_conf_dir/ispconfig.vhost"); |
| | | //* and create the symlink |
| | | if($this->install_ispconfig_interface == true) { |
| | | if(@is_link("$vhost_conf_enabled_dir/apps.vhost")) unlink("$vhost_conf_enabled_dir/apps.vhost"); |
| | | if(!@is_link("$vhost_conf_enabled_dir/000-apps.vhost")) { |
| | | exec("ln -s $vhost_conf_dir/apps.vhost $vhost_conf_enabled_dir/000-apps.vhost"); |
| | | } |
| | | } |
| | | if(!is_file($conf['web']['website_basedir'].'/php-fcgi-scripts/apps/.php-fcgi-starter')) { |
| | | exec('mkdir -p '.$conf['web']['website_basedir'].'/php-fcgi-scripts/apps'); |
| | | exec('cp tpl/apache_apps_fcgi_starter.master '.$conf['web']['website_basedir'].'/php-fcgi-scripts/apps/.php-fcgi-starter'); |
| | | exec('chmod +x '.$conf['web']['website_basedir'].'/php-fcgi-scripts/apps/.php-fcgi-starter'); |
| | | exec('chown -R ispapps:ispapps '.$conf['web']['website_basedir'].'/php-fcgi-scripts/apps'); |
| | | |
| | | } |
| | | |
| | | } |
| | | |
| | | public function install_ispconfig() |
| | | { |
| | | global $conf; |
| | |
| | | $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 |
| | |
| | | |
| | | $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); |
| | | |
| | | |
| | |
| | | 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'); |
| | |
| | | |
| | | } |
| | | |
| | | //* 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'); |
| | |
| | | //* 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'); |
| | | |
| | | |
| | | } |
| | |
| | | $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) { |
| | |
| | | |
| | | } |
| | | |
| | | /** |
| | | * 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; |
| | | } |
| | | } |
| | | |
| | | ?> |