Current File : /home/inlingua/public_html/decay_sym/root/var/softaculous/apps/exim/3/install.php
<?php

function __exim_requirements(){
	
	yum('lsof', 'install');
	
	kill_by_port(25);
	
}

function __exim_install(){
	
	global $error, $globals, $infos, $distro;
	
	$distro = $globals['WU_DISTRO'];
	$ver = explode('.', $globals['os_version']);
	$os_ver = $ver[0];
	
	// Ship centos7 compiled tar fro ubuntu18 and centos7
	if(($distro == 'ubuntu' && $os_ver == '18') || ($distro == 'centos' && $os_ver == '7') || ($distro == 'cloudlinux' && $os_ver == '7')){
		vexec('rm -rf '.EXIM_APP, $out);
		vexec('cd /usr/local/apps; tar -zxf /var/softaculous/apps/exim/c7_exim-x86_64.tar.gz', $out);
	}	
	
	vexec('useradd -d /var/spool/exim -s /sbin/nologin exim');	
	
	// Check for default php
	$distro = $globals['WU_DISTRO'];
	
	vexec('ln -s '.EXIM_APP.'bin/exim  /usr/sbin/exim');
	
	// This is required to send mail from php script
	vexec('rm -rf /usr/sbin/sendmail');
	vexec('ln -s /usr/sbin/exim /usr/sbin/sendmail');
		
	if(!is_debian()){
		// Remove Exim
		yum('postfix', 'remove');
		
		yum('epel-release');
		yum('perl-GDGraph');
	}
	
	if($distro == 'centos' && $os_ver == '7'){
		yum('pcre2');
	}	
	
	// Almalinux 10 support
	if($distro == 'almalinux' && $os_ver == '10'){
		yum('libdb');
	}	
	
	// Remove exim if installed
	yum('exim*', 'remove');
	
	yum_exclude('exim*');
	
	vexec('mkdir -p /etc/exim');
	vexec('cp -f '.EXIM_WAPP.'/3/exim.conf /etc/exim/exim.conf');
	vexec('cp -f '.EXIM_WAPP.'/3/exim.pl /etc/exim/exim.pl');
	vexec('cp -f '.EXIM_WAPP.'/3/exim_system_filter /etc/exim_system_filter');
	
	// Service files
	if(file_exists('/usr/lib/systemd/system')){
		vexec('cp -f '.EXIM_WAPP.'/3/exim.service /usr/lib/systemd/system/exim.service');
	}else{
		vexec('cp -f '.EXIM_WAPP.'/3/exim.service /etc/systemd/system/exim.service');
	}
	
	if(!file_exists('/etc/sysconfig')){
		mkdir('/etc/sysconfig');
	}
	vexec('cp -f '.EXIM_WAPP.'/3/exim-env /etc/sysconfig/exim');
	
	// Need to make it for a safe side
	vexec('mkdir -p /var/spool/exim');
	vexec('chown exim:exim /var/spool/exim');
	vexec('chmod 0750 /var/spool/exim');
	
	vexec('mkdir /var/log/exim');
	vexec('chown exim:exim /var/log/exim');
	vexec('chmod 0750 /var/log/exim');
	
	// Install Syslog
	yum('rsyslog');

	vexec('systemctl restart rsyslog');
	
	// Rebuild conf
	exim_rebuild_conf();
	
	// Clean up the aliases file | Restrict email forwarders
	$disable = array('manager', 'abuse', 'www', 'webmaster', 'noc', 'security', 'hostmaster', 'info', 'marketing', 'sales', 'support');
	
	$lines = file('/etc/aliases');
	
	foreach($lines as $k => $v){
		// Update the Records
		foreach($disable as $value){
			if(preg_match('/^'.$value.'/i', $v)){
				$lines[$k] = "#$v";
			}
		}
	}
	
	// Write to File
	writefile('/etc/aliases', implode('', $lines), 1);
	
	// This file is needed to be present for suspend user check
	writefile('/etc/user_suspended_list', '', 1);

	// Copy the RBL List
	exim_create_rbl_file();
	
	exim_cert_changed($globals['certs_path'], 0);
	
	//Because on Ubuntu restarting service fails sometimes
	kill_by_port(25);
	vexec('systemctl restart exim');
	
	// Install roundcube
	exim_install_roundcube(1);
	
	// Create DKIM dirs
	exim_create_dkim_dirs();
	
}

function __exim_after_save_install(){
	
	global $globals, $softpanel;
	
	exim_configuration();
	exim_build_relayhost();
	exim_build_userdomain();
	exim_conf_files_create();
	exim_rewrite_hourly_limit();
	exim_rewrite_incoming_mail_domain();
	
	// Add the logrotate
	if (file_exists('/etc/logrotate.d/exim')){
		unlink('/etc/logrotate.d/exim');
	}
	
	copy(EXIM_WAPP.'/logrotate', '/etc/logrotate.d/exim');
	
	if(!is_dir($globals['data_path'].'/mail')){		
		mkdir($globals['data_path'].'/mail', 0750);
		chown($globals['data_path'].'/mail', $globals['panel_user']);
		vexec('chgrp -R exim '.$globals['data_path'].'/mail');
	}
	
	// Check firewalld installed and Add EXIM services in firewalld
	$status = trim(shell_exec('firewall-cmd --state 2>&1'));

	if($status == 'running'){
		vexec('firewall-cmd --zone=public --add-service=smtp --add-service=smtps --add-service=imap --add-service=imaps --add-service=pop3 --add-service=pop3s --add-service=https --add-service=dhcp --permanent && firewall-cmd --reload');
		vexec('firewall-cmd --zone=public --add-port={25/tcp,143/tcp,465/tcp,993/tcp,587/tcp} --permanent && firewall-cmd --reload');
	}
}