function show() { global $app, $conf; //* Loading Template $app->uses('tpl'); $tpl = new tpl(); $tpl->newTemplate("dashlets/templates/modules.htm"); $wb = array(); $lng_file = 'lib/lang/' . $_SESSION['s']['language'] . '_dashlet_modules.lng'; if (is_file($lng_file)) { include $lng_file; } $tpl->setVar($wb); /* * Show all modules, the user is allowed to use */ $modules = explode(',', $_SESSION['s']['user']['modules']); $mod = array(); if (is_array($modules)) { foreach ($modules as $mt) { if (is_file('../' . $mt . '/lib/module.conf.php')) { if (!preg_match("/^[a-z]{2,20}\$/i", $mt)) { die('module name contains unallowed chars.'); } include_once '../' . $mt . '/lib/module.conf.php'; /* We don't want to show the dashboard */ if ($mt != 'dashboard') { $module_title = $app->lng($module['title']); if (function_exists('mb_strlen')) { if (mb_strlen($module_title, "UTF-8") > 8) { $module_title = mb_substr($module_title, 0, 7, "UTF-8") . '..'; } } else { if (strlen($module_title) > 8) { $module_title = substr($module_title, 0, 7) . '..'; } } $mod[] = array('modules_title' => $module_title, 'modules_startpage' => $module['startpage'], 'modules_name' => $module['name']); } } } $tpl->setloop('modules', $mod); } return $tpl->grab(); }
function update($event_name, $data) { global $app, $conf; $domains = $this->_getSquidDomains($app); $rules = $this->_getSquidRewriteRules($app); $app->load('tpl'); $tpl = new tpl(); $tpl->newTemplate("squidRewriteRules.py.master"); if (!empty($rules)) { $tpl->setLoop('squid_rewrite_rules', $rules); } file_put_contents('/etc/squid/squidRewriteRules.py', $tpl->grab()); unset($tpl); $app->log('Writing squid rewrite configuration to /etc/squid/squidRewriteRules.py', LOGLEVEL_DEBUG); $tpl = new tpl(); $tpl->newTemplate("domains.txt.master"); $tpl->setLoop('squid_domains', $domains); file_put_contents('/etc/squid/domains.txt', $tpl->grab()); unset($tpl); $app->log('Writing squid domains configuration to /etc/squid/domains.txt', LOGLEVEL_DEBUG); // request a httpd reload when all records have been processed $app->services->restartServiceDelayed('squid', 'restart'); }
public function configure_apache() { global $conf; if ($conf['apache']['installed'] == false) { return; } //* Create the logging directory for the vhost logfiles if (!is_dir($conf['ispconfig_log_dir'] . '/httpd')) { mkdir($conf['ispconfig_log_dir'] . '/httpd', 0755, true); } if (is_file($conf['suphp']['config_file'])) { $content = rf($conf['suphp']['config_file']); if (!preg_match('|^x-httpd-suphp=php:/usr/bin/php-cgi$|m', $content)) { $content = preg_replace('/;Handler for php-scripts/', ";Handler for php-scripts\nx-httpd-suphp=php:/usr/bin/php-cgi", $content); $content = preg_replace('/;?umask=\\d+/', 'umask=0022', $content); } $this->write_config_file($conf['suphp']['config_file'], $content); } //* Enable ISPConfig default vhost settings $default_vhost_path = $conf['apache']['vhost_conf_dir'] . '/' . $conf['apache']['vhost_default']; if (is_file($default_vhost_path)) { $content = rf($default_vhost_path); $content = preg_replace('/^#?\\s*NameVirtualHost.*$/m', 'NameVirtualHost *:80', $content); $content = preg_replace('/<VirtualHost[^>]+>/', '<VirtualHost *:80>', $content); $this->write_config_file($default_vhost_path, $content); } //* Generate default ssl certificates if (!is_dir($conf['apache']['ssl_dir'])) { mkdir($conf['apache']['ssl_dir']); } if ($conf['services']['mail'] == true) { copy($conf['postfix']['config_dir'] . "/smtpd.key", $conf['apache']['ssl_dir'] . "/server.key"); copy($conf['postfix']['config_dir'] . "/smtpd.cert", $conf['apache']['ssl_dir'] . "/server.crt"); } else { if (!is_file($conf['apache']['ssl_dir'] . '/server.crt')) { exec("openssl req -new -outform PEM -out {$conf['apache']['ssl_dir']}/server.crt -newkey rsa:2048 -nodes -keyout {$conf['apache']['ssl_dir']}/server.key -keyform PEM -days 365 -x509"); } } //* Copy the ISPConfig configuration include /* $content = $this->get_template_file('apache_ispconfig.conf', true); $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"; } } $this->write_config_file($conf['apache']['vhost_conf_dir'].'/000-ispconfig.conf', $content); */ $tpl = new tpl('apache_ispconfig.conf.master'); $tpl->setVar('apache_version', getapacheversion()); $records = $this->db->queryAllRecords('SELECT * FROM ' . $conf['mysql']['master_database'] . '.server_ip WHERE server_id = ' . $conf['server_id'] . " AND virtualhost = 'y'"); $ip_addresses = array(); if (is_array($records) && count($records) > 0) { foreach ($records as $rec) { if ($rec['ip_type'] == 'IPv6') { $ip_address = '[' . $rec['ip_address'] . ']'; } else { $ip_address = $rec['ip_address']; } $ports = explode(',', $rec['virtualhost_port']); if (is_array($ports)) { foreach ($ports as $port) { $port = intval($port); if ($port > 0 && $port < 65536 && $ip_address != '') { $ip_addresses[] = array('ip_address' => $ip_address, 'port' => $port); } } } } } if (count($ip_addresses) > 0) { $tpl->setLoop('ip_adresses', $ip_addresses); } wf($conf['apache']['vhost_conf_dir'] . '/000-ispconfig.conf', $tpl->grab()); unset($tpl); //* Gentoo by default does not include .vhost files. Add include line to config file. $content = rf($conf['apache']['config_file']); if (strpos($content, 'Include /etc/apache2/vhosts.d/*.vhost') === false) { $content = preg_replace('|(Include /etc/apache2/vhosts.d/\\*.conf)|', "\$1\nInclude /etc/apache2/vhosts.d/*.vhost", $content); } $this->write_config_file($conf['apache']['config_file'], $content); //* make sure that webalizer finds its config file when it is directly in /etc if (is_file('/etc/webalizer.conf') && !is_dir('/etc/webalizer')) { mkdir('/etc/webalizer', 0755); symlink('/etc/webalizer.conf', '/etc/webalizer/webalizer.conf'); } if (is_file('/etc/webalizer/webalizer.conf')) { 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 if (!is_group('sshusers')) { $command = 'groupadd sshusers'; caselog($command . ' &> /dev/null 2> /dev/null', __FILE__, __LINE__, "EXECUTED: {$command}", "Failed to execute the command {$command}"); } }
function show() { global $app, $conf; //* Loading Template $app->uses('tpl'); $tpl = new tpl(); $tpl->newTemplate("dashlets/templates/quota.htm"); $wb = array(); $lng_file = 'lib/lang/' . $_SESSION['s']['language'] . '_dashlet_quota.lng'; if (is_file($lng_file)) { include $lng_file; } $tpl->setVar($wb); $tmp_rec = $app->db->queryAllRecords("SELECT data from monitor_data WHERE type = 'harddisk_quota' ORDER BY created DESC"); $monitor_data = array(); if (is_array($tmp_rec)) { foreach ($tmp_rec as $tmp_mon) { $monitor_data = array_merge_recursive($monitor_data, unserialize($app->db->unquote($tmp_mon['data']))); } } //print_r($monitor_data); if ($_SESSION["s"]["user"]["typ"] != 'admin') { $sql_where = " AND sys_groupid = " . $app->functions->intval($_SESSION['s']['user']['default_group']); } $has_quota = false; // select websites belonging to client $sites = $app->db->queryAllRecords("SELECT * FROM web_domain WHERE active = 'y' AND type = 'vhost'" . $sql_where); //print_r($sites); if (is_array($sites) && !empty($sites)) { for ($i = 0; $i < sizeof($sites); $i++) { $username = $sites[$i]['system_user']; $sites[$i]['used'] = $monitor_data['user'][$username]['used']; $sites[$i]['soft'] = $monitor_data['user'][$username]['soft']; $sites[$i]['hard'] = $monitor_data['user'][$username]['hard']; $sites[$i]['files'] = $monitor_data['user'][$username]['files']; if (!is_numeric($sites[$i]['used'])) { if ($sites[$i]['used'][0] > $sites[$i]['used'][1]) { $sites[$i]['used'] = $sites[$i]['used'][0]; } else { $sites[$i]['used'] = $sites[$i]['used'][1]; } } if (!is_numeric($sites[$i]['soft'])) { $sites[$i]['soft'] = $sites[$i]['soft'][1]; } if (!is_numeric($sites[$i]['hard'])) { $sites[$i]['hard'] = $sites[$i]['hard'][1]; } if (!is_numeric($sites[$i]['files'])) { $sites[$i]['files'] = $sites[$i]['files'][1]; } // colours $sites[$i]['display_colour'] = '#000000'; if ($sites[$i]['soft'] > 0) { $used_ratio = $sites[$i]['used'] / $sites[$i]['soft']; } else { $used_ratio = 0; } if ($used_ratio >= 0.8) { $sites[$i]['display_colour'] = '#fd934f'; } if ($used_ratio >= 1) { $sites[$i]['display_colour'] = '#cc0000'; } if ($sites[$i]['used'] > 1024) { $sites[$i]['used'] = round($sites[$i]['used'] / 1024, 2) . ' MB'; } else { if ($sites[$i]['used'] != '') { $sites[$i]['used'] .= ' KB'; } } if ($sites[$i]['soft'] > 1024) { $sites[$i]['soft'] = round($sites[$i]['soft'] / 1024, 2) . ' MB'; } else { $sites[$i]['soft'] .= ' KB'; } if ($sites[$i]['hard'] > 1024) { $sites[$i]['hard'] = round($sites[$i]['hard'] / 1024, 2) . ' MB'; } else { $sites[$i]['hard'] .= ' KB'; } if ($sites[$i]['soft'] == " KB") { $sites[$i]['soft'] = $app->lng('unlimited'); } if ($sites[$i]['hard'] == " KB") { $sites[$i]['hard'] = $app->lng('unlimited'); } /* if(!strstr($sites[$i]['used'],'M') && !strstr($sites[$i]['used'],'K')) $sites[$i]['used'].= ' B'; if(!strstr($sites[$i]['soft'],'M') && !strstr($sites[$i]['soft'],'K')) $sites[$i]['soft'].= ' B'; if(!strstr($sites[$i]['hard'],'M') && !strstr($sites[$i]['hard'],'K')) $sites[$i]['hard'].= ' B'; */ if ($sites[$i]['soft'] == '0 B' || $sites[$i]['soft'] == '0 KB' || $sites[$i]['soft'] == '0') { $sites[$i]['soft'] = $app->lng('unlimited'); } if ($sites[$i]['hard'] == '0 B' || $sites[$i]['hard'] == '0 KB' || $sites[$i]['hard'] == '0') { $sites[$i]['hard'] = $app->lng('unlimited'); } } $has_quota = true; $tpl->setloop('quota', $sites); } //print_r($sites); $tpl->setVar('has_quota', $has_quota); return $tpl->grab(); }
function show() { global $app, $conf; $limits = array(); /* Limits to be shown*/ $limits[] = array('field' => 'limit_maildomain', 'db_table' => 'mail_domain', 'db_where' => ''); $limits[] = array('field' => 'limit_mailmailinglist', 'db_table' => 'mail_mailinglist', 'db_where' => ''); $limits[] = array('field' => 'limit_mailbox', 'db_table' => 'mail_user', 'db_where' => ''); $limits[] = array('field' => 'limit_mailalias', 'db_table' => 'mail_forwarding', 'db_where' => "type = 'alias'"); $limits[] = array('field' => 'limit_mailaliasdomain', 'db_table' => 'mail_forwarding', 'db_where' => "type = 'aliasdomain'"); $limits[] = array('field' => 'limit_mailforward', 'db_table' => 'mail_forwarding', 'db_where' => "type = 'forward'"); $limits[] = array('field' => 'limit_mailcatchall', 'db_table' => 'mail_forwarding', 'db_where' => "type = 'catchall'"); $limits[] = array('field' => 'limit_mailrouting', 'db_table' => 'mail_transport', 'db_where' => ""); $limits[] = array('field' => 'limit_mailfilter', 'db_table' => 'mail_user_filter', 'db_where' => ""); $limits[] = array('field' => 'limit_fetchmail', 'db_table' => 'mail_get', 'db_where' => ""); $limits[] = array('field' => 'limit_spamfilter_wblist', 'db_table' => 'spamfilter_wblist', 'db_where' => ""); $limits[] = array('field' => 'limit_spamfilter_user', 'db_table' => 'spamfilter_users', 'db_where' => ""); $limits[] = array('field' => 'limit_spamfilter_policy', 'db_table' => 'spamfilter_policy', 'db_where' => ""); $limits[] = array('field' => 'limit_web_domain', 'db_table' => 'web_domain', 'db_where' => "type = 'vhost'"); $limits[] = array('field' => 'limit_web_subdomain', 'db_table' => 'web_domain', 'db_where' => "(type = 'subdomain' OR type = 'vhostsubdomain')"); $limits[] = array('field' => 'limit_web_aliasdomain', 'db_table' => 'web_domain', 'db_where' => "type = 'alias'"); $limits[] = array('field' => 'limit_ftp_user', 'db_table' => 'ftp_user', 'db_where' => ""); $limits[] = array('field' => 'limit_shell_user', 'db_table' => 'shell_user', 'db_where' => ""); $limits[] = array('field' => 'limit_dns_zone', 'db_table' => 'dns_soa', 'db_where' => ""); $limits[] = array('field' => 'limit_dns_slave_zone', 'db_table' => 'dns_slave', 'db_where' => ""); $limits[] = array('field' => 'limit_dns_record', 'db_table' => 'dns_rr', 'db_where' => ""); $limits[] = array('field' => 'limit_database', 'db_table' => 'web_database', 'db_where' => ""); $limits[] = array('field' => 'limit_cron', 'db_table' => 'cron', 'db_where' => ""); $limits[] = array('field' => 'limit_client', 'db_table' => 'client', 'db_where' => ""); //* Loading Template $app->uses('tpl,tform'); $tpl = new tpl(); $tpl->newTemplate("dashlets/templates/limits.htm"); $wb = array(); $lng_file = 'lib/lang/' . $_SESSION['s']['language'] . '_dashlet_limits.lng'; if (is_file($lng_file)) { include $lng_file; } $tpl->setVar($wb); if ($app->auth->is_admin()) { $user_is_admin = true; } else { $user_is_admin = false; } $tpl->setVar('is_admin', $user_is_admin); if ($user_is_admin == false) { $client_group_id = $_SESSION["s"]["user"]["default_group"]; $client = $app->db->queryOneRecord("SELECT * FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = {$client_group_id}"); } $rows = array(); foreach ($limits as $limit) { $field = $limit['field']; if ($user_is_admin) { $value = $wb['unlimited_txt']; } else { $value = $client[$field]; } if ($value != 0 || $value == $wb['unlimited_txt']) { $value_formatted = $value == '-1' ? $wb['unlimited_txt'] : $value; $rows[] = array('field' => $field, 'field_txt' => $wb[$field . '_txt'], 'value' => $value_formatted, 'usage' => $this->_get_limit_usage($limit)); } } $tpl->setLoop('rows', $rows); return $tpl->grab(); }
public function install_ispconfig() { global $conf; $install_dir = $conf['ispconfig_install_dir']; //* Create the ISPConfig installation directory if (!@is_dir($install_dir)) { $command = "mkdir {$install_dir}"; caselog($command . ' &> /dev/null', __FILE__, __LINE__, "EXECUTED: {$command}", "Failed to execute the command {$command}"); } //* Create a ISPConfig user and group $command = 'groupadd ispconfig'; if (!is_group('ispconfig')) { caselog($command . ' &> /dev/null 2> /dev/null', __FILE__, __LINE__, "EXECUTED: {$command}", "Failed to execute the command {$command}"); } $command = 'useradd -g ispconfig -d ' . $install_dir . ' ispconfig'; if (!is_user('ispconfig')) { caselog($command . ' &> /dev/null 2> /dev/null', __FILE__, __LINE__, "EXECUTED: {$command}", "Failed to execute the command {$command}"); } //* copy the ISPConfig interface part $command = 'cp -rf ../interface ' . $install_dir; caselog($command . ' &> /dev/null', __FILE__, __LINE__, "EXECUTED: {$command}", "Failed to execute the command {$command}"); //* copy the ISPConfig server part $command = 'cp -rf ../server ' . $install_dir; caselog($command . ' &> /dev/null', __FILE__, __LINE__, "EXECUTED: {$command}", "Failed to execute the command {$command}"); //* Make a backup of the security settings if (is_file('/usr/local/ispconfig/security/security_settings.ini')) { copy('/usr/local/ispconfig/security/security_settings.ini', '/usr/local/ispconfig/security/security_settings.ini~'); } //* copy the ISPConfig security part $command = 'cp -rf ../security ' . $install_dir; caselog($command . ' &> /dev/null', __FILE__, __LINE__, "EXECUTED: {$command}", "Failed to execute the command {$command}"); //* Apply changed security_settings.ini values to new security_settings.ini file if (is_file('/usr/local/ispconfig/security/security_settings.ini~')) { $security_settings_old = ini_to_array(file_get_contents('/usr/local/ispconfig/security/security_settings.ini~')); $security_settings_new = ini_to_array(file_get_contents('/usr/local/ispconfig/security/security_settings.ini')); if (is_array($security_settings_new) && is_array($security_settings_old)) { foreach ($security_settings_new as $section => $sval) { if (is_array($sval)) { foreach ($sval as $key => $val) { if (isset($security_settings_old[$section]) && isset($security_settings_old[$section][$key])) { $security_settings_new[$section][$key] = $security_settings_old[$section][$key]; } } } } file_put_contents('/usr/local/ispconfig/security/security_settings.ini', array_to_ini($security_settings_new)); } } //* Create a symlink, so ISPConfig is accessible via web // Replaced by a separate vhost definition for port 8080 // $command = "ln -s $install_dir/interface/web/ /home/www/ispconfig"; // caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command"); //* Create the config file for ISPConfig interface $configfile = 'config.inc.php'; if (is_file($install_dir . '/interface/lib/' . $configfile)) { copy($install_dir . '/interface/lib/' . $configfile, $install_dir . '/interface/lib/' . $configfile . '~'); } $content = rfsel($conf['ispconfig_install_dir'] . '/server/conf-custom/install/' . $configfile . '.master', '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('{mysql_server_database}', $conf['mysql']['database'], $content); $content = str_replace('{mysql_server_host}', $conf['mysql']['host'], $content); $content = str_replace('{mysql_master_server_ispconfig_user}', $conf['mysql']['master_ispconfig_user'], $content); $content = str_replace('{mysql_master_server_ispconfig_password}', $conf['mysql']['master_ispconfig_password'], $content); $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); $content = str_replace('{timezone}', $conf['timezone'], $content); $content = str_replace('{theme}', $conf['theme'], $content); $content = str_replace('{language_file_import_enabled}', $conf['language_file_import_enabled'] == true ? 'true' : 'false', $content); wf($install_dir . '/interface/lib/' . $configfile, $content); //* Create the config file for ISPConfig server $configfile = 'config.inc.php'; if (is_file($install_dir . '/server/lib/' . $configfile)) { copy($install_dir . '/server/lib/' . $configfile, $install_dir . '/interface/lib/' . $configfile . '~'); } $content = rfsel($conf['ispconfig_install_dir'] . '/server/conf-custom/install/' . $configfile . '.master', '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('{mysql_server_database}', $conf['mysql']['database'], $content); $content = str_replace('{mysql_server_host}', $conf['mysql']['host'], $content); $content = str_replace('{mysql_master_server_ispconfig_user}', $conf['mysql']['master_ispconfig_user'], $content); $content = str_replace('{mysql_master_server_ispconfig_password}', $conf['mysql']['master_ispconfig_password'], $content); $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); $content = str_replace('{timezone}', $conf['timezone'], $content); $content = str_replace('{theme}', $conf['theme'], $content); $content = str_replace('{language_file_import_enabled}', $conf['language_file_import_enabled'] == true ? 'true' : 'false', $content); wf($install_dir . '/server/lib/' . $configfile, $content); //* Create the config file for remote-actions (but only, if it does not exist, because // the value is a autoinc-value and so changed by the remoteaction_core_module if (!file_exists($install_dir . '/server/lib/remote_action.inc.php')) { $content = '<?php' . "\n" . '$maxid_remote_action = 0;' . "\n" . '?>'; wf($install_dir . '/server/lib/remote_action.inc.php', $content); } //* Enable the server modules and plugins. // TODO: Implement a selector which modules and plugins shall be enabled. $dir = $install_dir . '/server/mods-available/'; if (is_dir($dir)) { if ($dh = opendir($dir)) { while (($file = readdir($dh)) !== false) { if ($file != '.' && $file != '..' && substr($file, -8, 8) == '.inc.php') { include_once $install_dir . '/server/mods-available/' . $file; $module_name = substr($file, 0, -8); $tmp = new $module_name(); if ($tmp->onInstall()) { if (!@is_link($install_dir . '/server/mods-enabled/' . $file)) { @symlink($install_dir . '/server/mods-available/' . $file, $install_dir . '/server/mods-enabled/' . $file); // @symlink($install_dir.'/server/mods-available/'.$file, '../mods-enabled/'.$file); } if (strpos($file, '_core_module') !== false) { if (!@is_link($install_dir . '/server/mods-core/' . $file)) { @symlink($install_dir . '/server/mods-available/' . $file, $install_dir . '/server/mods-core/' . $file); // @symlink($install_dir.'/server/mods-available/'.$file, '../mods-core/'.$file); } } } unset($tmp); } } closedir($dh); } } $dir = $install_dir . '/server/plugins-available/'; if (is_dir($dir)) { if ($dh = opendir($dir)) { while (($file = readdir($dh)) !== false) { if ($conf['apache']['installed'] == true && $file == 'nginx_plugin.inc.php') { continue; } if ($conf['nginx']['installed'] == true && $file == 'apache2_plugin.inc.php') { continue; } if ($file != '.' && $file != '..' && substr($file, -8, 8) == '.inc.php') { include_once $install_dir . '/server/plugins-available/' . $file; $plugin_name = substr($file, 0, -8); $tmp = new $plugin_name(); if (method_exists($tmp, 'onInstall') && $tmp->onInstall()) { if (!@is_link($install_dir . '/server/plugins-enabled/' . $file)) { @symlink($install_dir . '/server/plugins-available/' . $file, $install_dir . '/server/plugins-enabled/' . $file); //@symlink($install_dir.'/server/plugins-available/'.$file, '../plugins-enabled/'.$file); } if (strpos($file, '_core_plugin') !== false) { if (!@is_link($install_dir . '/server/plugins-core/' . $file)) { @symlink($install_dir . '/server/plugins-available/' . $file, $install_dir . '/server/plugins-core/' . $file); //@symlink($install_dir.'/server/plugins-available/'.$file, '../plugins-core/'.$file); } } } unset($tmp); } } closedir($dh); } } // Update the server config $mail_server_enabled = $conf['services']['mail'] ? 1 : 0; $web_server_enabled = $conf['services']['web'] ? 1 : 0; $dns_server_enabled = $conf['services']['dns'] ? 1 : 0; $file_server_enabled = $conf['services']['file'] ? 1 : 0; $db_server_enabled = $conf['services']['db'] ? 1 : 0; $vserver_server_enabled = $conf['openvz']['installed'] ? 1 : 0; $proxy_server_enabled = $conf['services']['proxy'] ? 1 : 0; $firewall_server_enabled = $conf['services']['firewall'] ? 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}', proxy_server = '{$proxy_server_enabled}', firewall_server = '{$firewall_server_enabled}' WHERE server_id = " . intval($conf['server_id']); if ($conf['mysql']['master_slave_setup'] == 'y') { $this->dbmaster->query($sql); $this->db->query($sql); } else { $this->db->query($sql); } // chown install dir to root and chmod 755 $command = 'chown root:root ' . $install_dir; caselog($command . ' &> /dev/null', __FILE__, __LINE__, "EXECUTED: {$command}", "Failed to execute the command {$command}"); $command = 'chmod 755 ' . $install_dir; caselog($command . ' &> /dev/null', __FILE__, __LINE__, "EXECUTED: {$command}", "Failed to execute the command {$command}"); //* Chmod the files and directories in the install dir $command = 'chmod -R 750 ' . $install_dir . '/*'; caselog($command . ' &> /dev/null', __FILE__, __LINE__, "EXECUTED: {$command}", "Failed to execute the command {$command}"); //* chown the interface files to the ispconfig user and group $command = 'chown -R ispconfig:ispconfig ' . $install_dir . '/interface'; caselog($command . ' &> /dev/null', __FILE__, __LINE__, "EXECUTED: {$command}", "Failed to execute the command {$command}"); //* chown the server files to the root user and group $command = 'chown -R root:root ' . $install_dir . '/server'; caselog($command . ' &> /dev/null', __FILE__, __LINE__, "EXECUTED: {$command}", "Failed to execute the command {$command}"); //* chown the security files to the root user and group $command = 'chown -R root:root ' . $install_dir . '/security'; caselog($command . ' &> /dev/null', __FILE__, __LINE__, "EXECUTED: {$command}", "Failed to execute the command {$command}"); //* chown the security directory and security_settings.ini to root:ispconfig $command = 'chown root:ispconfig ' . $install_dir . '/security/security_settings.ini'; 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"); //* Make the temp directory for language file exports writable 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'); while ($file = @readdir($handle)) { if ($file != '.' && $file != '..') { if (@is_dir($install_dir . '/interface/web' . '/' . $file . '/lib/lang')) { $handle2 = opendir($install_dir . '/interface/web' . '/' . $file . '/lib/lang'); chmod($install_dir . '/interface/web' . '/' . $file . '/lib/lang', 0770); while ($lang_file = @readdir($handle2)) { if ($lang_file != '.' && $lang_file != '..') { chmod($install_dir . '/interface/web' . '/' . $file . '/lib/lang/' . $lang_file, 0770); } } } } } //* Make the APS directories group writable exec("chmod -R 770 {$install_dir}/interface/web/sites/aps_meta_packages"); exec("chmod -R 770 {$install_dir}/server/aps_packages"); //* make sure that the server config file (not the interface one) is only readable by the root user chmod($install_dir . '/server/lib/config.inc.php', 0600); chown($install_dir . '/server/lib/config.inc.php', 'root'); chgrp($install_dir . '/server/lib/config.inc.php', 'root'); //* Make sure thet the interface config file is readable by user ispconfig only chmod($install_dir . '/interface/lib/config.inc.php', 0600); chown($install_dir . '/interface/lib/config.inc.php', 'ispconfig'); chgrp($install_dir . '/interface/lib/config.inc.php', 'ispconfig'); chmod($install_dir . '/server/lib/remote_action.inc.php', 0600); chown($install_dir . '/server/lib/remote_action.inc.php', 'root'); chgrp($install_dir . '/server/lib/remote_action.inc.php', 'root'); if (@is_file($install_dir . '/server/lib/mysql_clientdb.conf')) { chmod($install_dir . '/server/lib/mysql_clientdb.conf', 0600); chown($install_dir . '/server/lib/mysql_clientdb.conf', 'root'); chgrp($install_dir . '/server/lib/mysql_clientdb.conf', 'root'); } 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. // Later this must run as own apache server or via suexec! if ($conf['apache']['installed'] == true) { $command = 'adduser ' . $conf['apache']['user'] . ' ispconfig'; caselog($command . ' &> /dev/null', __FILE__, __LINE__, "EXECUTED: {$command}", "Failed to execute the command {$command}"); if (is_group('ispapps')) { $command = 'adduser ' . $conf['apache']['user'] . ' ispapps'; caselog($command . ' &> /dev/null', __FILE__, __LINE__, "EXECUTED: {$command}", "Failed to execute the command {$command}"); } } if ($conf['nginx']['installed'] == true) { $command = 'adduser ' . $conf['nginx']['user'] . ' ispconfig'; caselog($command . ' &> /dev/null', __FILE__, __LINE__, "EXECUTED: {$command}", "Failed to execute the command {$command}"); if (is_group('ispapps')) { $command = 'adduser ' . $conf['nginx']['user'] . ' ispapps'; caselog($command . ' &> /dev/null', __FILE__, __LINE__, "EXECUTED: {$command}", "Failed to execute the command {$command}"); } } //* Make the shell scripts executable $command = "chmod +x {$install_dir}/server/scripts/*.sh"; caselog($command . ' &> /dev/null', __FILE__, __LINE__, "EXECUTED: {$command}", "Failed to execute the command {$command}"); if ($conf['apache']['installed'] == true && $this->install_ispconfig_interface == true) { //* Copy the ISPConfig vhost for the controlpanel $vhost_conf_dir = $conf['apache']['vhost_conf_dir']; $vhost_conf_enabled_dir = $conf['apache']['vhost_conf_enabled_dir']; // Dont just copy over the virtualhost template but add some custom settings $tpl = new tpl('apache_ispconfig.vhost.master'); $tpl->setVar('vhost_port', $conf['apache']['vhost_port']); // comment out the listen directive if port is 80 or 8443 if ($conf['apache']['vhost_port'] == 80 or $conf['apache']['vhost_port'] == 8443) { $tpl->setVar('vhost_port_listen', '#'); } else { $tpl->setVar('vhost_port_listen', ''); } if (is_file($install_dir . '/interface/ssl/ispserver.crt') && is_file($install_dir . '/interface/ssl/ispserver.key')) { $tpl->setVar('ssl_comment', ''); } else { $tpl->setVar('ssl_comment', '#'); } if (is_file($install_dir . '/interface/ssl/ispserver.crt') && is_file($install_dir . '/interface/ssl/ispserver.key') && is_file($install_dir . '/interface/ssl/ispserver.bundle')) { $tpl->setVar('ssl_bundle_comment', ''); } else { $tpl->setVar('ssl_bundle_comment', '#'); } $tpl->setVar('apache_version', getapacheversion()); wf($vhost_conf_dir . '/ispconfig.vhost', $tpl->grab()); //* and create the symlink if ($this->is_update == false) { if (@is_link($vhost_conf_enabled_dir . '/ispconfig.vhost')) { unlink($vhost_conf_enabled_dir . '/ispconfig.vhost'); } if (!@is_link($vhost_conf_enabled_dir . '/000-ispconfig.vhost')) { symlink($vhost_conf_dir . '/ispconfig.vhost', $vhost_conf_enabled_dir . '/000-ispconfig.vhost'); } } //if(!is_file('/home/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter')) { $content = rfsel($conf['ispconfig_install_dir'] . '/server/conf-custom/install/apache_ispconfig_fcgi_starter.master', 'tpl/apache_ispconfig_fcgi_starter.master'); $content = str_replace('{fastcgi_bin}', $conf['fastcgi']['fastcgi_bin'], $content); $content = str_replace('{fastcgi_phpini_path}', $conf['fastcgi']['fastcgi_phpini_path'], $content); @mkdir('/home/www/php-fcgi-scripts/ispconfig', 0755, true); wf('/home/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter', $content); exec('chmod +x /home/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter'); @symlink($install_dir . '/interface/web', '/home/www/ispconfig'); exec('chown -R ispconfig:ispconfig /home/www/php-fcgi-scripts/ispconfig'); //} } if ($conf['nginx']['installed'] == true && $this->install_ispconfig_interface == true) { //* Copy the ISPConfig vhost for the controlpanel $vhost_conf_dir = $conf['nginx']['vhost_conf_dir']; $vhost_conf_enabled_dir = $conf['nginx']['vhost_conf_enabled_dir']; // Dont just copy over the virtualhost template but add some custom settings $content = rfsel($conf['ispconfig_install_dir'] . '/server/conf-custom/install/nginx_ispconfig.vhost.master', 'tpl/nginx_ispconfig.vhost.master'); $content = str_replace('{vhost_port}', $conf['nginx']['vhost_port'], $content); if (is_file($install_dir . '/interface/ssl/ispserver.crt') && is_file($install_dir . '/interface/ssl/ispserver.key')) { $content = str_replace('{ssl_on}', 'on', $content); $content = str_replace('{ssl_comment}', '', $content); $content = str_replace('{fastcgi_ssl}', 'on', $content); } else { $content = str_replace('{ssl_on}', 'off', $content); $content = str_replace('{ssl_comment}', '#', $content); $content = str_replace('{fastcgi_ssl}', 'off', $content); } $socket_dir = escapeshellcmd($conf['nginx']['php_fpm_socket_dir']); if (substr($socket_dir, -1) != '/') { $socket_dir .= '/'; } if (!is_dir($socket_dir)) { exec('mkdir -p ' . $socket_dir); } $fpm_socket = $socket_dir . 'ispconfig.sock'; //$content = str_replace('{fpm_port}', $conf['nginx']['php_fpm_start_port'], $content); $content = str_replace('{fpm_socket}', $fpm_socket, $content); wf($vhost_conf_dir . '/ispconfig.vhost', $content); unset($content); // PHP-FPM // Dont just copy over the php-fpm pool template but add some custom settings $content = rfsel($conf['ispconfig_install_dir'] . '/server/conf-custom/install/php_fpm_pool.conf.master', 'tpl/php_fpm_pool.conf.master'); $content = str_replace('{fpm_pool}', 'ispconfig', $content); //$content = str_replace('{fpm_port}', $conf['nginx']['php_fpm_start_port'], $content); $content = str_replace('{fpm_socket}', $fpm_socket, $content); $content = str_replace('{fpm_user}', 'ispconfig', $content); $content = str_replace('{fpm_group}', 'ispconfig', $content); wf($conf['nginx']['php_fpm_pool_dir'] . '/ispconfig.conf', $content); //copy('tpl/nginx_ispconfig.vhost.master', $vhost_conf_dir.'/ispconfig.vhost'); //* and create the symlink if ($this->is_update == false) { if (@is_link($vhost_conf_enabled_dir . '/ispconfig.vhost')) { unlink($vhost_conf_enabled_dir . '/ispconfig.vhost'); } if (!@is_link($vhost_conf_enabled_dir . '/000-ispconfig.vhost')) { symlink($vhost_conf_dir . '/ispconfig.vhost', $vhost_conf_enabled_dir . '/000-ispconfig.vhost'); } } } //* Install the update script if (is_file('/usr/local/bin/ispconfig_update_from_dev.sh')) { unlink('/usr/local/bin/ispconfig_update_from_dev.sh'); } chown($install_dir . '/server/scripts/update_from_dev.sh', 'root'); chmod($install_dir . '/server/scripts/update_from_dev.sh', 0700); chown($install_dir . '/server/scripts/update_from_tgz.sh', 'root'); chmod($install_dir . '/server/scripts/update_from_tgz.sh', 0700); chown($install_dir . '/server/scripts/ispconfig_update.sh', 'root'); chmod($install_dir . '/server/scripts/ispconfig_update.sh', 0700); if (!is_link('/usr/local/bin/ispconfig_update_from_dev.sh')) { symlink($install_dir . '/server/scripts/ispconfig_update.sh', '/usr/local/bin/ispconfig_update_from_dev.sh'); } if (!is_link('/usr/local/bin/ispconfig_update.sh')) { symlink($install_dir . '/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 file and directory if (!is_file($conf['ispconfig_log_dir'] . '/ispconfig.log')) { if (!is_dir($conf['ispconfig_log_dir'])) { mkdir($conf['ispconfig_log_dir'], 0755); } touch($conf['ispconfig_log_dir'] . '/ispconfig.log'); } //* Create the ispconfig auth log file and set uid/gid if (!is_file($conf['ispconfig_log_dir'] . '/auth.log')) { touch($conf['ispconfig_log_dir'] . '/auth.log'); } exec('chown ispconfig:ispconfig ' . $conf['ispconfig_log_dir'] . '/auth.log'); exec('chmod 660 ' . $conf['ispconfig_log_dir'] . '/auth.log'); if (is_user('getmail')) { rename($install_dir . '/server/scripts/run-getmail.sh', '/usr/local/bin/run-getmail.sh'); if (is_user('getmail')) { chown('/usr/local/bin/run-getmail.sh', 'getmail'); } chmod('/usr/local/bin/run-getmail.sh', 0744); } //* Add Log-Rotation if (is_dir('/etc/logrotate.d')) { @unlink('/etc/logrotate.d/logispc3'); // ignore, if the file is not there /* We rotate these logs in cron_daily.php $fh = fopen('/etc/logrotate.d/logispc3', 'w'); fwrite($fh, "$conf['ispconfig_log_dir']/ispconfig.log { \n" . " weekly \n" . " missingok \n" . " rotate 4 \n" . " compress \n" . " delaycompress \n" . "} \n" . "$conf['ispconfig_log_dir']/cron.log { \n" . " weekly \n" . " missingok \n" . " rotate 4 \n" . " compress \n" . " delaycompress \n" . "}"); fclose($fh); */ } //* Remove Domain module as its functions are available in the client module now if (@is_dir('/usr/local/ispconfig/interface/web/domain')) { exec('rm -rf /usr/local/ispconfig/interface/web/domain'); } //* Disable rkhunter run and update in debian cronjob as ispconfig is running and updating rkhunter if (is_file('/etc/default/rkhunter')) { replaceLine('/etc/default/rkhunter', 'CRON_DAILY_RUN="yes"', 'CRON_DAILY_RUN="no"', 1, 0); replaceLine('/etc/default/rkhunter', 'CRON_DB_UPDATE="yes"', 'CRON_DB_UPDATE="no"', 1, 0); } // Add symlink for patch tool if (!is_link('/usr/local/bin/ispconfig_patch')) { exec('ln -s /usr/local/ispconfig/server/scripts/ispconfig_patch /usr/local/bin/ispconfig_patch'); } // Change mode of a few files from amavisd if (is_file($conf['amavis']['config_dir'] . '/conf.d/50-user')) { chmod($conf['amavis']['config_dir'] . '/conf.d/50-user', 0640); } if (is_file($conf['amavis']['config_dir'] . '/50-user~')) { chmod($conf['amavis']['config_dir'] . '/50-user~', 0400); } if (is_file($conf['amavis']['config_dir'] . '/amavisd.conf')) { chmod($conf['amavis']['config_dir'] . '/amavisd.conf', 0640); } if (is_file($conf['amavis']['config_dir'] . '/amavisd.conf~')) { chmod($conf['amavis']['config_dir'] . '/amavisd.conf~', 0400); } }
private function php_fpm_pool_update($data, $web_config, $pool_dir, $pool_name, $socket_dir) { global $app, $conf; /* if(trim($data['new']['fastcgi_php_version']) != ''){ $default_php_fpm = false; list($custom_php_fpm_name, $custom_php_fpm_init_script, $custom_php_fpm_ini_dir, $custom_php_fpm_pool_dir) = explode(':', trim($data['new']['fastcgi_php_version'])); if(substr($custom_php_fpm_ini_dir,-1) != '/') $custom_php_fpm_ini_dir .= '/'; } else { $default_php_fpm = true; } */ if ($data['new']['php'] != 'no') { if (trim($data['new']['fastcgi_php_version']) != '') { $default_php_fpm = false; list($custom_php_fpm_name, $custom_php_fpm_init_script, $custom_php_fpm_ini_dir, $custom_php_fpm_pool_dir) = explode(':', trim($data['new']['fastcgi_php_version'])); if (substr($custom_php_fpm_ini_dir, -1) != '/') { $custom_php_fpm_ini_dir .= '/'; } } else { $default_php_fpm = true; } } else { if (trim($data['old']['fastcgi_php_version']) != '' && $data['old']['php'] != 'no') { $default_php_fpm = false; list($custom_php_fpm_name, $custom_php_fpm_init_script, $custom_php_fpm_ini_dir, $custom_php_fpm_pool_dir) = explode(':', trim($data['old']['fastcgi_php_version'])); if (substr($custom_php_fpm_ini_dir, -1) != '/') { $custom_php_fpm_ini_dir .= '/'; } } else { $default_php_fpm = true; } } $app->uses("getconf"); $web_config = $app->getconf->get_server_config($conf["server_id"], 'web'); if ($data['new']['php'] == 'no') { if (@is_file($pool_dir . $pool_name . '.conf')) { $app->system->unlink($pool_dir . $pool_name . '.conf'); //$reload = true; } if ($data['old']['php'] != 'no') { if (!$default_php_fpm) { $app->services->restartService('php-fpm', 'reload:' . $custom_php_fpm_init_script); } else { $app->services->restartService('php-fpm', 'reload:' . $conf['init_scripts'] . '/' . $web_config['php_fpm_init_script']); } } return; } $app->load('tpl'); $tpl = new tpl(); $tpl->newTemplate('php_fpm_pool.conf.master'); if ($data['new']['php_fpm_use_socket'] == 'y') { $use_tcp = 0; $use_socket = 1; if (!is_dir($socket_dir)) { $app->system->mkdirpath($socket_dir); } } else { $use_tcp = 1; $use_socket = 0; } $tpl->setVar('use_tcp', $use_tcp); $tpl->setVar('use_socket', $use_socket); $fpm_socket = $socket_dir . $pool_name . '.sock'; $tpl->setVar('fpm_socket', $fpm_socket); $tpl->setVar('fpm_listen_mode', '0660'); $tpl->setVar('fpm_pool', $pool_name); $tpl->setVar('fpm_port', $web_config['php_fpm_start_port'] + $data['new']['domain_id'] - 1); $tpl->setVar('fpm_user', $data['new']['system_user']); $tpl->setVar('fpm_group', $data['new']['system_group']); $tpl->setVar('pm', $data['new']['pm']); $tpl->setVar('pm_max_children', $data['new']['pm_max_children']); $tpl->setVar('pm_start_servers', $data['new']['pm_start_servers']); $tpl->setVar('pm_min_spare_servers', $data['new']['pm_min_spare_servers']); $tpl->setVar('pm_max_spare_servers', $data['new']['pm_max_spare_servers']); $tpl->setVar('pm_process_idle_timeout', $data['new']['pm_process_idle_timeout']); $tpl->setVar('pm_max_requests', $data['new']['pm_max_requests']); $tpl->setVar('document_root', $data['new']['document_root']); $tpl->setVar('security_level', $web_config['security_level']); $tpl->setVar('domain', $data['new']['domain']); $php_open_basedir = $data['new']['php_open_basedir'] == '' ? escapeshellcmd($data['new']['document_root']) : escapeshellcmd($data['new']['php_open_basedir']); $tpl->setVar('php_open_basedir', $php_open_basedir); if ($php_open_basedir != '') { $tpl->setVar('enable_php_open_basedir', ''); } else { $tpl->setVar('enable_php_open_basedir', ';'); } // Custom php.ini settings $final_php_ini_settings = array(); $custom_php_ini_settings = trim($data['new']['custom_php_ini']); if ($custom_php_ini_settings != '') { // Make sure we only have Unix linebreaks $custom_php_ini_settings = str_replace("\r\n", "\n", $custom_php_ini_settings); $custom_php_ini_settings = str_replace("\r", "\n", $custom_php_ini_settings); $ini_settings = explode("\n", $custom_php_ini_settings); if (is_array($ini_settings) && !empty($ini_settings)) { foreach ($ini_settings as $ini_setting) { $ini_setting = trim($ini_setting); if (substr($ini_setting, 0, 1) == ';') { continue; } if (substr($ini_setting, 0, 1) == '#') { continue; } if (substr($ini_setting, 0, 2) == '//') { continue; } list($key, $value) = explode('=', $ini_setting, 2); $value = trim($value); if ($value != '') { $key = trim($key); switch (strtolower($value)) { case '0': // PHP-FPM might complain about invalid boolean value if you use 0 $value = 'off'; case '1': case 'on': case 'off': case 'true': case 'false': case 'yes': case 'no': $final_php_ini_settings[] = array('ini_setting' => 'php_admin_flag[' . $key . '] = ' . $value); break; default: $final_php_ini_settings[] = array('ini_setting' => 'php_admin_value[' . $key . '] = ' . $value); } } } } } $tpl->setLoop('custom_php_ini_settings', $final_php_ini_settings); $app->system->file_put_contents($pool_dir . $pool_name . '.conf', $tpl->grab()); $app->log('Writing the PHP-FPM config file: ' . $pool_dir . $pool_name . '.conf', LOGLEVEL_DEBUG); unset($tpl); // delete pool in all other PHP versions $default_pool_dir = escapeshellcmd($web_config['php_fpm_pool_dir']); if (substr($default_pool_dir, -1) != '/') { $default_pool_dir .= '/'; } if ($default_pool_dir != $pool_dir) { if (@is_file($default_pool_dir . $pool_name . '.conf')) { $app->system->unlink($default_pool_dir . $pool_name . '.conf'); $app->log('Removed PHP-FPM config file: ' . $default_pool_dir . $pool_name . '.conf', LOGLEVEL_DEBUG); $app->services->restartService('php-fpm', 'reload:' . $conf['init_scripts'] . '/' . $web_config['php_fpm_init_script']); } } $php_versions = $app->db->queryAllRecords("SELECT * FROM server_php WHERE php_fpm_init_script != '' AND php_fpm_ini_dir != '' AND php_fpm_pool_dir != '' AND server_id = " . $conf["server_id"]); if (is_array($php_versions) && !empty($php_versions)) { foreach ($php_versions as $php_version) { if (substr($php_version['php_fpm_pool_dir'], -1) != '/') { $php_version['php_fpm_pool_dir'] .= '/'; } if ($php_version['php_fpm_pool_dir'] != $pool_dir) { if (@is_file($php_version['php_fpm_pool_dir'] . $pool_name . '.conf')) { $app->system->unlink($php_version['php_fpm_pool_dir'] . $pool_name . '.conf'); $app->log('Removed PHP-FPM config file: ' . $php_version['php_fpm_pool_dir'] . $pool_name . '.conf', LOGLEVEL_DEBUG); $app->services->restartService('php-fpm', 'reload:' . $php_version['php_fpm_init_script']); } } } } // Reload current PHP-FPM after all others sleep(1); if (!$default_php_fpm) { $app->services->restartService('php-fpm', 'reload:' . $custom_php_fpm_init_script); } else { $app->services->restartService('php-fpm', 'reload:' . $conf['init_scripts'] . '/' . $web_config['php_fpm_init_script']); } }
function update($event_name, $data) { global $app, $conf; /* * If $action is not 'insert', let's set it to update */ if ($this->action != 'insert') { $this->action = 'update'; } /* * load the server configuration options */ $app->uses('getconf'); $web_config = $app->getconf->get_server_config($conf['server_id'], 'web'); /* * We load the global template engine */ $app->load('tpl'); /* * Create a new template and choose which master template to take * the file is located within /usr/local/ispconfig/server/conf/ */ $tpl = new tpl(); $tpl->newTemplate('apache2_userdir_plugin.conf.master'); /* * Write some values from the array to single variables */ $vhost_data = $data['new']; /* * To have a better overview we split our update function into several parts, * for sites, aliases and subdomains * -> vhost */ if ($data['new']['type'] == 'vhost') { /* * We have collected all data in the $vhost_data array * so we can pass it to the template engine */ $tpl->setVar($vhost_data); /* * if this is an 'insert', we have to create the vhost file */ if ($this->action == 'insert') { $this->vhost('insert', $data, $tpl->grab()); } /* * if this is an 'update', we have to update the vhost file */ if ($this->action == 'update') { $vhost_backup = $this->vhost('update', $data, $tpl->grab()); } } /* * reload the apache2 webserver to apply changes */ $app->services->restartServiceDelayed('httpd', 'reload'); /* * everything went hopefully well, so we can now * delete the vhosts backup */ if (isset($vhost_backup)) { unlink($vhost_backup['file_new'] . '~'); } unset($vhost_backup); /* * Unset 'action' to clean it for next processed vhost */ $this->action = ''; }
function _setup_jailkit_chroot() { global $app; //check if the chroot environment is created yet if not create it with a list of program sections from the config if (!is_dir($this->parent_domain['document_root'] . '/etc/jailkit')) { $command = '/usr/local/ispconfig/server/scripts/create_jailkit_chroot.sh'; $command .= ' ' . escapeshellcmd($this->parent_domain['document_root']); $command .= ' \'' . $this->jailkit_config['jailkit_chroot_app_sections'] . '\''; exec($command . ' 2>/dev/null'); $this->app->log("Added jailkit chroot with command: " . $command, LOGLEVEL_DEBUG); //$this->_add_jailkit_programs(); // done later on $this->app->load('tpl'); $tpl = new tpl(); $tpl->newTemplate("bash.bashrc.master"); $tpl->setVar('jailkit_chroot', true); $tpl->setVar('domain', $this->parent_domain['domain']); $tpl->setVar('home_dir', $this->_get_home_dir("")); $bashrc = escapeshellcmd($this->parent_domain['document_root']) . '/etc/bash.bashrc'; if (@is_file($bashrc) || @is_link($bashrc)) { unlink($bashrc); } $app->system->file_put_contents($bashrc, $tpl->grab()); unset($tpl); $this->app->log('Added bashrc script: ' . $bashrc, LOGLEVEL_DEBUG); $tpl = new tpl(); $tpl->newTemplate('motd.master'); $tpl->setVar('domain', $this->parent_domain['domain']); $motd = escapeshellcmd($this->parent_domain['document_root']) . '/var/run/motd'; if (@is_file($motd) || @is_link($motd)) { unlink($motd); } $app->system->file_put_contents($motd, $tpl->grab()); } $this->_add_jailkit_programs(); }
private function php_fpm_pool_update($data, $web_config, $pool_dir, $pool_name, $socket_dir) { global $app, $conf; //$reload = false; if ($data['new']['php'] == 'no') { if (@is_file($pool_dir . $pool_name . '.conf')) { unlink($pool_dir . $pool_name . '.conf'); //$reload = true; } //if($reload == true) $app->services->restartService('php-fpm','reload'); return; } $app->uses("getconf"); $web_config = $app->getconf->get_server_config($conf["server_id"], 'web'); $app->load('tpl'); $tpl = new tpl(); $tpl->newTemplate('php_fpm_pool.conf.master'); if ($data['new']['php_fpm_use_socket'] == 'y') { $use_tcp = 0; $use_socket = 1; if (!is_dir($socket_dir)) { exec('mkdir -p ' . $socket_dir); } } else { $use_tcp = 1; $use_socket = 0; } $tpl->setVar('use_tcp', $use_tcp); $tpl->setVar('use_socket', $use_socket); $fpm_socket = $socket_dir . $pool_name . '.sock'; $tpl->setVar('fpm_socket', $fpm_socket); $tpl->setVar('fpm_pool', $pool_name); $tpl->setVar('fpm_port', $web_config['php_fpm_start_port'] + $data['new']['domain_id'] - 1); $tpl->setVar('fpm_user', $data['new']['system_user']); $tpl->setVar('fpm_group', $data['new']['system_group']); $tpl->setVar('pm_max_children', $data['new']['pm_max_children']); $tpl->setVar('pm_start_servers', $data['new']['pm_start_servers']); $tpl->setVar('pm_min_spare_servers', $data['new']['pm_min_spare_servers']); $tpl->setVar('pm_max_spare_servers', $data['new']['pm_max_spare_servers']); $tpl->setVar('document_root', $data['new']['document_root']); $tpl->setVar('security_level', $web_config['security_level']); $php_open_basedir = $data['new']['php_open_basedir'] == '' ? escapeshellcmd($data['new']['document_root']) : escapeshellcmd($data['new']['php_open_basedir']); $tpl->setVar('php_open_basedir', $php_open_basedir); if ($php_open_basedir != '') { $tpl->setVar('enable_php_open_basedir', ''); } else { $tpl->setVar('enable_php_open_basedir', ';'); } // Custom php.ini settings $final_php_ini_settings = array(); $custom_php_ini_settings = trim($data['new']['custom_php_ini']); if ($custom_php_ini_settings != '') { // Make sure we only have Unix linebreaks $custom_php_ini_settings = str_replace("\r\n", "\n", $custom_php_ini_settings); $custom_php_ini_settings = str_replace("\r", "\n", $custom_php_ini_settings); $ini_settings = explode("\n", $custom_php_ini_settings); if (is_array($ini_settings) && !empty($ini_settings)) { foreach ($ini_settings as $ini_setting) { list($key, $value) = explode('=', $ini_setting); if ($value) { $value = escapeshellcmd(trim($value)); $key = escapeshellcmd(trim($key)); switch (strtolower($value)) { case 'on': case 'off': case '1': case '0': // PHP-FPM might complain about invalid boolean value if you use 0 $value = 'off'; case 'true': case 'false': case 'yes': case 'no': $final_php_ini_settings[] = array('ini_setting' => 'php_admin_flag[' . $key . '] = ' . $value); break; default: $final_php_ini_settings[] = array('ini_setting' => 'php_admin_value[' . $key . '] = ' . $value); } } } } } $tpl->setLoop('custom_php_ini_settings', $final_php_ini_settings); file_put_contents($pool_dir . $pool_name . '.conf', $tpl->grab()); $app->log('Writing the PHP-FPM config file: ' . $pool_dir . $pool_name . '.conf', LOGLEVEL_DEBUG); unset($tpl); //$reload = true; //if($reload == true) $app->services->restartService('php-fpm','reload'); }
/** * ISPConfig update hook. * * Called every time a site gets updated from within ISPConfig. * * @see insert() * @see delete() * * @param string $event_name the event/action name * @param array $data the vhost data */ function update($event_name, $data) { global $app, $conf; //* $VAR: command to run after vhost insert/update/delete $final_command = '/etc/init.d/nginx reload'; if ($this->action != 'insert') { $this->action = 'update'; } $app->uses('getconf'); $app->uses('system'); $web_config = $app->getconf->get_server_config($conf['server_id'], 'web'); $app->load('tpl'); $tpl = new tpl(); $tpl->newTemplate('nginx_reverse_proxy_plugin.vhost.conf.master'); $web_folder = 'web'; if ($data['new']['type'] == 'vhostsubdomain') { $tmp = $app->db->queryOneRecord('SELECT `domain` FROM web_domain WHERE domain_id = ' . intval($data['new']['parent_domain_id'])); $subdomain_host = preg_replace('/^(.*)\\.' . preg_quote($tmp['domain'], '/') . '$/', '$1', $data['new']['domain']); if ($subdomain_host == '') { $subdomain_host = 'web' . $data['new']['domain_id']; } $web_folder = $data['new']['web_folder']; unset($tmp); } $vhost_data = $data['new']; $vhost_data['web_document_root'] = $data['new']['document_root'] . '/' . $web_folder; $vhost_data['web_document_root_www'] = $web_config['website_basedir'] . '/' . $data['new']['domain'] . '/' . $web_folder; $vhost_data['web_basedir'] = $web_config['website_basedir']; $vhost_data['ssl_domain'] = $data['new']['ssl_domain']; /* __ VHOST & VHOSTSUBDOMAIN - section for vhosts and vhostsubdomains //////////////*/ if ($data['new']['type'] == 'vhost' || $data['new']['type'] == 'vhostsubdomain') { if ($data['new']['ipv6_address'] != '') { $tpl->setVar('ipv6_enabled', 1); } $server_alias = array(); switch ($data['new']['subdomain']) { case 'www': // if seo-redirect is enabled, this should be placed in separate server block // to prevent if statement in server/request! $server_alias[] .= 'www.' . $data['new']['domain'] . ' '; break; case '*': $server_alias[] .= '*.' . $data['new']['domain'] . ' '; break; } $alias_result = array(); $alias_result = $app->dbmaster->queryAllRecords('SELECT * FROM web_domain WHERE parent_domain_id = ' . $data['new']['domain_id'] . " AND active = 'y' AND type != 'vhostsubdomain'"); if (count($alias_result) > 0) { // if alias is redirect type, put in server block with seo-redirect to prevent // if statement in server/request! foreach ($alias_result as $alias) { switch ($alias['subdomain']) { case 'www': $server_alias[] .= 'www.' . $alias['domain'] . ' ' . $alias['domain'] . ' '; break; case '*': $server_alias[] .= '*.' . $alias['domain'] . ' ' . $alias['domain'] . ' '; break; default: $server_alias[] .= $alias['domain'] . ' '; } $app->log('Add server alias: ' . $alias['domain'], LOGLEVEL_DEBUG); } unset($alias); } if (count($server_alias) > 0) { $server_alias_str = ''; foreach ($server_alias as $tmp_alias) { $server_alias_str .= $tmp_alias; } unset($tmp_alias); $tpl->setVar('alias', $server_alias_str); } else { $tpl->setVar('alias', ''); } if (!isset($rewrite_rules)) { $rewrite_rules = array(); } if ($data['new']['redirect_type'] != '' && $data['new']['redirect_path'] != '') { if (substr($data['new']['redirect_path'], -1) != '/') { $data['new']['redirect_path'] .= '/'; } if (substr($data['new']['redirect_path'], 0, 8) == '[scheme]') { $rewrite_target = 'http' . substr($data['new']['redirect_path'], 8); $rewrite_target_ssl = 'https' . substr($data['new']['redirect_path'], 8); } else { $rewrite_target = $data['new']['redirect_path']; $rewrite_target_ssl = $data['new']['redirect_path']; } if (substr($data['new']['redirect_path'], 0, 4) == 'http') { $data['new']['redirect_type'] = 'permanent'; } else { switch ($data['new']['redirect_type']) { case 'no': $data['new']['redirect_type'] = 'break'; break; case 'L': $data['new']['redirect_type'] = 'break'; break; default: $data['new']['redirect_type'] = 'permanent'; } } switch ($data['new']['subdomain']) { case 'www': $rewrite_rules[] = array('rewrite_domain' => '^' . $data['new']['domain'], 'rewrite_type' => $data['new']['redirect_type'] == 'no' ? '' : $data['new']['redirect_type'], 'rewrite_target' => $rewrite_target, 'rewrite_target_ssl' => $rewrite_target_ssl); $rewrite_rules[] = array('rewrite_domain' => '^www.' . $data['new']['domain'], 'rewrite_type' => $data['new']['redirect_type'] == 'no' ? '' : $data['new']['redirect_type'], 'rewrite_target' => $rewrite_target, 'rewrite_target_ssl' => $rewrite_target_ssl); break; case '*': $rewrite_rules[] = array('rewrite_domain' => '(^|\\.)' . $data['new']['domain'], 'rewrite_type' => $data['new']['redirect_type'] == 'no' ? '' : $data['new']['redirect_type'], 'rewrite_target' => $rewrite_target, 'rewrite_target_ssl' => $rewrite_target_ssl); break; default: $rewrite_rules[] = array('rewrite_domain' => '^' . $data['new']['domain'], 'rewrite_type' => $data['new']['redirect_type'] == 'no' ? '' : $data['new']['redirect_type'], 'rewrite_target' => $rewrite_target, 'rewrite_target_ssl' => $rewrite_target_ssl); } } if ($data['new']['seo_redirect'] != '' && ($data['new']['subdomain'] == 'www' || $data['new']['subdomain'] == '*')) { $vhost_data['seo_redirect_enabled'] = 1; if ($data['new']['seo_redirect'] == 'non_www_to_www') { $vhost_data['seo_redirect_origin_domain'] = $data['new']['domain']; $vhost_data['seo_redirect_target_domain'] = 'www.' . $data['new']['domain']; } if ($data['new']['seo_redirect'] == 'www_to_non_www') { $vhost_data['seo_redirect_origin_domain'] = 'www.' . $data['new']['domain']; $vhost_data['seo_redirect_target_domain'] = $data['new']['domain']; } } else { $vhost_data['seo_redirect_enabled'] = 0; } $errordocs = !$data['new']['errordocs']; $nginx_directives = $data['new']['nginx_directives']; $nginx_directives = str_replace("\r\n", "\n", $nginx_directives); $nginx_directives = str_replace("\r", "\n", $nginx_directives); $crt_file = escapeshellcmd($data['new']['document_root'] . '/ssl/' . $data['new']['ssl_domain'] . '.crt'); $key_file = escapeshellcmd($data['new']['document_root'] . '/ssl/' . $data['new']['ssl_domain'] . '.key'); if ($data['new']['ssl_domain'] != '' && $data['new']['ssl'] == 'y' && is_file($crt_file) && is_file($key_file) && filesize($crt_file) > 0 && filesize($key_file) > 0) { $http_to_https = 1; } else { $http_to_https = 0; } // non-ssl vhost loop if (count($rewrite_rules) > 0) { $vhosts[] = array('ip_address' => $data['new']['ip_address'], 'ipv6_address' => $data['new']['ipv6_address'], 'ssl_enabled' => 0, 'http_to_https' => $http_to_https, 'nginx_directives' => $nginx_directives, 'errordocs' => $errordocs, 'port' => 80, 'apache2_port' => 82); } else { $vhosts[] = array('ip_address' => $data['new']['ip_address'], 'ipv6_address' => $data['new']['ipv6_address'], 'ssl_enabled' => 0, 'http_to_https' => $http_to_https, 'nginx_directives' => $nginx_directives, 'errordocs' => $errordocs, 'port' => 80, 'apache2_port' => 82); } // ssl vhost loop if ($http_to_https == 1) { $vhost_data['web_document_root_ssl'] = $data['new']['document_root'] . '/ssl'; if (count($rewrite_rules) > 0) { $vhosts[] = array('ip_address' => $data['new']['ip_address'], 'ipv6_address' => $data['new']['ipv6_address'], 'ssl_enabled' => 1, 'http_to_https' => 0, 'rewrite_enabled' => 1, 'nginx_directives' => $nginx_directives, 'errordocs' => $errordocs, 'port' => 443, 'apache2_port' => 82); } else { $vhosts[] = array('ip_address' => $data['new']['ip_address'], 'ipv6_address' => $data['new']['ipv6_address'], 'ssl_enabled' => 1, 'http_to_https' => 0, 'rewrite_enabled' => 0, 'nginx_directives' => $nginx_directives, 'errordocs' => $errordocs, 'port' => 443, 'apache2_port' => 82); } } $tpl->setLoop('vhosts', $vhosts); $tpl->setVar($vhost_data); if ($this->action == 'insert') { $this->vhost_helper('insert', $data, $tpl->grab()); } if ($this->action == 'update') { $vhost_backup = $this->vhost_helper('update', $data, $tpl->grab()); } } /** * Section for aliasdomains. * * This section is used for aliasdomains. */ if ($data['new']['type'] == 'alias') { $parent_domain = $app->dbmaster->queryOneRecord('SELECT * FROM web_domain WHERE domain_id = ' . intval($data['new']['parent_domain_id']) . ''); $parent_domain['parent_domain_id'] = $data['new']['parent_domain_id']; $data['old'] = $parent_domain; $data['new'] = $parent_domain; $this->update($event_name, $data); } /** * Section for classic subdomains. * * This section is used for classic subdomains (non vhost subdomains). */ if ($data['new']['type'] == 'subdomain') { $parent_domain = $app->dbmaster->queryOneRecord('SELECT * FROM web_domain WHERE domain_id = ' . intval($data['new']['parent_domain_id']) . ''); $parent_domain['parent_domain_id'] = $data['new']['parent_domain_id']; $data['old'] = $parent_domain; $data['new'] = $parent_domain; $this->update($event_name, $data); } exec($final_command); if (isset($vhost_backup)) { $app->system->unlink($vhost_backup['file_new'] . '~'); } unset($vhost_backup); $this->action = ''; }
function update($event_name, $data) { global $app, $conf; // get the config $app->uses('getconf'); $server_config = $app->getconf->get_server_config($conf['server_id'], 'server'); //* Configure the debian network card settings. //* Dont configure if ($server_config['auto_network_configuration'] == 'y' && $data['mirrored'] == false && $server_config['ip_address'] != '0.0.0.0' && $server_config['gateway'] != '0.0.0.0') { if (is_file('/etc/debian_version')) { copy('/etc/network/interfaces', '/etc/network/interfaces~'); $app->load('tpl'); $network_tpl = new tpl(); $network_tpl->newTemplate('debian_network_interfaces.master'); $network_tpl->setVar('ip_address', $server_config['ip_address']); $network_tpl->setVar('netmask', $server_config['netmask']); $network_tpl->setVar('gateway', $server_config['gateway']); $network_tpl->setVar('broadcast', $this->broadcast($server_config['ip_address'], $server_config['netmask'])); $network_tpl->setVar('network', $this->network($server_config['ip_address'], $server_config['netmask'])); $records = $app->db->queryAllRecords("SELECT ip_address FROM server_ip WHERE server_id = " . intval($conf['server_id']) . ' ORDER BY server_ip_id ASC'); $ip_records = array(); $additionl_ip_records = 0; $n = 0; if (is_array($records)) { foreach ($records as $rec) { /* * don't insert the main-ip again! */ if ($rec['ip_address'] != $server_config['ip_address']) { $ip_records[$n] = array('id' => $n, 'ip_address' => $rec['ip_address'], 'netmask' => $server_config['netmask'], 'gateway' => $server_config['gateway'], 'broadcast' => $this->broadcast($rec['ip_address'], $server_config['netmask']), 'network' => $this->network($rec['ip_address'], $server_config['netmask'])); $additionl_ip_records = 1; $n++; } } } /* * If we have more than 1 IP we have to add the main-ip at the end * of the network-ip-list. If we don't do so, there may be problems * in multi-server-settings (with the acces from other server to the * main-server) because the LAST IP in the list is the IP mysql uses * to determine the host, the user is logging in from. */ /* // Disabled this part as it causes problems on multiserver setups if ($additionl_ip_records != 0) { $swap['ip_address'] = $ip_records[$n-1]['ip_address']; $swap['netmask'] = $ip_records[$n-1]['netmask']; $swap['gateway'] = $ip_records[$n-1]['gateway']; $ip_records[$n-1] = array( 'id' => $n-1, 'ip_address' => $server_config['ip_address'], 'netmask' => $server_config['netmask'], 'gateway' => $server_config['gateway'], 'broadcast' => $this->broadcast($server_config['ip_address'],$server_config['netmask']), 'network' => $this->network($server_config['ip_address'],$server_config['netmask']) ); $network_tpl->setVar('ip_address',$swap['ip_address']); $network_tpl->setVar('netmask',$swap['netmask']); $network_tpl->setVar('gateway',$swap['gateway']); $network_tpl->setVar('broadcast',$this->broadcast($swap['ip_address'],$swap['netmask'])); $network_tpl->setVar('network',$this->network($swap['ip_address'],$swap['netmask'])); } */ $network_tpl->setVar('additionl_ip_records', $additionl_ip_records); $network_tpl->setLoop('interfaces', $ip_records); file_put_contents('/etc/network/interfaces', $network_tpl->grab()); unset($network_tpl); $app->log('Changed Network settings', LOGLEVEL_DEBUG); exec($conf['init_scripts'] . '/' . 'networking force-reload'); } elseif (is_file('/etc/gentoo-release')) { copy('/etc/conf.d/net', '/etc/conf.d/net~'); $app->load('tpl'); $network_tpl = new tpl(); $network_tpl->newTemplate('gentoo_network_interfaces.master'); $network_tpl->setVar('ip_address', $server_config['ip_address']); $network_tpl->setVar('netmask', $server_config['netmask']); $network_tpl->setVar('gateway', $server_config['gateway']); $network_tpl->setVar('broadcast', $this->broadcast($server_config['ip_address'], $server_config['netmask'])); $records = $app->db->queryAllRecords("SELECT ip_address FROM server_ip WHERE server_id = " . intval($conf['server_id']) . " order by ip_address"); $ip_records = array(); $additionl_ip_records = 0; $n = 0; if (is_array($records)) { foreach ($records as $rec) { /* * don't insert the main-ip again! */ if ($rec['ip_address'] != $server_config['ip_address']) { $ip_records[$n] = array('id' => $n, 'ip_address' => $rec['ip_address'], 'netmask' => $server_config['netmask'], 'gateway' => $server_config['gateway'], 'broadcast' => $this->broadcast($rec['ip_address'], $server_config['netmask'])); $additionl_ip_records = 1; $n++; } } } /* * If we have more than 1 IP we have to add the main-ip at the end * of the network-ip-list. If we don't do so, there may be problems * in multi-server-settings (with the acces from other server to the * main-server) because the LAST IP in the list is the IP mysql uses * to determine the host, the user is logging in from. */ if ($additionl_ip_records != 0) { $swap['ip_address'] = $ip_records[$n - 1]['ip_address']; $swap['netmask'] = $ip_records[$n - 1]['netmask']; $swap['gateway'] = $ip_records[$n - 1]['gateway']; $ip_records[$n - 1] = array('id' => $n - 1, 'ip_address' => $server_config['ip_address'], 'netmask' => $server_config['netmask'], 'gateway' => $server_config['gateway'], 'broadcast' => $this->broadcast($server_config['ip_address'], $server_config['netmask'])); $network_tpl->setVar('ip_address', $swap['ip_address']); $network_tpl->setVar('netmask', $swap['netmask']); $network_tpl->setVar('gateway', $swap['gateway']); $network_tpl->setVar('broadcast', $this->broadcast($swap['ip_address'], $swap['netmask'])); } $network_tpl->setVar('additionl_ip_records', $additionl_ip_records); $network_tpl->setLoop('interfaces', $ip_records); file_put_contents('/etc/conf.d/net', $network_tpl->grab()); unset($network_tpl); $app->log('Changed Network settings', LOGLEVEL_DEBUG); exec($conf['init_scripts'] . '/' . 'net.eth0 restart'); } else { $app->log('Network configuration not available for this Linux distribution.', LOGLEVEL_DEBUG); } } else { if ($data['mirrored'] == true) { $app->log('Skipping network config request. IP addresses from amster are not configured on the mirror.', LOGLEVEL_DEBUG); } if ($server_config['auto_network_configuration'] == 'n') { $app->log('Network configuration disabled in server settings.', LOGLEVEL_DEBUG); } } }
function update($event_name, $data) { global $app, $conf; // get the config $app->uses('getconf'); $server_config = $app->getconf->get_server_config($conf['server_id'], 'server'); //* Configure the debian network card settings. //* Dont configure if ($server_config['auto_network_configuration'] == 'y' && $data['mirrored'] == false && $server_config['ip_address'] != '0.0.0.0' && $server_config['gateway'] != '0.0.0.0') { if (is_file('/etc/debian_version')) { copy('/etc/network/interfaces', '/etc/network/interfaces~'); $app->load('tpl'); $network_tpl = new tpl(); $network_tpl->newTemplate('debian_network_interfaces.master'); $network_tpl->setVar('ip_address', $server_config['ip_address']); $network_tpl->setVar('netmask', $server_config['netmask']); $network_tpl->setVar('gateway', $server_config['gateway']); $network_tpl->setVar('broadcast', $this->broadcast($server_config['ip_address'], $server_config['netmask'])); $network_tpl->setVar('network', $this->network($server_config['ip_address'], $server_config['netmask'])); $records = $app->db->queryAllRecords("SELECT ip_address FROM server_ip WHERE server_id = " . intval($conf['server_id']) . ' ORDER BY server_ip_id ASC'); $ip_records = array(); $additionl_ip_records = 0; $n = 0; if (is_array($records)) { foreach ($records as $rec) { /* * don't insert the main-ip again! */ if ($rec['ip_address'] != $server_config['ip_address']) { $ip_records[$n] = array('id' => $n, 'ip_address' => $rec['ip_address'], 'netmask' => $server_config['netmask'], 'gateway' => $server_config['gateway'], 'broadcast' => $this->broadcast($rec['ip_address'], $server_config['netmask']), 'network' => $this->network($rec['ip_address'], $server_config['netmask'])); $additionl_ip_records = 1; $n++; } } } /* * If we have more than 1 IP we have to add the main-ip at the end * of the network-ip-list. If we don't do so, there may be problems * in multi-server-settings (with the acces from other server to the * main-server) because the LAST IP in the list is the IP mysql uses * to determine the host, the user is logging in from. */ /* // Disabled this part as it causes problems on multiserver setups if ($additionl_ip_records != 0) { $swap['ip_address'] = $ip_records[$n-1]['ip_address']; $swap['netmask'] = $ip_records[$n-1]['netmask']; $swap['gateway'] = $ip_records[$n-1]['gateway']; $ip_records[$n-1] = array( 'id' => $n-1, 'ip_address' => $server_config['ip_address'], 'netmask' => $server_config['netmask'], 'gateway' => $server_config['gateway'], 'broadcast' => $this->broadcast($server_config['ip_address'],$server_config['netmask']), 'network' => $this->network($server_config['ip_address'],$server_config['netmask']) ); $network_tpl->setVar('ip_address',$swap['ip_address']); $network_tpl->setVar('netmask',$swap['netmask']); $network_tpl->setVar('gateway',$swap['gateway']); $network_tpl->setVar('broadcast',$this->broadcast($swap['ip_address'],$swap['netmask'])); $network_tpl->setVar('network',$this->network($swap['ip_address'],$swap['netmask'])); } */ $network_tpl->setVar('additionl_ip_records', $additionl_ip_records); $network_tpl->setLoop('interfaces', $ip_records); file_put_contents('/etc/network/interfaces', $network_tpl->grab()); unset($network_tpl); $app->log('Changed Network settings', LOGLEVEL_DEBUG); exec($conf['init_scripts'] . '/' . 'networking force-reload'); } elseif (is_file('/etc/gentoo-release')) { copy('/etc/conf.d/net', '/etc/conf.d/net~'); $app->load('tpl'); $network_tpl = new tpl(); $network_tpl->newTemplate('gentoo_network_interfaces.master'); $network_tpl->setVar('ip_address', $server_config['ip_address']); $network_tpl->setVar('netmask', $server_config['netmask']); $network_tpl->setVar('gateway', $server_config['gateway']); $network_tpl->setVar('broadcast', $this->broadcast($server_config['ip_address'], $server_config['netmask'])); $records = $app->db->queryAllRecords("SELECT ip_address FROM server_ip WHERE server_id = " . intval($conf['server_id']) . " order by ip_address"); $ip_records = array(); $additionl_ip_records = 0; $n = 0; if (is_array($records)) { foreach ($records as $rec) { /* * don't insert the main-ip again! */ if ($rec['ip_address'] != $server_config['ip_address']) { $ip_records[$n] = array('id' => $n, 'ip_address' => $rec['ip_address'], 'netmask' => $server_config['netmask'], 'gateway' => $server_config['gateway'], 'broadcast' => $this->broadcast($rec['ip_address'], $server_config['netmask'])); $additionl_ip_records = 1; $n++; } } } /* * If we have more than 1 IP we have to add the main-ip at the end * of the network-ip-list. If we don't do so, there may be problems * in multi-server-settings (with the acces from other server to the * main-server) because the LAST IP in the list is the IP mysql uses * to determine the host, the user is logging in from. */ if ($additionl_ip_records != 0) { $swap['ip_address'] = $ip_records[$n - 1]['ip_address']; $swap['netmask'] = $ip_records[$n - 1]['netmask']; $swap['gateway'] = $ip_records[$n - 1]['gateway']; $ip_records[$n - 1] = array('id' => $n - 1, 'ip_address' => $server_config['ip_address'], 'netmask' => $server_config['netmask'], 'gateway' => $server_config['gateway'], 'broadcast' => $this->broadcast($server_config['ip_address'], $server_config['netmask'])); $network_tpl->setVar('ip_address', $swap['ip_address']); $network_tpl->setVar('netmask', $swap['netmask']); $network_tpl->setVar('gateway', $swap['gateway']); $network_tpl->setVar('broadcast', $this->broadcast($swap['ip_address'], $swap['netmask'])); } $network_tpl->setVar('additionl_ip_records', $additionl_ip_records); $network_tpl->setLoop('interfaces', $ip_records); file_put_contents('/etc/conf.d/net', $network_tpl->grab()); unset($network_tpl); $app->log('Changed Network settings', LOGLEVEL_DEBUG); exec($conf['init_scripts'] . '/' . 'net.eth0 restart'); } else { $app->log('Network configuration not available for this Linux distribution.', LOGLEVEL_DEBUG); } } else { if ($data['mirrored'] == true) { $app->log('Skipping network config request. IP addresses from master are not configured on the mirror.', LOGLEVEL_DEBUG); } if ($server_config['auto_network_configuration'] == 'n') { $app->log('Network configuration disabled in server settings.', LOGLEVEL_DEBUG); } } //* Configure hostname if ($event_name == 'server_update' && $data['mirrored'] == false) { //* get old server config $tmp = $app->ini_parser->parse_ini_string(stripslashes($data['old']['config'])); $old_server_config = $tmp['server']; unset($tmp); $new_hostname = trim($server_config['hostname']); $old_hostname = trim($old_server_config['hostname']); if ($new_hostname != '' && $old_hostname != $new_hostname) { if (is_file('/etc/hostname')) { $app->system->file_put_contents('/etc/hostname', $new_hostname); $app->log('Changed /etc/hostname to ' . $new_hostname, LOGLEVEL_DEBUG); } if (is_file('/etc/mailname')) { $app->system->file_put_contents('/etc/mailname', $new_hostname); $app->log('Changed /etc/mailname to ' . $new_hostname, LOGLEVEL_DEBUG); } $postconf_commands = array('myhostname = ' . $new_hostname, 'mydestination = ' . $new_hostname . ', localhost, localhost.localdomain'); //* Executing the postconf commands foreach ($postconf_commands as $cmd) { $command = "postconf -e '{$cmd}'"; exec($command); } $app->log('Changed changed myhostname and mydestination in postfix main.cf to ' . $new_hostname, LOGLEVEL_DEBUG); //* change /etc/hosts $hosts = file_get_contents('/etc/hosts'); $hosts = str_replace($old_hostname, $new_hostname, $hosts); $app->system->file_put_contents('/etc/hosts', $hosts); exec($app->system->getinitcommand('postfix', 'restart') . ' 2>&1'); exec($app->system->getinitcommand('networking', 'restart') . ' 2>&1'); } } }
function update($event_name, $data) { global $app, $conf; // load the server configuration options $app->uses("getconf"); $mail_config = $app->getconf->get_server_config($conf["server_id"], 'mail'); if (substr($mail_config["homedir_path"], -1) == '/') { $mail_config["homedir_path"] = substr($mail_config["homedir_path"], 0, -1); } if (isset($data["new"]["email"])) { $email_parts = explode("@", $data["new"]["email"]); } else { $email_parts = explode("@", $data["old"]["email"]); } // Write the custom mailfilter script, if mailfilter recipe has changed if ($data["old"]["custom_mailfilter"] != $data["new"]["custom_mailfilter"] or $data["old"]["move_junk"] != $data["new"]["move_junk"] or $data["old"]["autoresponder_text"] != $data["new"]["autoresponder_text"] or $data["old"]["autoresponder"] != $data["new"]["autoresponder"] or isset($data["new"]["email"]) and $data["old"]["email"] != $data["new"]["email"] or $data["old"]["autoresponder_start_date"] != $data["new"]["autoresponder_start_date"] or $data["old"]["autoresponder_end_date"] != $data["new"]["autoresponder_end_date"] or $data["old"]["cc"] != $data["new"]["cc"]) { $app->log("Mailfilter config has been changed", LOGLEVEL_DEBUG); $sieve_file = $data["new"]["maildir"] . '/.sieve'; if (is_file($sieve_file)) { unlink($sieve_file) or $app->log("Unable to delete file: {$sieve_file}", LOGLEVEL_WARN); } $app->load('tpl'); $tpl = new tpl(); $tpl->newTemplate("sieve_filter.master"); // cc Field $tpl->setVar('cc', $data["new"]["cc"]); // Custom filters $tpl->setVar('custom_mailfilter', $data["new"]["custom_mailfilter"]); // Move junk $tpl->setVar('move_junk', $data["new"]["move_junk"]); // Set autoresponder start date $tpl->setVar('start_date', $data["new"]["autoresponder_start_date"]); // Set autoresponder end date $tpl->setVar('end_date', $data["new"]["autoresponder_end_date"]); // Autoresponder $tpl->setVar('autoresponder', $data["new"]["autoresponder"]); $data["new"]["autoresponder_text"] = str_replace("\"", "'", $data["new"]["autoresponder_text"]); $tpl->setVar('autoresponder_text', $data["new"]["autoresponder_text"]); //* Set alias addresses for autoresponder $sql = "SELECT * FROM mail_forwarding WHERE type = 'alias' AND destination = '" . $app->db->quote($data["new"]["email"]) . "'"; $records = $app->db->queryAllRecords($sql); $addresses = ''; if (is_array($records) && count($records) > 0) { $addresses .= ':addresses ["' . $data["new"]["email"] . '",'; foreach ($records as $rec) { $addresses .= '"' . $rec['source'] . '",'; } $addresses = substr($addresses, 0, -1); $addresses .= ']'; } $tpl->setVar('addresses', $addresses); file_put_contents($sieve_file, $tpl->grab()); unset($tpl); } }
private function bastille_update($event_name, $data) { global $app, $conf; $app->uses('system'); $tcp_ports = $this->clean_ports($data['new']['tcp_port'], ' '); $udp_ports = $this->clean_ports($data['new']['udp_port'], ' '); $app->load('tpl'); $tpl = new tpl(); $tpl->newTemplate('bastille-firewall.cfg.master'); $tpl->setVar('TCP_PUBLIC_SERVICES', $tcp_ports); $tpl->setVar('UDP_PUBLIC_SERVICES', $udp_ports); file_put_contents('/etc/Bastille/bastille-firewall.cfg', $tpl->grab()); $app->log('Writing firewall configuration /etc/Bastille/bastille-firewall.cfg', LOGLEVEL_DEBUG); unset($tpl); if ($data['new']['active'] == 'y') { //* ensure that ufw firewall is disabled in case both firewalls are installed if ($app->system->is_installed('ufw')) { exec('ufw disable'); } exec($conf['init_scripts'] . '/' . 'bastille-firewall restart 2>/dev/null'); if (@is_file('/etc/debian_version')) { exec('update-rc.d bastille-firewall defaults'); } $app->log('Restarting the firewall', LOGLEVEL_DEBUG); } else { exec($conf['init_scripts'] . '/' . 'bastille-firewall stop 2>/dev/null'); if (@is_file('/etc/debian_version')) { exec('update-rc.d -f bastille-firewall remove'); } $app->log('Stopping the firewall', LOGLEVEL_DEBUG); } }
public function install_ispconfig() { global $conf; $install_dir = $conf['ispconfig_install_dir']; //* Create the ISPConfig installation directory if (!@is_dir("{$install_dir}")) { $command = "mkdir {$install_dir}"; caselog($command . ' &> /dev/null', __FILE__, __LINE__, "EXECUTED: {$command}", "Failed to execute the command {$command}"); } //* Create a ISPConfig user and group $command = 'groupadd ispconfig'; if (!is_group('ispconfig')) { caselog($command . ' &> /dev/null 2> /dev/null', __FILE__, __LINE__, "EXECUTED: {$command}", "Failed to execute the command {$command}"); } $command = "useradd -g ispconfig -d {$install_dir} ispconfig"; if (!is_user('ispconfig')) { caselog($command . ' &> /dev/null 2> /dev/null', __FILE__, __LINE__, "EXECUTED: {$command}", "Failed to execute the command {$command}"); } //* copy the ISPConfig interface part $command = "cp -rf ../interface {$install_dir}"; caselog($command . ' &> /dev/null', __FILE__, __LINE__, "EXECUTED: {$command}", "Failed to execute the command {$command}"); //* copy the ISPConfig server part $command = "cp -rf ../server {$install_dir}"; caselog($command . ' &> /dev/null', __FILE__, __LINE__, "EXECUTED: {$command}", "Failed to execute the command {$command}"); //* Make a backup of the security settings if (is_file('/usr/local/ispconfig/security/security_settings.ini')) { copy('/usr/local/ispconfig/security/security_settings.ini', '/usr/local/ispconfig/security/security_settings.ini~'); } //* copy the ISPConfig security part $command = 'cp -rf ../security ' . $install_dir; caselog($command . ' &> /dev/null', __FILE__, __LINE__, "EXECUTED: {$command}", "Failed to execute the command {$command}"); //* Apply changed security_settings.ini values to new security_settings.ini file if (is_file('/usr/local/ispconfig/security/security_settings.ini~')) { $security_settings_old = ini_to_array(file_get_contents('/usr/local/ispconfig/security/security_settings.ini~')); $security_settings_new = ini_to_array(file_get_contents('/usr/local/ispconfig/security/security_settings.ini')); if (is_array($security_settings_new) && is_array($security_settings_old)) { foreach ($security_settings_new as $section => $sval) { if (is_array($sval)) { foreach ($sval as $key => $val) { if (isset($security_settings_old[$section]) && isset($security_settings_old[$section][$key])) { $security_settings_new[$section][$key] = $security_settings_old[$section][$key]; } } } } file_put_contents('/usr/local/ispconfig/security/security_settings.ini', array_to_ini($security_settings_new)); } } //* Create a symlink, so ISPConfig is accessible via web // Replaced by a separate vhost definition for port 8080 // $command = "ln -s $install_dir/interface/web/ /var/www/ispconfig"; // caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command"); //* Create the config file for ISPConfig interface $configfile = 'config.inc.php'; if (is_file($install_dir . '/interface/lib/' . $configfile)) { copy("{$install_dir}/interface/lib/{$configfile}", "{$install_dir}/interface/lib/{$configfile}~"); } $content = rfsel($conf['ispconfig_install_dir'] . '/server/conf-custom/install/' . $configfile . '.master', "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('{mysql_server_database}', $conf['mysql']['database'], $content); $content = str_replace('{mysql_server_host}', $conf['mysql']['host'], $content); $content = str_replace('{mysql_master_server_ispconfig_user}', $conf['mysql']['master_ispconfig_user'], $content); $content = str_replace('{mysql_master_server_ispconfig_password}', $conf['mysql']['master_ispconfig_password'], $content); $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); $content = str_replace('{timezone}', $conf['timezone'], $content); $content = str_replace('{theme}', $conf['theme'], $content); $content = str_replace('{language_file_import_enabled}', $conf['language_file_import_enabled'] == true ? 'true' : 'false', $content); wf("{$install_dir}/interface/lib/{$configfile}", $content); //* Create the config file for ISPConfig server $configfile = 'config.inc.php'; if (is_file($install_dir . '/server/lib/' . $configfile)) { copy("{$install_dir}/server/lib/{$configfile}", "{$install_dir}/interface/lib/{$configfile}~"); } $content = rfsel($conf['ispconfig_install_dir'] . '/server/conf-custom/install/' . $configfile . '.master', "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('{mysql_server_database}', $conf['mysql']['database'], $content); $content = str_replace('{mysql_server_host}', $conf['mysql']['host'], $content); $content = str_replace('{mysql_master_server_ispconfig_user}', $conf['mysql']['master_ispconfig_user'], $content); $content = str_replace('{mysql_master_server_ispconfig_password}', $conf['mysql']['master_ispconfig_password'], $content); $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); $content = str_replace('{timezone}', $conf['timezone'], $content); $content = str_replace('{theme}', $conf['theme'], $content); $content = str_replace('{language_file_import_enabled}', $conf['language_file_import_enabled'] == true ? 'true' : 'false', $content); wf("{$install_dir}/server/lib/{$configfile}", $content); //* Create the config file for remote-actions (but only, if it does not exist, because // the value is a autoinc-value and so changed by the remoteaction_core_module if (!file_exists($install_dir . '/server/lib/remote_action.inc.php')) { $content = '<?php' . "\n" . '$maxid_remote_action = 0;' . "\n" . '?>'; wf($install_dir . '/server/lib/remote_action.inc.php', $content); } //* Enable the server modules and plugins. // TODO: Implement a selector which modules and plugins shall be enabled. $dir = $install_dir . '/server/mods-available/'; if (is_dir($dir)) { if ($dh = opendir($dir)) { while (($file = readdir($dh)) !== false) { if ($file != '.' && $file != '..' && substr($file, -8, 8) == '.inc.php') { include_once $install_dir . '/server/mods-available/' . $file; $module_name = substr($file, 0, -8); $tmp = new $module_name(); if ($tmp->onInstall()) { if (!@is_link($install_dir . '/server/mods-enabled/' . $file)) { @symlink($install_dir . '/server/mods-available/' . $file, $install_dir . '/server/mods-enabled/' . $file); } if (strpos($file, '_core_module') !== false) { if (!@is_link($install_dir . '/server/mods-core/' . $file)) { @symlink($install_dir . '/server/mods-available/' . $file, $install_dir . '/server/mods-core/' . $file); } } } unset($tmp); } } closedir($dh); } } $dir = $install_dir . '/server/plugins-available/'; if (is_dir($dir)) { if ($dh = opendir($dir)) { while (($file = readdir($dh)) !== false) { if ($conf['apache']['installed'] == true && $file == 'nginx_plugin.inc.php') { continue; } if ($conf['nginx']['installed'] == true && $file == 'apache2_plugin.inc.php') { continue; } if ($file != '.' && $file != '..' && substr($file, -8, 8) == '.inc.php') { include_once $install_dir . '/server/plugins-available/' . $file; $plugin_name = substr($file, 0, -8); $tmp = new $plugin_name(); if ($tmp->onInstall()) { if (!@is_link($install_dir . '/server/plugins-enabled/' . $file)) { @symlink($install_dir . '/server/plugins-available/' . $file, $install_dir . '/server/plugins-enabled/' . $file); } if (strpos($file, '_core_plugin') !== false) { if (!@is_link($install_dir . '/server/plugins-core/' . $file)) { @symlink($install_dir . '/server/plugins-available/' . $file, $install_dir . '/server/plugins-core/' . $file); } } } unset($tmp); } } closedir($dh); } } // Update the server config $mail_server_enabled = $conf['services']['mail'] ? 1 : 0; $web_server_enabled = $conf['services']['web'] ? 1 : 0; $dns_server_enabled = $conf['services']['dns'] ? 1 : 0; $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') { $this->dbmaster->query($sql); $this->db->query($sql); } else { $this->db->query($sql); } // chown install dir to root and chmod 755 $command = 'chown root:root ' . $install_dir; caselog($command . ' &> /dev/null', __FILE__, __LINE__, "EXECUTED: {$command}", "Failed to execute the command {$command}"); $command = 'chmod 755 ' . $install_dir; caselog($command . ' &> /dev/null', __FILE__, __LINE__, "EXECUTED: {$command}", "Failed to execute the command {$command}"); //* Chmod the files and directories in the install dir $command = 'chmod -R 750 ' . $install_dir . '/*'; caselog($command . ' &> /dev/null', __FILE__, __LINE__, "EXECUTED: {$command}", "Failed to execute the command {$command}"); //* chown the interface files to the ispconfig user and group $command = 'chown -R ispconfig:ispconfig ' . $install_dir . '/interface'; caselog($command . ' &> /dev/null', __FILE__, __LINE__, "EXECUTED: {$command}", "Failed to execute the command {$command}"); //* chown the server files to the root user and group $command = 'chown -R root:root ' . $install_dir . '/server'; caselog($command . ' &> /dev/null', __FILE__, __LINE__, "EXECUTED: {$command}", "Failed to execute the command {$command}"); //* chown the security files to the root user and group $command = 'chown -R root:root ' . $install_dir . '/security'; caselog($command . ' &> /dev/null', __FILE__, __LINE__, "EXECUTED: {$command}", "Failed to execute the command {$command}"); //* chown the security directory and security_settings.ini to root:ispconfig $command = 'chown root:ispconfig ' . $install_dir . '/security/security_settings.ini'; 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"); //* Make the temp directory for language file exports writable exec("chmod -R 770 {$install_dir}/interface/web/temp"); //* Make all interface language file directories group writable $handle = @opendir($install_dir . '/interface/web'); while ($file = @readdir($handle)) { if ($file != '.' && $file != '..') { if (@is_dir($install_dir . '/interface/web' . '/' . $file . '/lib/lang')) { $handle2 = opendir($install_dir . '/interface/web' . '/' . $file . '/lib/lang'); chmod($install_dir . '/interface/web' . '/' . $file . '/lib/lang', 0770); while ($lang_file = @readdir($handle2)) { if ($lang_file != '.' && $lang_file != '..') { chmod($install_dir . '/interface/web' . '/' . $file . '/lib/lang/' . $lang_file, 0770); } } } } } //* Make the APS directories group writable exec("chmod -R 770 {$install_dir}/interface/web/sites/aps_meta_packages"); exec("chmod -R 770 {$install_dir}/server/aps_packages"); //* make sure that the server config file (not the interface one) is only readable by the root user chmod($install_dir . '/server/lib/config.inc.php', 0600); chown($install_dir . '/server/lib/config.inc.php', 'root'); chgrp($install_dir . '/server/lib/config.inc.php', 'root'); //* Make sure thet the interface config file is readable by user ispconfig only chmod($install_dir . '/interface/lib/config.inc.php', 0600); chown($install_dir . '/interface/lib/config.inc.php', 'ispconfig'); chgrp($install_dir . '/interface/lib/config.inc.php', 'ispconfig'); if (@is_file("{$install_dir}/server/lib/mysql_clientdb.conf")) { 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. // Later this must run as own apache server or via suexec! if ($conf['apache']['installed'] == true) { //$command = 'groupmod --add-user '.$conf['apache']['user'].' ispconfig'; $command = 'usermod -a -G ispconfig ' . $conf['apache']['user']; caselog($command . ' &> /dev/null', __FILE__, __LINE__, "EXECUTED: {$command}", "Failed to execute the command {$command}"); if (is_group('ispapps')) { //$command = 'groupmod --add-user '.$conf['apache']['user'].' ispapps'; $command = 'usermod -a -G ispapps ' . $conf['apache']['user']; caselog($command . ' &> /dev/null', __FILE__, __LINE__, "EXECUTED: {$command}", "Failed to execute the command {$command}"); } } if ($conf['nginx']['installed'] == true) { //$command = 'groupmod --add-user '.$conf['nginx']['user'].' ispconfig'; $command = 'usermod -a -G ispconfig ' . $conf['nginx']['user']; caselog($command . ' &> /dev/null', __FILE__, __LINE__, "EXECUTED: {$command}", "Failed to execute the command {$command}"); if (is_group('ispapps')) { //$command = 'groupmod --add-user '.$conf['nginx']['user'].' ispapps'; $command = 'usermod -a -G ispapps ' . $conf['nginx']['user']; caselog($command . ' &> /dev/null', __FILE__, __LINE__, "EXECUTED: {$command}", "Failed to execute the command {$command}"); } // add nobody user to www group, as the default php-fpm pool from opensuse runs as nobody $command = 'usermod -a -G www nobody'; caselog($command . ' &> /dev/null', __FILE__, __LINE__, "EXECUTED: {$command}", "Failed to execute the command {$command}"); } //* Make the shell scripts executable $command = "chmod +x {$install_dir}/server/scripts/*.sh"; caselog($command . ' &> /dev/null', __FILE__, __LINE__, "EXECUTED: {$command}", "Failed to execute the command {$command}"); if ($conf['apache']['installed'] == true && $this->install_ispconfig_interface == true) { //* Copy the ISPConfig vhost for the controlpanel // TODO: These are missing! should they be "vhost_dist_*_dir" ? $vhost_conf_dir = $conf['apache']['vhost_conf_dir']; $vhost_conf_enabled_dir = $conf['apache']['vhost_conf_enabled_dir']; // Dont just copy over the virtualhost template but add some custom settings $tpl = new tpl('apache_ispconfig.vhost.master'); $tpl->setVar('vhost_port', $conf['apache']['vhost_port']); // comment out the listen directive if port is 80 or 443 if ($conf['apache']['vhost_port'] == 80 or $conf['apache']['vhost_port'] == 443) { $tpl->setVar('vhost_port_listen', '#'); } else { $tpl->setVar('vhost_port_listen', ''); } if (is_file($install_dir . '/interface/ssl/ispserver.crt') && is_file($install_dir . '/interface/ssl/ispserver.key')) { $tpl->setVar('ssl_comment', ''); } else { $tpl->setVar('ssl_comment', '#'); } if (is_file($install_dir . '/interface/ssl/ispserver.crt') && is_file($install_dir . '/interface/ssl/ispserver.key') && is_file($install_dir . '/interface/ssl/ispserver.bundle')) { $tpl->setVar('ssl_bundle_comment', ''); } else { $tpl->setVar('ssl_bundle_comment', '#'); } $tpl->setVar('apache_version', getapacheversion()); $content = $tpl->grab(); $content = str_replace('/var/www/', '/srv/www/', $content); wf($vhost_conf_dir . '/ispconfig.vhost', $content); //if(!is_file('/srv/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter')) { $content = rfsel($conf['ispconfig_install_dir'] . '/server/conf-custom/install/apache_ispconfig_fcgi_starter.master', 'tpl/apache_ispconfig_fcgi_starter.master'); $content = str_replace('{fastcgi_bin}', $conf['fastcgi']['fastcgi_bin'], $content); $content = str_replace('{fastcgi_phpini_path}', $conf['fastcgi']['fastcgi_phpini_path'], $content); exec('mkdir -p /srv/www/php-fcgi-scripts/ispconfig'); wf('/srv/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter', $content); exec('chmod +x /srv/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter'); exec('ln -s /usr/local/ispconfig/interface/web /srv/www/ispconfig'); exec('chown -R ispconfig:ispconfig /srv/www/php-fcgi-scripts/ispconfig'); //} //copy('tpl/apache_ispconfig.vhost.master', "$vhost_conf_dir/ispconfig.vhost"); //* and create the symlink if ($this->is_update == false) { if (@is_link("{$vhost_conf_enabled_dir}/ispconfig.vhost")) { unlink("{$vhost_conf_enabled_dir}/ispconfig.vhost"); } 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"); } } // Fix a setting in vhost master file for suse replaceLine('/usr/local/ispconfig/server/conf/vhost.conf.master', "suPHP_UserGroup", " suPHP_UserGroup <tmpl_var name='system_user'> <tmpl_var name='system_group'>", 0); } if ($conf['nginx']['installed'] == true && $this->install_ispconfig_interface == true) { //* Copy the ISPConfig vhost for the controlpanel $vhost_conf_dir = $conf['nginx']['vhost_conf_dir']; $vhost_conf_enabled_dir = $conf['nginx']['vhost_conf_enabled_dir']; // Dont just copy over the virtualhost template but add some custom settings $content = rfsel($conf['ispconfig_install_dir'] . '/server/conf-custom/install/nginx_ispconfig.vhost.master', 'tpl/nginx_ispconfig.vhost.master'); $content = str_replace('{vhost_port}', $conf['nginx']['vhost_port'], $content); if (is_file($install_dir . '/interface/ssl/ispserver.crt') && is_file($install_dir . '/interface/ssl/ispserver.key')) { $content = str_replace('{ssl_on}', ' on', $content); $content = str_replace('{ssl_comment}', '', $content); $content = str_replace('{fastcgi_ssl}', 'on', $content); } else { $content = str_replace('{ssl_on}', ' off', $content); $content = str_replace('{ssl_comment}', '#', $content); $content = str_replace('{fastcgi_ssl}', 'off', $content); } $socket_dir = escapeshellcmd($conf['nginx']['php_fpm_socket_dir']); if (substr($socket_dir, -1) != '/') { $socket_dir .= '/'; } if (!is_dir($socket_dir)) { exec('mkdir -p ' . $socket_dir); } $fpm_socket = $socket_dir . 'ispconfig.sock'; //$content = str_replace('{fpm_port}', $conf['nginx']['php_fpm_start_port'], $content); $content = str_replace('{fpm_socket}', $fpm_socket, $content); wf($vhost_conf_dir . '/ispconfig.vhost', $content); unset($content); // PHP-FPM // Dont just copy over the php-fpm pool template but add some custom settings $content = rfsel($conf['ispconfig_install_dir'] . '/server/conf-custom/install/php_fpm_pool.conf.master', 'tpl/php_fpm_pool.conf.master'); $content = str_replace('{fpm_pool}', 'ispconfig', $content); //$content = str_replace('{fpm_port}', $conf['nginx']['php_fpm_start_port'], $content); $content = str_replace('{fpm_socket}', $fpm_socket, $content); $content = str_replace('{fpm_user}', 'ispconfig', $content); $content = str_replace('{fpm_group}', 'ispconfig', $content); wf($conf['nginx']['php_fpm_pool_dir'] . '/ispconfig.conf', $content); //copy('tpl/nginx_ispconfig.vhost.master', $vhost_conf_dir.'/ispconfig.vhost'); //* and create the symlink if ($this->is_update == false) { if (@is_link($vhost_conf_enabled_dir . '/ispconfig.vhost')) { unlink($vhost_conf_enabled_dir . '/ispconfig.vhost'); } if (!@is_link($vhost_conf_enabled_dir . '/000-ispconfig.vhost')) { symlink($vhost_conf_dir . '/ispconfig.vhost', $vhost_conf_enabled_dir . '/000-ispconfig.vhost'); } } // create symlinks from /usr/share to phpMyAdmin and SquirrelMail, if they are installed if (!@file_exists('/usr/share/phpmyadmin') && @is_dir('/srv/www/htdocs/phpMyAdmin')) { symlink('/srv/www/htdocs/phpMyAdmin/', '/usr/share/phpmyadmin'); } if (!@file_exists('/usr/share/squirrelmail') && @is_dir('/srv/www/htdocs/squirrelmail')) { symlink('/srv/www/htdocs/squirrelmail/', '/usr/share/squirrelmail'); } } // 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 update script if (is_file('/usr/local/bin/ispconfig_update_from_dev.sh')) { unlink('/usr/local/bin/ispconfig_update_from_dev.sh'); } exec('chown root /usr/local/ispconfig/server/scripts/update_from_dev.sh'); exec('chmod 700 /usr/local/ispconfig/server/scripts/update_from_dev.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_dev.sh')) { exec('ln -s /usr/local/ispconfig/server/scripts/ispconfig_update.sh /usr/local/bin/ispconfig_update_from_dev.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'); } //set the fast cgi starter script to executable //exec('chmod 755 '.$install_dir.'/interface/bin/php-fcgi'); //* 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'); } //To enable apache to read the directories exec('chmod a+rx /usr/local/ispconfig'); exec('chmod -R 751 /usr/local/ispconfig/interface'); exec('chmod a+rx /usr/local/ispconfig/interface/web'); //* Create the ispconfig log directory if (!is_dir($conf['ispconfig_log_dir'])) { mkdir($conf['ispconfig_log_dir']); } if (!is_file($conf['ispconfig_log_dir'] . '/ispconfig.log')) { exec('touch ' . $conf['ispconfig_log_dir'] . '/ispconfig.log'); } if (is_user('getmail')) { 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'); } 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')); } //* Create the ispconfig auth log file and set uid/gid if (!is_file($conf['ispconfig_log_dir'] . '/auth.log')) { touch($conf['ispconfig_log_dir'] . '/auth.log'); } exec('chown ispconfig:ispconfig ' . $conf['ispconfig_log_dir'] . '/auth.log'); exec('chmod 660 ' . $conf['ispconfig_log_dir'] . '/auth.log'); //* Remove Domain module as its functions are available in the client module now if (@is_dir('/usr/local/ispconfig/interface/web/domain')) { exec('rm -rf /usr/local/ispconfig/interface/web/domain'); } // Add symlink for patch tool if (!is_link('/usr/local/bin/ispconfig_patch')) { exec('ln -s /usr/local/ispconfig/server/scripts/ispconfig_patch /usr/local/bin/ispconfig_patch'); } }
function rewrite_update($event_name, $data) { global $app, $conf; $rules = $this->_getRewriteRules($app); $app->uses('getconf'); $nginx_config = $app->getconf->get_server_config($conf['server_id'], 'web'); $app->load('tpl'); $tpl = new tpl(); $tpl->newTemplate("nginx_reverseproxy_rewrites.conf.master"); if (!empty($rules)) { $tpl->setLoop('nginx_rewrite_rules', $rules); } $rewrites_file = escapeshellcmd($nginx_config['nginx_vhost_conf_dir'] . '/default.rewrites.conf'); //* Make a backup copy of vhost file copy($rewrites_file, $rewrites_file . '~'); //* Write vhost file file_put_contents($rewrites_file, $tpl->grab()); $app->log('Writing the nginx rewrites file: ' . $rewrites_file, LOGLEVEL_DEBUG); unset($tpl); // Set the symlink to enable the vhost $rewrite_symlink = escapeshellcmd($nginx_config['nginx_vhost_conf_enabled_dir'] . '/default.rewrites.conf'); if (!is_link($rewrite_symlink)) { symlink($rewrites_file, $rewrite_symlink); $app->log('Creating symlink for nginx rewrites: ' . $rewrite_symlink . '->' . $rewrites_file, LOGLEVEL_DEBUG); } }
function onShow() { global $app; $listTpl = new tpl(); $listTpl->newTemplate('templates/web_backup_list.htm'); //* Loading language file $lng_file = "lib/lang/" . $_SESSION["s"]["language"] . "_web_backup_list.lng"; include $lng_file; $listTpl->setVar($wb); $message = ''; $error = ''; if (isset($_GET['backup_action'])) { $backup_id = $app->functions->intval($_GET['backup_id']); //* check if the user is owner of the parent domain $domain_backup = $app->db->queryOneRecord("SELECT parent_domain_id FROM web_backup WHERE backup_id = " . $backup_id); $check_perm = 'u'; if ($_GET['backup_action'] == 'download') { $check_perm = 'r'; } // only check read permissions on download, not update permissions $get_domain = $app->db->queryOneRecord("SELECT domain_id FROM web_domain WHERE domain_id = " . $app->functions->intval($domain_backup["parent_domain_id"]) . " AND " . $app->tform->getAuthSQL($check_perm)); if (empty($get_domain) || !$get_domain) { $app->error($app->tform->lng('no_domain_perm')); } if ($_GET['backup_action'] == 'download' && $backup_id > 0) { $server_id = $this->form->dataRecord['server_id']; $backup = $app->db->queryOneRecord("SELECT * FROM web_backup WHERE backup_id = " . $backup_id); if ($backup['server_id'] > 0) { $server_id = $backup['server_id']; } $sql = "SELECT count(action_id) as number FROM sys_remoteaction WHERE action_state = 'pending' AND action_type = 'backup_download' AND action_param = '{$backup_id}'"; $tmp = $app->db->queryOneRecord($sql); if ($tmp['number'] == 0) { $message .= $wb['download_info_txt']; $sql = "INSERT INTO sys_remoteaction (server_id, tstamp, action_type, action_param, action_state, response) " . "VALUES (" . (int) $server_id . ", " . time() . ", " . "'backup_download', " . "'" . $backup_id . "', " . "'pending', " . "''" . ")"; $app->db->query($sql); } else { $error .= $wb['download_pending_txt']; } } if ($_GET['backup_action'] == 'restore' && $backup_id > 0) { $server_id = $this->form->dataRecord['server_id']; $backup = $app->db->queryOneRecord("SELECT * FROM web_backup WHERE backup_id = " . $backup_id); if ($backup['server_id'] > 0) { $server_id = $backup['server_id']; } $sql = "SELECT count(action_id) as number FROM sys_remoteaction WHERE action_state = 'pending' AND action_type = 'backup_restore' AND action_param = '{$backup_id}'"; $tmp = $app->db->queryOneRecord($sql); if ($tmp['number'] == 0) { $message .= $wb['restore_info_txt']; $sql = "INSERT INTO sys_remoteaction (server_id, tstamp, action_type, action_param, action_state, response) " . "VALUES (" . (int) $server_id . ", " . time() . ", " . "'backup_restore', " . "'" . $backup_id . "', " . "'pending', " . "''" . ")"; $app->db->query($sql); } else { $error .= $wb['restore_pending_txt']; } } } //* Get the data $server_ids = array(); $web = $app->db->queryOneRecord("SELECT server_id FROM web_domain WHERE domain_id = " . $app->functions->intval($this->form->id)); $databases = $app->db->queryAllRecords("SELECT server_id FROM web_database WHERE parent_domain_id = " . $app->functions->intval($this->form->id)); if ($app->functions->intval($web['server_id']) > 0) { $server_ids[] = $app->functions->intval($web['server_id']); } if (is_array($databases) && !empty($databases)) { foreach ($databases as $database) { if ($app->functions->intval($database['server_id']) > 0) { $server_ids[] = $app->functions->intval($database['server_id']); } } } $server_ids = array_unique($server_ids); $sql = "SELECT * FROM web_backup WHERE parent_domain_id = " . $app->functions->intval($this->form->id) . " AND server_id IN (" . implode(',', $server_ids) . ") ORDER BY tstamp DESC, backup_type ASC"; $records = $app->db->queryAllRecords($sql); $bgcolor = "#FFFFFF"; if (is_array($records)) { foreach ($records as $rec) { // Change of color $bgcolor = $bgcolor == "#FFFFFF" ? "#EEEEEE" : "#FFFFFF"; $rec["bgcolor"] = $bgcolor; $rec['date'] = date($app->lng('conf_format_datetime'), $rec['tstamp']); $rec['backup_type'] = $wb['backup_type_' . $rec['backup_type']]; $rec['download_available'] = true; if ($rec['server_id'] != $web['server_id']) { $rec['download_available'] = false; } $records_new[] = $rec; } } $listTpl->setLoop('records', @$records_new); $listTpl->setVar('parent_id', $this->form->id); $listTpl->setVar('msg', $message); $listTpl->setVar('error', $error); // Setting Returnto information in the session $list_name = 'backup_list'; // $_SESSION["s"]["list"][$list_name]["parent_id"] = $app->tform_actions->id; $_SESSION["s"]["list"][$list_name]["parent_id"] = $this->form->id; $_SESSION["s"]["list"][$list_name]["parent_name"] = $app->tform->formDef["name"]; $_SESSION["s"]["list"][$list_name]["parent_tab"] = $_SESSION["s"]["form"]["tab"]; $_SESSION["s"]["list"][$list_name]["parent_script"] = $app->tform->formDef["action"]; $_SESSION["s"]["form"]["return_to"] = $list_name; return $listTpl->grab(); }
function onShow() { global $app; $app->uses('listform'); $app->listform->loadListDef($this->options["listdef"]); //$app->listform->SQLExtWhere = "type = 'alias'"; $listTpl = new tpl(); $listTpl->newTemplate('templates/' . $app->listform->listDef["name"] . '_list.htm'); //die(print_r($app->tform_actions)); // Changing some of the list values to reflect that the list is called within a tform page $app->listform->listDef["file"] = $app->tform->formDef["action"]; // $app->listform->listDef["page_params"] = "&id=".$app->tform_actions->id."&next_tab=".$_SESSION["s"]["form"]["tab"]; $app->listform->listDef["page_params"] = "&id=" . $this->form->id . "&next_tab=" . $_SESSION["s"]["form"]["tab"]; $listTpl->setVar('parent_id', $this->form->id); $listTpl->setVar('theme', $_SESSION['s']['theme']); // Generate the SQL for searching $sql_where = ""; if ($app->listform->listDef["auth"] != 'no') { if ($_SESSION["s"]["user"]["typ"] != "admin") { $sql_where = $app->tform->getAuthSQL('r') . " and"; } } if ($this->options["sqlextwhere"] != '') { $sql_where .= " " . $this->options["sqlextwhere"] . " and"; } $sql_where = $app->listform->getSearchSQL($sql_where); $listTpl->setVar($app->listform->searchValues); // Generate SQL for paging $limit_sql = $app->listform->getPagingSQL($sql_where); $listTpl->setVar("paging", $app->listform->pagingHTML); $sql_order_by = ''; if (isset($this->options["sql_order_by"])) { $sql_order_by = $this->options["sql_order_by"]; } //* Limit each page $limits = array('5' => '5', '15' => '15', '25' => '25', '50' => '50', '100' => '100', '999999999' => 'all'); //* create options and set selected, if default -> 15 is selected $options = ''; foreach ($limits as $key => $val) { $options .= '<option value="' . $key . '" ' . (isset($_SESSION['search']['limit']) && $_SESSION['search']['limit'] == $key ? 'selected="selected"' : '') . (!isset($_SESSION['search']['limit']) && $key == '15' ? 'selected="selected"' : '') . '>' . $val . '</option>'; } $listTpl->setVar('search_limit', '<select name="search_limit" style="width:50px">' . $options . '</select>'); //Sorting if (!isset($_SESSION['search'][$app->listform->listDef["name"]]['order'])) { $_SESSION['search'][$app->listform->listDef["name"]]['order'] = ''; } if (!empty($_GET['orderby'])) { $order = str_replace('tbl_col_', '', $_GET['orderby']); //* Check the css class submited value if (preg_match("/^[a-z\\_]{1,}\$/", $order)) { if ($_SESSION['search'][$app->listform->listDef["name"]]['order'] == $order) { $_SESSION['search'][$app->listform->listDef["name"]]['order'] = $order . ' DESC'; } else { $_SESSION['search'][$app->listform->listDef["name"]]['order'] = $order; } } } // If a manuel oder by like customers isset the sorting will be infront if (!empty($_SESSION['search'][$app->listform->listDef["name"]]['order'])) { if (empty($sql_order_by)) { $sql_order_by = "ORDER BY " . $_SESSION['search'][$app->listform->listDef["name"]]['order']; } else { $sql_order_by = str_replace("ORDER BY ", "ORDER BY " . $_SESSION['search'][$app->listform->listDef["name"]]['order'] . ', ', $sql_order_by); } } // Loading language field $lng_file = "lib/lang/" . $_SESSION["s"]["language"] . "_" . $app->listform->listDef['name'] . "_list.lng"; include $lng_file; $listTpl->setVar($wb); // Get the data $records = $app->db->queryAllRecords("SELECT * FROM " . $app->listform->listDef["table"] . " WHERE {$sql_where} {$sql_order_by} {$limit_sql}"); $bgcolor = "#FFFFFF"; if (is_array($records)) { $idx_key = $app->listform->listDef["table_idx"]; foreach ($records as $rec) { $rec = $app->listform->decode($rec); // Change of color $bgcolor = $bgcolor == "#FFFFFF" ? "#EEEEEE" : "#FFFFFF"; $rec["bgcolor"] = $bgcolor; // substitute value for select fields foreach ($app->listform->listDef["item"] as $field) { $key = $field["field"]; if ($field['formtype'] == "SELECT") { if (strtolower($rec[$key]) == 'y' or strtolower($rec[$key]) == 'n') { // Set a additional image variable for bolean fields $rec['_' . $key . '_'] = strtolower($rec[$key]) == 'y' ? 'x16/tick_circle.png' : 'x16/cross_circle.png'; } //* substitute value for select field @($rec[$key] = $field['value'][$rec[$key]]); } // Create a lowercase version of every item $rec[$key . '_lowercase'] = strtolower($rec[$key]); } // The variable "id" contains always the index field $rec["id"] = $rec[$idx_key]; $rec["delete_confirmation"] = $wb['delete_confirmation']; $records_new[] = $rec; } } $listTpl->setLoop('records', @$records_new); // Setting Returnto information in the session $list_name = $app->listform->listDef["name"]; // $_SESSION["s"]["list"][$list_name]["parent_id"] = $app->tform_actions->id; $_SESSION["s"]["list"][$list_name]["parent_id"] = $this->form->id; $_SESSION["s"]["list"][$list_name]["parent_name"] = $app->tform->formDef["name"]; $_SESSION["s"]["list"][$list_name]["parent_tab"] = $_SESSION["s"]["form"]["tab"]; $_SESSION["s"]["list"][$list_name]["parent_script"] = $app->tform->formDef["action"]; $_SESSION["s"]["form"]["return_to"] = $list_name; //die(print_r($_SESSION["s"]["list"][$list_name])); return $listTpl->grab(); }
function update($event_name, $data) { global $app, $conf; // load the server configuration options $app->uses("getconf"); $mail_config = $app->getconf->get_server_config($conf["server_id"], 'mail'); if (substr($mail_config["homedir_path"], -1) == '/') { $mail_config["homedir_path"] = substr($mail_config["homedir_path"], 0, -1); } if (isset($data["new"]["email"])) { $email_parts = explode("@", $data["new"]["email"]); } else { $email_parts = explode("@", $data["old"]["email"]); } // Write the custom mailfilter script, if mailfilter recipe has changed if ($data["old"]["custom_mailfilter"] != $data["new"]["custom_mailfilter"] or $data["old"]["move_junk"] != $data["new"]["move_junk"] or $data["old"]["autoresponder_subject"] != $data["new"]["autoresponder_subject"] or $data["old"]["autoresponder_text"] != $data["new"]["autoresponder_text"] or $data["old"]["autoresponder"] != $data["new"]["autoresponder"] or isset($data["new"]["email"]) and $data["old"]["email"] != $data["new"]["email"] or $data["old"]["autoresponder_start_date"] != $data["new"]["autoresponder_start_date"] or $data["old"]["autoresponder_end_date"] != $data["new"]["autoresponder_end_date"] or $data["old"]["cc"] != $data["new"]["cc"]) { $app->log("Mailfilter config has been changed", LOGLEVEL_DEBUG); $sieve_file = $data["new"]["maildir"] . '/.sieve'; if (is_file($sieve_file)) { unlink($sieve_file) or $app->log("Unable to delete file: {$sieve_file}", LOGLEVEL_WARN); } $app->load('tpl'); //* Select sieve filter file for dovecot version exec('dovecot --version', $tmp); if (substr($tmp[0], 0, 3) == '1.0') { $filter_file_template = "sieve_filter.master"; } elseif (substr($tmp[0], 0, 3) == '1.2') { $filter_file_template = "sieve_filter_1.2.master"; } elseif (substr($tmp[0], 0, 1) == '2') { $filter_file_template = "sieve_filter_1.2.master"; } else { $filter_file_template = "sieve_filter.master"; } unset($tmp); //* Create new filter file based on template $tpl = new tpl(); $tpl->newTemplate($filter_file_template); // cc Field $tmp_mails_arr = explode(',', $data["new"]["cc"]); $tmp_addresses_arr = array(); foreach ($tmp_mails_arr as $address) { if (trim($address) != '') { $tmp_addresses_arr[] = array('address' => trim($address)); } } $tpl->setVar('cc', $data["new"]["cc"]); $tpl->setLoop('ccloop', $tmp_addresses_arr); // Custom filters if ($data["new"]["custom_mailfilter"] == 'NULL') { $data["new"]["custom_mailfilter"] = ''; } $tpl->setVar('custom_mailfilter', $data["new"]["custom_mailfilter"]); // Move junk $tpl->setVar('move_junk', $data["new"]["move_junk"]); // Check autoresponder dates if ($data["new"]["autoresponder_start_date"] == '0000-00-00 00:00:00' && $data["new"]["autoresponder_end_date"] == '0000-00-00 00:00:00') { $tpl->setVar('autoresponder_date_limit', 0); } else { $tpl->setVar('autoresponder_date_limit', 1); } // Set autoresponder start date $data["new"]["autoresponder_start_date"] = str_replace(" ", "T", $data["new"]["autoresponder_start_date"]); $tpl->setVar('start_date', $data["new"]["autoresponder_start_date"]); // Set autoresponder end date $data["new"]["autoresponder_end_date"] = str_replace(" ", "T", $data["new"]["autoresponder_end_date"]); $tpl->setVar('end_date', $data["new"]["autoresponder_end_date"]); // Autoresponder $tpl->setVar('autoresponder', $data["new"]["autoresponder"]); // Autoresponder Subject $data["new"]["autoresponder_subject"] = str_replace("\"", "'", $data["new"]["autoresponder_subject"]); $tpl->setVar('autoresponder_subject', $data["new"]["autoresponder_subject"]); // Autoresponder Text $data["new"]["autoresponder_text"] = str_replace("\"", "'", $data["new"]["autoresponder_text"]); $tpl->setVar('autoresponder_text', $data["new"]["autoresponder_text"]); //* Set alias addresses for autoresponder $sql = "SELECT * FROM mail_forwarding WHERE type = 'alias' AND destination = '" . $app->db->quote($data["new"]["email"]) . "'"; $records = $app->db->queryAllRecords($sql); $addresses = array(); $addresses[] = $data["new"]["email"]; if (is_array($records) && count($records) > 0) { foreach ($records as $rec) { $addresses[] = $rec['source']; } } $app->log("Found " . count($addresses) . " addresses.", LOGLEVEL_DEBUG); $alias_addresses = array(); $email_parts = explode('@', $data["new"]["email"]); $sql = "SELECT * FROM mail_forwarding WHERE type = 'aliasdomain' AND destination = '@" . $app->db->quote($email_parts[1]) . "'"; $records = $app->db->queryAllRecords($sql); if (is_array($records) && count($records) > 0) { $app->log("Found " . count($records) . " records (aliasdomains).", LOGLEVEL_DEBUG); foreach ($records as $rec) { $aliasdomain = substr($rec['source'], 1); foreach ($addresses as $email) { $email_parts = explode('@', $email); $alias_addresses[] = $email_parts[0] . '@' . $aliasdomain; } } } $app->log("Found " . count($addresses) . " addresses at all.", LOGLEVEL_DEBUG); $addresses = array_unique(array_merge($addresses, $alias_addresses)); $app->log("Found " . count($addresses) . " unique addresses at all.", LOGLEVEL_DEBUG); $address_str = ''; if (is_array($addresses) && count($addresses) > 0) { $address_str .= ':addresses ['; foreach ($addresses as $rec) { $address_str .= '"' . $rec . '",'; } $address_str = substr($address_str, 0, -1); $address_str .= ']'; } $tpl->setVar('addresses', $address_str); file_put_contents($sieve_file, $tpl->grab()); exec('chown ' . $mail_config['mailuser_name'] . ':' . $mail_config['mailuser_group'] . ' ' . escapeshellcmd($sieve_file)); unset($tpl); } }
private function makeOpenVZConfig() { global $app, $conf; $vm = $app->db->queryOneRecord("SELECT * FROM openvz_vm WHERE vm_id = " . $app->functions->intval($this->id)); $vm_template = $app->db->queryOneRecord("SELECT * FROM openvz_template WHERE template_id = " . $app->functions->intval($vm['template_id'])); $burst_ram = $vm['ram_burst'] * 256; $guar_ram = $vm['ram'] * 256; $app->load('tpl'); $tpl = new tpl(); $tpl->newTemplate('../vm/templates/openvz.conf.tpl'); $onboot = $vm['start_boot'] == 'y' ? 'yes' : 'no'; $tpl->setVar('onboot', $onboot); $tpl->setVar('kmemsize', $vm_template['kmemsize']); $tpl->setVar('lockedpages', $vm_template['lockedpages']); $tpl->setVar('privvmpages', $burst_ram . ':' . $burst_ram); $tpl->setVar('shmpages', $guar_ram . ':' . $guar_ram); $tpl->setVar('numproc', $vm_template['numproc']); $tpl->setVar('physpages', $vm_template['physpages']); $tpl->setVar('vmguarpages', $guar_ram . ':' . $guar_ram); $tpl->setVar('oomguarpages', $guar_ram . ':' . $guar_ram); $tpl->setVar('numtcpsock', $vm_template['numtcpsock']); $tpl->setVar('numflock', $vm_template['numflock']); $tpl->setVar('numpty', $vm_template['numpty']); $tpl->setVar('numsiginfo', $vm_template['numsiginfo']); $tpl->setVar('tcpsndbuf', $vm_template['tcpsndbuf']); $tpl->setVar('tcprcvbuf', $vm_template['tcprcvbuf']); $tpl->setVar('othersockbuf', $vm_template['othersockbuf']); $tpl->setVar('dgramrcvbuf', $vm_template['dgramrcvbuf']); $tpl->setVar('numothersock', $vm_template['numothersock']); $tpl->setVar('dcachesize', $vm_template['dcachesize']); $tpl->setVar('numfile', $vm_template['numfile']); $tpl->setVar('avnumproc', $vm_template['avnumproc']); $tpl->setVar('numiptent', $vm_template['numiptent']); $tpl->setVar('swappages', $vm_template['swappages']); $diskspace = $vm['diskspace'] * 1048576; $diskinodes = $vm['diskspace'] * 524288; $tpl->setVar('diskspace', $diskspace . ":" . $diskspace); $tpl->setVar('diskinodes', $diskinodes . ":" . $diskinodes); $tpl->setVar('io_priority', $vm['io_priority']); $tpl->setVar('cpu_num', $vm['cpu_num']); $tpl->setVar('cpu_units', $vm['cpu_units']); $tpl->setVar('cpu_limit', $vm['cpu_limit']); $hostname = str_replace('{VEID}', $vm['veid'], $vm['hostname']); $tpl->setVar('hostname', $hostname); $tpl->setVar('ip_address', $vm['ip_address']); $tpl->setVar('nameserver', $vm['nameserver']); $tpl->setVar('capability', $vm['capability']); $tmp = $app->db->queryOneRecord("SELECT template_file FROM openvz_ostemplate WHERE ostemplate_id = " . $app->functions->intval($vm['ostemplate_id'])); $tpl->setVar('ostemplate', $tmp['template_file']); unset($tmp); $openvz_config = $app->db->quote($tpl->grab()); $app->db->query("UPDATE openvz_vm SET config = '" . $openvz_config . "' WHERE vm_id = " . $app->functions->intval($this->id)); unset($tpl); }
function update($event_name, $data) { global $app, $conf; $tcp_ports = ''; $udp_ports = ''; $ports = explode(',', $data['new']['tcp_port']); if (is_array($ports)) { foreach ($ports as $p) { if (strstr($p, ':')) { $p_parts = explode(':', $p); $p_clean = intval($p_parts[0]) . ':' . intval($p_parts[1]); } else { $p_clean = intval($p); } $tcp_ports .= $p_clean . ' '; } } $tcp_ports = trim($tcp_ports); $ports = explode(',', $data['new']['udp_port']); if (is_array($ports)) { foreach ($ports as $p) { if (strstr($p, ':')) { $p_parts = explode(':', $p); $p_clean = intval($p_parts[0]) . ':' . intval($p_parts[1]); } else { $p_clean = intval($p); } $udp_ports .= $p_clean . ' '; } } $udp_ports = trim($udp_ports); $app->load('tpl'); $tpl = new tpl(); $tpl->newTemplate('bastille-firewall.cfg.master'); $tpl->setVar('TCP_PUBLIC_SERVICES', $tcp_ports); $tpl->setVar('UDP_PUBLIC_SERVICES', $udp_ports); file_put_contents('/etc/Bastille/bastille-firewall.cfg', $tpl->grab()); $app->log('Writing firewall configuration /etc/Bastille/bastille-firewall.cfg', LOGLEVEL_DEBUG); unset($tpl); if ($data['new']['active'] == 'y') { exec($conf['init_scripts'] . '/' . 'bastille-firewall restart'); if (@is_file('/etc/debian_version')) { exec('update-rc.d bastille-firewall defaults'); } $app->log('Restarting the firewall', LOGLEVEL_DEBUG); } else { exec($conf['init_scripts'] . '/' . 'bastille-firewall stop'); if (@is_file('/etc/debian_version')) { exec('update-rc.d -f bastille-firewall remove'); } $app->log('Stopping the firewall', LOGLEVEL_DEBUG); } }
function _setup_jailkit_chroot() { global $app; //check if the chroot environment is created yet if not create it with a list of program sections from the config if (!is_dir($this->data['new']['dir'] . '/etc/jailkit')) { $command = '/usr/local/ispconfig/server/scripts/create_jailkit_chroot.sh'; $command .= ' ' . escapeshellcmd($this->data['new']['dir']); $command .= ' \'' . $this->jailkit_config['jailkit_chroot_app_sections'] . '\''; exec($command . ' 2>/dev/null'); $this->app->log("Added jailkit chroot with command: " . $command, LOGLEVEL_DEBUG); $this->_add_jailkit_programs(); //add bash.bashrc script //we need to collect the domain name to be used as the HOSTNAME in the bashrc script $web = $this->app->db->queryOneRecord("SELECT domain FROM web_domain WHERE domain_id = " . intval($this->data['new']["parent_domain_id"])); $this->app->load('tpl'); $tpl = new tpl(); $tpl->newTemplate("bash.bashrc.master"); $tpl->setVar('jailkit_chroot', true); $tpl->setVar('domain', $web['domain']); $tpl->setVar('home_dir', $this->_get_home_dir("")); $bashrc = escapeshellcmd($this->data['new']['dir']) . '/etc/bash.bashrc'; if (@is_file($bashrc) || @is_link($bashrc)) { unlink($bashrc); } file_put_contents($bashrc, $tpl->grab()); unset($tpl); $this->app->log("Added bashrc script : " . $bashrc, LOGLEVEL_DEBUG); $tpl = new tpl(); $tpl->newTemplate("motd.master"); $tpl->setVar('domain', $web['domain']); $motd = escapeshellcmd($this->data['new']['dir']) . '/var/run/motd'; if (@is_file($motd) || @is_link($motd)) { unlink($motd); } $app->system->file_put_contents($motd, $tpl->grab()); } }
function write_named_conf($data, $dns_config) { global $app, $conf; //* Only write the master file for the current server $tmps = $app->db->queryAllRecords("SELECT origin, xfer, also_notify, update_acl FROM dns_soa WHERE active = 'Y' AND server_id=" . $conf["server_id"]); $zones = array(); //* Check if the current zone that triggered this function has at least one NS record /* Has been replaced by a better zone check $rec_num = $app->db->queryOneRecord("SELECT count(id) as ns FROM dns_rr WHERE type = 'NS' AND zone = ".intval($data['new']['id'])." AND active = 'Y'"); if($rec_num['ns'] == 0) { $exclude_zone = $data['new']['origin']; } else { $exclude_zone = ''; } */ //TODO : change this when distribution information has been integrated into server record if (file_exists('/etc/gentoo-release')) { $pri_zonefiles_path = $dns_config['bind_zonefiles_dir'] . '/pri/'; $sec_zonefiles_path = $dns_config['bind_zonefiles_dir'] . '/sec/'; } else { $pri_zonefiles_path = $dns_config['bind_zonefiles_dir'] . '/pri.'; $sec_zonefiles_path = $dns_config['bind_zonefiles_dir'] . '/slave/sec.'; } //* Loop trough zones foreach ($tmps as $tmp) { $zone_file = $pri_zonefiles_path . str_replace("/", "_", substr($tmp['origin'], 0, -1)); $options = ''; if (trim($tmp['xfer']) != '') { $options .= " allow-transfer {" . str_replace(',', ';', $tmp['xfer']) . ";};\n"; } else { $options .= " allow-transfer {none;};\n"; } if (trim($tmp['also_notify']) != '') { $options .= ' also-notify {' . str_replace(',', ';', $tmp['also_notify']) . ";};\n"; } if (trim($tmp['update_acl']) != '') { $options .= " allow-update {" . str_replace(',', ';', $tmp['update_acl']) . ";};\n"; } if (file_exists($zone_file)) { $zones[] = array('zone' => substr($tmp['origin'], 0, -1), 'zonefile_path' => $zone_file, 'options' => $options); } } $tpl = new tpl(); $tpl->newTemplate("bind_named.conf.local.master"); $tpl->setLoop('zones', $zones); //* And loop through the secondary zones, but only for the current server $tmps_sec = $app->db->queryAllRecords("SELECT origin, xfer, ns FROM dns_slave WHERE active = 'Y' AND server_id=" . $conf["server_id"]); $zones_sec = array(); foreach ($tmps_sec as $tmp) { $options = " masters {" . $tmp['ns'] . ";};\n"; if (trim($tmp['xfer']) != '') { $options .= " allow-transfer {" . str_replace(',', ';', $tmp['xfer']) . ";};\n"; } else { $options .= " allow-transfer {none;};\n"; } $zones_sec[] = array('zone' => substr($tmp['origin'], 0, -1), 'zonefile_path' => $sec_zonefiles_path . str_replace("/", "_", substr($tmp['origin'], 0, -1)), 'options' => $options); // $filename = escapeshellcmd($dns_config['bind_zonefiles_dir'].'/slave/sec.'.substr($tmp['origin'],0,-1)); // $app->log("Writing BIND domain file: ".$filename,LOGLEVEL_DEBUG); } $tpl_sec = new tpl(); $tpl_sec->newTemplate("bind_named.conf.local.slave"); $tpl_sec->setLoop('zones', $zones_sec); file_put_contents($dns_config['named_conf_local_path'], $tpl->grab() . "\n" . $tpl_sec->grab()); $app->log("Writing BIND named.conf.local file: " . $dns_config['named_conf_local_path'], LOGLEVEL_DEBUG); unset($tpl_sec); unset($zones_sec); unset($tmps_sec); unset($tpl); unset($zones); unset($tmps); }
function onShow() { global $app; $listTpl = new tpl(); $listTpl->newTemplate('templates/web_backup_list.htm'); //* Loading language file $lng_file = "lib/lang/" . $_SESSION["s"]["language"] . "_web_backup_list.lng"; include $lng_file; $listTpl->setVar($wb); $message = ''; $error = ''; if (isset($_GET['backup_action'])) { $backup_id = $app->functions->intval($_GET['backup_id']); if ($_GET['backup_action'] == 'download' && $backup_id > 0) { $sql = "SELECT count(action_id) as number FROM sys_remoteaction WHERE action_state = 'pending' AND action_type = 'backup_download' AND action_param = '{$backup_id}'"; $tmp = $app->db->queryOneRecord($sql); if ($tmp['number'] == 0) { $message .= $wb['download_info_txt']; $sql = "INSERT INTO sys_remoteaction (server_id, tstamp, action_type, action_param, action_state, response) " . "VALUES (" . (int) $this->form->dataRecord['server_id'] . ", " . time() . ", " . "'backup_download', " . "'" . $backup_id . "', " . "'pending', " . "''" . ")"; $app->db->query($sql); } else { $error .= $wb['download_pending_txt']; } } if ($_GET['backup_action'] == 'restore' && $backup_id > 0) { $sql = "SELECT count(action_id) as number FROM sys_remoteaction WHERE action_state = 'pending' AND action_type = 'backup_restore' AND action_param = '{$backup_id}'"; $tmp = $app->db->queryOneRecord($sql); if ($tmp['number'] == 0) { $message .= $wb['restore_info_txt']; $sql = "INSERT INTO sys_remoteaction (server_id, tstamp, action_type, action_param, action_state, response) " . "VALUES (" . (int) $this->form->dataRecord['server_id'] . ", " . time() . ", " . "'backup_restore', " . "'" . $backup_id . "', " . "'pending', " . "''" . ")"; $app->db->query($sql); } else { $error .= $wb['restore_pending_txt']; } } } //* Get the data $sql = "SELECT * FROM web_backup WHERE parent_domain_id = " . $this->form->id . " ORDER BY tstamp DESC, backup_type ASC"; $records = $app->db->queryAllRecords($sql); $bgcolor = "#FFFFFF"; if (is_array($records)) { foreach ($records as $rec) { // Change of color $bgcolor = $bgcolor == "#FFFFFF" ? "#EEEEEE" : "#FFFFFF"; $rec["bgcolor"] = $bgcolor; $rec['date'] = date($app->lng('conf_format_datetime'), $rec['tstamp']); $rec['backup_type'] = $wb['backup_type_' . $rec['backup_type']]; $records_new[] = $rec; } } $listTpl->setLoop('records', @$records_new); $listTpl->setVar('parent_id', $this->form->id); $listTpl->setVar('msg', $message); $listTpl->setVar('error', $error); // Setting Returnto information in the session $list_name = 'backup_list'; // $_SESSION["s"]["list"][$list_name]["parent_id"] = $app->tform_actions->id; $_SESSION["s"]["list"][$list_name]["parent_id"] = $this->form->id; $_SESSION["s"]["list"][$list_name]["parent_name"] = $app->tform->formDef["name"]; $_SESSION["s"]["list"][$list_name]["parent_tab"] = $_SESSION["s"]["form"]["tab"]; $_SESSION["s"]["list"][$list_name]["parent_script"] = $app->tform->formDef["action"]; $_SESSION["s"]["form"]["return_to"] = $list_name; return $listTpl->grab(); }
function show() { global $app, $conf; //* Loading Template $app->uses('tpl'); $tpl = new tpl(); $tpl->newTemplate("dashlets/templates/mailquota.htm"); $wb = array(); $lng_file = 'lib/lang/' . $_SESSION['s']['language'] . '_dashlet_mailquota.lng'; if (is_file($lng_file)) { include $lng_file; } $tpl->setVar($wb); $tmp_rec = $app->db->queryAllRecords("SELECT data from monitor_data WHERE type = 'email_quota' ORDER BY created DESC"); $monitor_data = array(); if (is_array($tmp_rec)) { foreach ($tmp_rec as $tmp_mon) { //$monitor_data = array_merge_recursive($monitor_data,unserialize($app->db->unquote($tmp_mon['data']))); $tmp_array = unserialize($app->db->unquote($tmp_mon['data'])); if (is_array($tmp_array)) { foreach ($tmp_array as $username => $data) { if (!$monitor_data[$username]['used']) { $monitor_data[$username]['used'] = $data['used']; } } } } } //print_r($monitor_data); if ($_SESSION["s"]["user"]["typ"] != 'admin') { $sql_where = " AND sys_groupid = " . intval($_SESSION['s']['user']['default_group']); } $has_mailquota = false; // select email accounts belonging to client $emails = $app->db->queryAllRecords("SELECT * FROM mail_user WHERE 1" . $sql_where); //print_r($emails); if (is_array($emails) && !empty($emails)) { for ($i = 0; $i < sizeof($emails); $i++) { $email = $emails[$i]['email']; $emails[$i]['used'] = isset($monitor_data[$email]['used']) ? $monitor_data[$email]['used'] : array(1 => 0); if (!is_numeric($emails[$i]['used'])) { $emails[$i]['used'] = $emails[$i]['used'][1]; } // colours $emails[$i]['display_colour'] = '#000000'; if ($emails[$i]['quota'] > 0) { $used_ratio = $emails[$i]['used'] / $emails[$i]['quota']; } else { $used_ratio = 0; } if ($used_ratio >= 0.8) { $emails[$i]['display_colour'] = '#fd934f'; } if ($used_ratio >= 1) { $emails[$i]['display_colour'] = '#cc0000'; } if ($emails[$i]['quota'] == 0) { $emails[$i]['quota'] = $app->lng('unlimited'); } else { $emails[$i]['quota'] = round($emails[$i]['quota'] / 1048576, 4) . ' MB'; } if ($emails[$i]['used'] < 1544000) { $emails[$i]['used'] = round($emails[$i]['used'] / 1024, 4) . ' KB'; } else { $emails[$i]['used'] = round($emails[$i]['used'] / 1048576, 4) . ' MB'; } } $has_mailquota = true; $tpl->setloop('mailquota', $emails); } //print_r($sites); $tpl->setVar('has_mailquota', $has_mailquota); return $tpl->grab(); }
function onShow() { global $app; $app->uses('listform'); $app->listform->loadListDef($this->options["listdef"]); //$app->listform->SQLExtWhere = "type = 'alias'"; $listTpl = new tpl(); $listTpl->newTemplate('templates/' . $app->listform->listDef["name"] . '_list.htm'); //die(print_r($app->tform_actions)); // Changing some of the list values to reflect that the list is called within a tform page $app->listform->listDef["file"] = $app->tform->formDef["action"]; // $app->listform->listDef["page_params"] = "&id=".$app->tform_actions->id."&next_tab=".$_SESSION["s"]["form"]["tab"]; $app->listform->listDef["page_params"] = "&id=" . $this->form->id . "&next_tab=" . $_SESSION["s"]["form"]["tab"]; $listTpl->setVar('parent_id', $this->form->id); $listTpl->setVar('theme', $_SESSION['s']['theme']); // Generate the SQL for searching if ($app->listform->listDef["auth"] != 'no') { if ($_SESSION["s"]["user"]["typ"] == "admin") { $sql_where = ""; } else { $sql_where = $app->tform->getAuthSQL('r') . " and"; } } if ($this->options["sqlextwhere"] != '') { $sql_where .= " " . $this->options["sqlextwhere"] . " and"; } $sql_where = $app->listform->getSearchSQL($sql_where); $listTpl->setVar($app->listform->searchValues); // Generate SQL for paging $limit_sql = $app->listform->getPagingSQL($sql_where); $listTpl->setVar("paging", $app->listform->pagingHTML); $sql_order_by = ''; if (isset($this->options["sql_order_by"])) { $sql_order_by = $this->options["sql_order_by"]; } // Loading language field $lng_file = "lib/lang/" . $_SESSION["s"]["language"] . "_" . $app->listform->listDef['name'] . "_list.lng"; include $lng_file; $listTpl->setVar($wb); // Get the data $records = $app->db->queryAllRecords("SELECT * FROM " . $app->listform->listDef["table"] . " WHERE {$sql_where} {$sql_order_by} {$limit_sql}"); $bgcolor = "#FFFFFF"; if (is_array($records)) { $idx_key = $app->listform->listDef["table_idx"]; foreach ($records as $rec) { $rec = $app->listform->decode($rec); // Change of color $bgcolor = $bgcolor == "#FFFFFF" ? "#EEEEEE" : "#FFFFFF"; $rec["bgcolor"] = $bgcolor; // substitute value for select fields foreach ($app->listform->listDef["item"] as $field) { $key = $field["field"]; if ($field['formtype'] == "SELECT") { if (strtolower($rec[$key]) == 'y' or strtolower($rec[$key]) == 'n') { // Set a additional image variable for bolean fields $rec['_' . $key . '_'] = strtolower($rec[$key]) == 'y' ? 'x16/tick_circle.png' : 'x16/cross_circle.png'; } //* substitute value for select field @($rec[$key] = $field['value'][$rec[$key]]); } // Create a lowercase version of every item $rec[$key . '_lowercase'] = strtolower($rec[$key]); } // The variable "id" contains always the index field $rec["id"] = $rec[$idx_key]; $rec["delete_confirmation"] = $wb['delete_confirmation']; $records_new[] = $rec; } } $listTpl->setLoop('records', @$records_new); // Setting Returnto information in the session $list_name = $app->listform->listDef["name"]; // $_SESSION["s"]["list"][$list_name]["parent_id"] = $app->tform_actions->id; $_SESSION["s"]["list"][$list_name]["parent_id"] = $this->form->id; $_SESSION["s"]["list"][$list_name]["parent_name"] = $app->tform->formDef["name"]; $_SESSION["s"]["list"][$list_name]["parent_tab"] = $_SESSION["s"]["form"]["tab"]; $_SESSION["s"]["list"][$list_name]["parent_script"] = $app->tform->formDef["action"]; $_SESSION["s"]["form"]["return_to"] = $list_name; //die(print_r($_SESSION["s"]["list"][$list_name])); return $listTpl->grab(); }
function update($event_name, $data) { global $app, $conf; // get the config $app->uses("getconf"); $web_config = $app->getconf->get_server_config($conf["server_id"], 'web'); if ($web_config['server_type'] == 'apache') { $app->load('tpl'); $tpl = new tpl(); $tpl->newTemplate('apache_apps.vhost.master'); $tpl->setVar('apache_version', $app->system->getapacheversion()); $vhost_conf_dir = $web_config['vhost_conf_dir']; $vhost_conf_enabled_dir = $web_config['vhost_conf_enabled_dir']; $apps_vhost_servername = $web_config['apps_vhost_servername'] == '' ? '' : 'ServerName ' . $web_config['apps_vhost_servername']; $web_config['apps_vhost_port'] = empty($web_config['apps_vhost_port']) ? 8081 : $web_config['apps_vhost_port']; $web_config['apps_vhost_ip'] = empty($web_config['apps_vhost_ip']) ? '_default_' : $web_config['apps_vhost_ip']; $tpl->setVar('apps_vhost_ip', $web_config['apps_vhost_ip']); $tpl->setVar('apps_vhost_port', $web_config['apps_vhost_port']); $tpl->setVar('apps_vhost_dir', $web_config['website_basedir'] . '/apps'); $tpl->setVar('apps_vhost_servername', $apps_vhost_servername); $tpl->setVar('apps_vhost_basedir', $web_config['website_basedir']); $vhost_port_listen = ''; // comment out the listen directive if port is 80 or 443 if ($web_config['apps_vhost_port'] == 80 or $web_config['apps_vhost_port'] == 443) { $vhost_port_listen = '#'; } $tpl->setVar('vhost_port_listen', $vhost_port_listen); $content = $tpl->grab(); /* for backwards compatibility we replace the old syntax by hand now */ $content = str_replace('{apps_vhost_ip}', $web_config['apps_vhost_ip'], $content); $content = str_replace('{apps_vhost_port}', $web_config['apps_vhost_port'], $content); $content = str_replace('{apps_vhost_dir}', $web_config['website_basedir'] . '/apps', $content); $content = str_replace('{apps_vhost_servername}', $apps_vhost_servername, $content); $content = str_replace('{apps_vhost_basedir}', $web_config['website_basedir'], $content); $content = str_replace('{vhost_port_listen}', $vhost_port_listen, $content); /* end of backwards compatibility section */ $app->system->file_put_contents("{$vhost_conf_dir}/apps.vhost", $content); $app->services->restartServiceDelayed('httpd', 'restart'); } if ($web_config['server_type'] == 'nginx') { // Dont just copy over the virtualhost template but add some custom settings if (file_exists($conf["rootpath"] . "/conf-custom/nginx_apps.vhost.master")) { $content = file_get_contents($conf["rootpath"] . "/conf-custom/nginx_apps.vhost.master"); } else { $content = file_get_contents($conf["rootpath"] . "/conf/nginx_apps.vhost.master"); } $vhost_conf_dir = $web_config['nginx_vhost_conf_dir']; $vhost_conf_enabled_dir = $web_config['nginx_vhost_conf_enabled_dir']; $apps_vhost_servername = $web_config['apps_vhost_servername'] == '' ? '_' : $web_config['apps_vhost_servername']; $apps_vhost_user = '******'; $apps_vhost_group = 'ispapps'; $web_config['apps_vhost_port'] = empty($web_config['apps_vhost_port']) ? 8081 : $web_config['apps_vhost_port']; $web_config['apps_vhost_ip'] = empty($web_config['apps_vhost_ip']) ? '_default_' : $web_config['apps_vhost_ip']; if ($web_config['apps_vhost_ip'] == '_default_') { $apps_vhost_ip = ''; } else { $apps_vhost_ip = $web_config['apps_vhost_ip'] . ':'; } $socket_dir = escapeshellcmd($web_config['php_fpm_socket_dir']); if (substr($socket_dir, -1) != '/') { $socket_dir .= '/'; } if (!is_dir($socket_dir)) { exec('mkdir -p ' . $socket_dir); } $fpm_socket = $socket_dir . 'apps.sock'; $cgi_socket = escapeshellcmd($web_config['nginx_cgi_socket']); $content = str_replace('{apps_vhost_ip}', $apps_vhost_ip, $content); $content = str_replace('{apps_vhost_port}', $web_config['apps_vhost_port'], $content); $content = str_replace('{apps_vhost_dir}', $web_config['website_basedir'] . '/apps', $content); $content = str_replace('{apps_vhost_servername}', $apps_vhost_servername, $content); //$content = str_replace('{fpm_port}', $web_config['php_fpm_start_port']+1, $content); $content = str_replace('{fpm_socket}', $fpm_socket, $content); $content = str_replace('{cgi_socket}', $cgi_socket, $content); if (file_exists('/var/run/php5-fpm.sock')) { $use_tcp = '#'; $use_socket = ''; } else { $use_tcp = ''; $use_socket = '#'; } $content = str_replace('{use_tcp}', $use_tcp, $content); $content = str_replace('{use_socket}', $use_socket, $content); // PHP-FPM // Dont just copy over the php-fpm pool template but add some custom settings if (file_exists($conf["rootpath"] . "/conf-custom/apps_php_fpm_pool.conf.master")) { $fpm_content = file_get_contents($conf["rootpath"] . "/conf-custom/apps_php_fpm_pool.conf.master"); } else { $fpm_content = file_get_contents($conf["rootpath"] . "/conf/apps_php_fpm_pool.conf.master"); } $fpm_content = str_replace('{fpm_pool}', 'apps', $fpm_content); //$fpm_content = str_replace('{fpm_port}', $web_config['php_fpm_start_port']+1, $fpm_content); $fpm_content = str_replace('{fpm_socket}', $fpm_socket, $fpm_content); $fpm_content = str_replace('{fpm_user}', $apps_vhost_user, $fpm_content); $fpm_content = str_replace('{fpm_group}', $apps_vhost_group, $fpm_content); file_put_contents($web_config['php_fpm_pool_dir'] . '/apps.conf', $fpm_content); file_put_contents("{$vhost_conf_dir}/apps.vhost", $content); $app->services->restartServiceDelayed('httpd', 'reload'); } }
function server_ip($event_name, $data) { global $app, $conf; // load the server configuration options $app->uses('getconf'); $web_config = $app->getconf->get_server_config($conf['server_id'], 'web'); $app->load('tpl'); $tpl = new tpl(); $tpl->newTemplate('apache_ispconfig.conf.master'); $records = $app->db->queryAllRecords('SELECT * FROM server_ip WHERE server_id = ' . $conf['server_id'] . " AND virtualhost = 'y'"); $records_out = array(); if (is_array($records)) { foreach ($records as $rec) { if ($rec['ip_type'] == 'IPv6') { $ip_address = '[' . $rec['ip_address'] . ']'; } else { $ip_address = $rec['ip_address']; } $ports = explode(',', $rec['virtualhost_port']); if (is_array($ports)) { foreach ($ports as $port) { $port = intval($port); if ($port > 0 && $port < 65536 && $ip_address != '') { $records_out[] = array('ip_address' => $ip_address, 'port' => $port); } } } } } if (count($records_out) > 0) { $tpl->setLoop('ip_adresses', $records_out); } $vhost_file = escapeshellcmd($web_config['vhost_conf_dir'] . '/ispconfig.conf'); file_put_contents($vhost_file, $tpl->grab()); $app->log('Writing the conf file: ' . $vhost_file, LOGLEVEL_DEBUG); unset($tpl); }