| | |
| | | |
| | | $app->plugins->registerEvent('ftp_user_delete', $this->plugin_name, 'ftp_user_delete'); |
| | | |
| | | $app->plugins->registerAction('php_ini_changed', $this->plugin_name, 'php_ini_changed'); |
| | | } |
| | | |
| | | // check for php.ini changes |
| | | |
| | | |
| | | // Handle php.ini changes |
| | | function php_ini_changed($event_name, $data) { |
| | | global $app, $conf; |
| | | |
| | | $app->uses('getconf'); |
| | | $web_config = $app->getconf->get_server_config($conf['server_id'], 'web'); |
| | | $fastcgi_config = $app->getconf->get_server_config($conf['server_id'], 'fastcgi'); |
| | | |
| | | /* $data contains an array with these keys: |
| | | * file -> full path of changed php_ini |
| | | * mode -> web_domain php modes to change (mod, fast-cgi, php-fpm, hhvm or '' for all except 'mod') |
| | | * php_version -> php ini path that changed (additional php versions) |
| | | */ |
| | | |
| | | $qrystr = "SELECT * FROM web_domain WHERE custom_php_ini != ''"; |
| | | if($data['mode'] == 'mod') { |
| | | $qrystr .= " AND php = 'mod'"; |
| | | } elseif($data['mode'] == 'fast-cgi') { |
| | | $qrystr .= " AND php = 'fast-cgi'"; |
| | | if($data['php_version']) { |
| | | $qrystr .= " AND fastcgi_php_version LIKE '%:" . $app->db->quote($data['php_version']) . "'"; |
| | | } |
| | | } elseif($data['mode'] == 'php-fpm') { |
| | | $qrystr .= " AND php = 'php-fpm'"; |
| | | if($data['php_version']) { |
| | | $qrystr .= " AND fastcgi_php_version LIKE '%:" . $app->db->quote($data['php_version']) . ":%'"; |
| | | } |
| | | } elseif($data['mode'] == 'hhvm') { |
| | | $qrystr .= " AND php = 'hhvm'"; |
| | | if($data['php_version']) { |
| | | $qrystr .= " AND fastcgi_php_version LIKE '%:" . $app->db->quote($data['php_version']) . ":%'"; |
| | | } |
| | | } else { |
| | | $qrystr .= " AND php != 'mod' AND php != 'fast-cgi'"; |
| | | } |
| | | |
| | | |
| | | //** Get all the webs |
| | | $web_domains = $app->db->queryAllRecords($qrystr); |
| | | foreach($web_domains as $web_data) { |
| | | $custom_php_ini_dir = $web_config['website_basedir'].'/conf/'.$web_data['system_user']; |
| | | $web_folder = 'web'; |
| | | if($web_data['type'] == 'vhostsubdomain' || $web_data['type'] == 'vhostalias') { |
| | | $web_folder = $web_data['web_folder']; |
| | | $custom_php_ini_dir .= '_' . $web_folder; |
| | | } |
| | | if(!is_dir($web_config['website_basedir'].'/conf')) $app->system->mkdir($web_config['website_basedir'].'/conf'); |
| | | |
| | | |
| | | if(!is_dir($custom_php_ini_dir)) $app->system->mkdir($custom_php_ini_dir); |
| | | $php_ini_content = ''; |
| | | if($web_data['php'] == 'mod') { |
| | | $master_php_ini_path = $web_config['php_ini_path_apache']; |
| | | } else { |
| | | if($web_data['php'] == 'fast-cgi' && file_exists($fastcgi_config["fastcgi_phpini_path"])) { |
| | | $master_php_ini_path = $fastcgi_config["fastcgi_phpini_path"]; |
| | | } else { |
| | | $master_php_ini_path = $web_config['php_ini_path_cgi']; |
| | | } |
| | | } |
| | | if($master_php_ini_path != '' && substr($master_php_ini_path, -7) == 'php.ini' && is_file($master_php_ini_path)) { |
| | | $php_ini_content .= $app->system->file_get_contents($master_php_ini_path)."\n"; |
| | | } |
| | | $php_ini_content .= str_replace("\r", '', trim($web_data['custom_php_ini'])); |
| | | $app->system->file_put_contents($custom_php_ini_dir.'/php.ini', $php_ini_content); |
| | | $app->log('Info: rewrote custom php.ini for web ' . $web_data['domain_id'] . ' (' . $web_data['domain'] . ').', LOGLEVEL_DEBUG); |
| | | } |
| | | |
| | | if(count($web_domains) > 0) { |
| | | //* We do not check the apache config here - we only changed the php.ini |
| | | //* Check if this is a chrooted setup |
| | | if($web_config['website_basedir'] != '' && @is_file($web_config['website_basedir'].'/etc/passwd')) { |
| | | $apache_chrooted = true; |
| | | $app->log('Info: Apache is chrooted.', LOGLEVEL_DEBUG); |
| | | } else { |
| | | $apache_chrooted = false; |
| | | } |
| | | |
| | | $app->log('Info: rewrote all php.ini and reloading apache now.', LOGLEVEL_DEBUG); |
| | | if($apache_chrooted) { |
| | | $app->services->restartServiceDelayed('httpd', 'restart'); |
| | | } else { |
| | | // request a httpd reload when all records have been processed |
| | | $app->services->restartServiceDelayed('httpd', 'reload'); |
| | | } |
| | | } else { |
| | | $app->log('Info: No webs affected by php.ini change.', LOGLEVEL_DEBUG); |
| | | } |
| | | } |
| | | |
| | | // Handle the creation of SSL certificates |
| | |
| | | $app->log("CA path error, file does not exist:".$web_config['CA_path'].'/openssl.cnf', LOGLEVEL_ERROR); |
| | | |
| | | //* Only vhosts can have a ssl cert |
| | | if($data["new"]["type"] != "vhost" && $data["new"]["type"] != "vhostsubdomain") return; |
| | | if($data["new"]["type"] != "vhost" && $data["new"]["type"] != "vhostsubdomain" && $data["new"]["type"] != "vhostalias") return; |
| | | |
| | | // if(!is_dir($data['new']['document_root'].'/ssl')) exec('mkdir -p '.$data['new']['document_root'].'/ssl'); |
| | | if(!is_dir($data['new']['document_root'].'/ssl')) $app->system->mkdirpath($data['new']['document_root'].'/ssl'); |
| | |
| | | |
| | | if($this->action != 'insert') $this->action = 'update'; |
| | | |
| | | if($data['new']['type'] != 'vhost' && $data['new']['type'] != 'vhostsubdomain' && $data['new']['parent_domain_id'] > 0) { |
| | | if($data['new']['type'] != 'vhost' && $data['new']['type'] != 'vhostsubdomain' && $data['new']['type'] != 'vhostalias' && $data['new']['parent_domain_id'] > 0) { |
| | | |
| | | $old_parent_domain_id = intval($data['old']['parent_domain_id']); |
| | | $new_parent_domain_id = intval($data['new']['parent_domain_id']); |
| | |
| | | } |
| | | |
| | | if($data['new']['document_root'] == '') { |
| | | if($data['new']['type'] == 'vhost' || $data['new']['type'] == 'vhostsubdomain') $app->log('document_root not set', LOGLEVEL_WARN); |
| | | if($data['new']['type'] == 'vhost' || $data['new']['type'] == 'vhostsubdomain' || $data['new']['type'] == 'vhostalias') $app->log('document_root not set', LOGLEVEL_WARN); |
| | | return 0; |
| | | } |
| | | if($data['new']['system_user'] == 'root' or $data['new']['system_group'] == 'root') { |
| | |
| | | |
| | | $web_folder = 'web'; |
| | | $log_folder = 'log'; |
| | | if($data['new']['type'] == 'vhostsubdomain') { |
| | | $old_web_folder = 'web'; |
| | | $old_log_folder = 'log'; |
| | | if($data['new']['type'] == 'vhostsubdomain' || $data['new']['type'] == 'vhostalias') { |
| | | // new one |
| | | $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']; |
| | | $log_folder .= '/' . $subdomain_host; |
| | | unset($tmp); |
| | | |
| | | if(isset($data['old']['parent_domain_id'])) { |
| | | // old one |
| | | $tmp = $app->db->queryOneRecord('SELECT `domain` FROM web_domain WHERE domain_id = '.intval($data['old']['parent_domain_id'])); |
| | | $subdomain_host = preg_replace('/^(.*)\.' . preg_quote($tmp['domain'], '/') . '$/', '$1', $data['old']['domain']); |
| | | if($subdomain_host == '') $subdomain_host = 'web'.$data['old']['domain_id']; |
| | | $old_web_folder = $data['old']['web_folder']; |
| | | $old_log_folder .= '/' . $subdomain_host; |
| | | unset($tmp); |
| | | } |
| | | } |
| | | |
| | | // Create group and user, if not exist |
| | |
| | | //* Remove protection of old folders |
| | | $app->system->web_folder_protection($data['old']['document_root'], false); |
| | | |
| | | if($data["new"]["type"] != "vhostsubdomain") { |
| | | if($data["new"]["type"] != "vhostsubdomain" && $data["new"]["type"] != "vhostalias") { |
| | | //* Move the site data |
| | | $tmp_docroot = explode('/', $data['new']['document_root']); |
| | | unset($tmp_docroot[count($tmp_docroot)-1]); |
| | |
| | | if($apache_chrooted) $this->_exec('chroot '.escapeshellcmd($web_config['website_basedir']).' '.$command); |
| | | |
| | | //* Change the log mount |
| | | $fstab_line = '/var/log/ispconfig/httpd/'.$data['old']['domain'].' '.$data['old']['document_root'].'/'.$log_folder.' none bind'; |
| | | $fstab_line = '/var/log/ispconfig/httpd/'.$data['old']['domain'].' '.$data['old']['document_root'].'/'.$old_log_folder.' none bind'; |
| | | $app->system->removeLine('/etc/fstab', $fstab_line); |
| | | $fstab_line = '/var/log/ispconfig/httpd/'.$data['new']['domain'].' '.$data['new']['document_root'].'/'.$log_folder.' none bind,nobootwait 0 0'; |
| | | $fstab_line = '/var/log/ispconfig/httpd/'.$data['old']['domain'].' '.$data['old']['document_root'].'/'.$old_log_folder.' none bind,nobootwait'; |
| | | $app->system->removeLine('/etc/fstab', $fstab_line); |
| | | $fstab_line = '/var/log/ispconfig/httpd/'.$data['new']['domain'].' '.$data['new']['document_root'].'/'.$log_folder.' none bind,nobootwait,_netdev 0 0'; |
| | | $app->system->replaceLine('/etc/fstab', $fstab_line, $fstab_line, 1, 1); |
| | | |
| | | } |
| | |
| | | // Remove the symlink for the site, if site is renamed |
| | | if($this->action == 'update' && $data['old']['domain'] != '' && $data['new']['domain'] != $data['old']['domain']) { |
| | | if(is_dir('/var/log/ispconfig/httpd/'.$data['old']['domain'])) exec('rm -rf /var/log/ispconfig/httpd/'.$data['old']['domain']); |
| | | if(is_link($data['old']['document_root'].'/'.$log_folder)) $app->system->unlink($data['old']['document_root'].'/'.$log_folder); |
| | | if(is_link($data['old']['document_root'].'/'.$old_log_folder)) $app->system->unlink($data['old']['document_root'].'/'.$old_log_folder); |
| | | |
| | | //* remove old log mount |
| | | $fstab_line = '/var/log/ispconfig/httpd/'.$data['old']['domain'].' '.$data['old']['document_root'].'/'.$log_folder.' none bind'; |
| | | $fstab_line = '/var/log/ispconfig/httpd/'.$data['old']['domain'].' '.$data['old']['document_root'].'/'.$old_log_folder.' none bind'; |
| | | $app->system->removeLine('/etc/fstab', $fstab_line); |
| | | |
| | | //* Unmount log directory |
| | | exec('umount '.escapeshellarg($data['old']['document_root'].'/'.$log_folder)); |
| | | exec('umount '.escapeshellarg($data['old']['document_root'].'/'.$old_log_folder)); |
| | | } |
| | | |
| | | //* Create the log dir if nescessary and mount it |
| | |
| | | $app->system->chmod($data['new']['document_root'].'/'.$log_folder, 0755); |
| | | exec('mount --bind '.escapeshellarg('/var/log/ispconfig/httpd/'.$data['new']['domain']).' '.escapeshellarg($data['new']['document_root'].'/'.$log_folder)); |
| | | //* add mountpoint to fstab |
| | | $fstab_line = '/var/log/ispconfig/httpd/'.$data['new']['domain'].' '.$data['new']['document_root'].'/'.$log_folder.' none bind,nobootwait 0 0'; |
| | | $fstab_line = '/var/log/ispconfig/httpd/'.$data['new']['domain'].' '.$data['new']['document_root'].'/'.$log_folder.' none bind,nobootwait,_netdev 0 0'; |
| | | $app->system->replaceLine('/etc/fstab', $fstab_line, $fstab_line, 1, 1); |
| | | } |
| | | |
| | |
| | | // setting a local var here |
| | | |
| | | // normally $conf['templates'] = "/usr/local/ispconfig/server/conf"; |
| | | if($this->action == 'insert' && ($data['new']['type'] == 'vhost' || $data['new']['type'] == 'vhostsubdomain')) { |
| | | if($this->action == 'insert' && ($data['new']['type'] == 'vhost' || $data['new']['type'] == 'vhostsubdomain' || $data['new']['type'] == 'vhostalias')) { |
| | | |
| | | // Copy the error pages |
| | | if($data['new']['errordocs']) { |
| | |
| | | exec('chmod -R a+r '.escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/'); |
| | | |
| | | //** Copy the error documents on update when the error document checkbox has been activated and was deactivated before |
| | | } elseif ($this->action == 'update' && ($data['new']['type'] == 'vhost' || $data['new']['type'] == 'vhostsubdomain') && $data['old']['errordocs'] == 0 && $data['new']['errordocs'] == 1) { |
| | | } elseif ($this->action == 'update' && ($data['new']['type'] == 'vhost' || $data['new']['type'] == 'vhostsubdomain' || $data['new']['type'] == 'vhostalias') && $data['old']['errordocs'] == 0 && $data['new']['errordocs'] == 1) { |
| | | |
| | | $error_page_path = escapeshellcmd($data['new']['document_root']).'/' . $web_folder . '/error/'; |
| | | if (file_exists($conf['rootpath'] . '/conf-custom/error/'.substr(escapeshellcmd($conf['language']), 0, 2))) { |
| | |
| | | exec('chown -R '.$data['new']['system_user'].':'.$data['new']['system_group'].' '.$error_page_path); |
| | | } // end copy error docs |
| | | |
| | | // Set the quota for the user, but only for vhosts, not vhostsubdomains |
| | | // Set the quota for the user, but only for vhosts, not vhostsubdomains or vhostalias |
| | | if($username != '' && $app->system->is_user($username) && $data['new']['type'] == 'vhost') { |
| | | if($data['new']['hd_quota'] > 0) { |
| | | $blocks_soft = $data['new']['hd_quota'] * 1024; |
| | |
| | | $app->system->chown($data['new']['document_root'].'/webdav', $username); |
| | | $app->system->chgrp($data['new']['document_root'].'/webdav', $groupname); |
| | | } |
| | | } elseif(($this->action == 'insert' && $data['new']['type'] == 'vhostsubdomain') or ($web_config['set_folder_permissions_on_update'] == 'y' && $data['new']['type'] == 'vhostsubdomain')) { |
| | | } elseif((($data['new']['type'] == 'vhostsubdomain') || ($data['new']['type'] == 'vhostalias')) && |
| | | (($this->action == 'insert') || ($web_config['set_folder_permissions_on_update'] == 'y'))) { |
| | | |
| | | if($web_config['security_level'] == 20) { |
| | | $app->system->chmod($data['new']['document_root'].'/' . $web_folder, 0710); |
| | | $app->system->chown($data['new']['document_root'].'/' . $web_folder, $username); |
| | |
| | | |
| | | //* Write the custom php.ini file, if custom_php_ini fieled is not empty |
| | | $custom_php_ini_dir = $web_config['website_basedir'].'/conf/'.$data['new']['system_user']; |
| | | if($data['new']['type'] == 'vhostsubdomain') $custom_php_ini_dir .= '_' . $web_folder; |
| | | if($data['new']['type'] == 'vhostsubdomain' || $data['new']['type'] == 'vhostalias') $custom_php_ini_dir .= '_' . $web_folder; |
| | | if(!is_dir($web_config['website_basedir'].'/conf')) $app->system->mkdir($web_config['website_basedir'].'/conf'); |
| | | |
| | | //* add open_basedir restriction to custom php.ini content, required for suphp only |
| | |
| | | // Make sure we only have Unix linebreaks |
| | | $vhost_data['apache_directives'] = str_replace("\r\n", "\n", $vhost_data['apache_directives']); |
| | | $vhost_data['apache_directives'] = str_replace("\r", "\n", $vhost_data['apache_directives']); |
| | | $trans = array('{DOCROOT}' => $vhost_data['web_document_root_www']); |
| | | $vhost_data['apache_directives'] = strtr($vhost_data['apache_directives'], $trans); |
| | | |
| | | // Check if a SSL cert exists |
| | | $ssl_dir = $data['new']['document_root'].'/ssl'; |
| | |
| | | } |
| | | |
| | | // get alias domains (co-domains and subdomains) |
| | | $aliases = $app->db->queryAllRecords('SELECT * FROM web_domain WHERE parent_domain_id = '.$data['new']['domain_id']." AND active = 'y' AND type != 'vhostsubdomain'"); |
| | | $aliases = $app->db->queryAllRecords('SELECT * FROM web_domain WHERE parent_domain_id = '.$data['new']['domain_id']." AND active = 'y' AND (type != 'vhostsubdomain' AND type != 'vhostalias')"); |
| | | $alias_seo_redirects = array(); |
| | | switch($data['new']['subdomain']) { |
| | | case 'www': |
| | |
| | | $fcgi_tpl->setVar('php_fcgi_bin', escapeshellcmd($custom_fastcgi_php_executable)); |
| | | } |
| | | $fcgi_tpl->setVar('security_level', intval($web_config['security_level'])); |
| | | $fcgi_tpl->setVar('domain', escapeshellcmd($data['new']['domain'])); |
| | | |
| | | $php_open_basedir = ($data['new']['php_open_basedir'] == '')?$data['new']['document_root']:$data['new']['php_open_basedir']; |
| | | $fcgi_tpl->setVar('open_basedir', escapeshellcmd($php_open_basedir)); |
| | | |
| | | $fcgi_starter_script = escapeshellcmd($fastcgi_starter_path.$fastcgi_config['fastcgi_starter_script'].($data['new']['type'] == 'vhostsubdomain' ? '_web' . $data['new']['domain_id'] : '')); |
| | | $fcgi_starter_script = escapeshellcmd($fastcgi_starter_path.$fastcgi_config['fastcgi_starter_script'].(($data['new']['type'] == 'vhostsubdomain' || $data['new']['type'] == 'vhostalias') ? '_web' . $data['new']['domain_id'] : '')); |
| | | $app->system->file_put_contents($fcgi_starter_script, $fcgi_tpl->grab()); |
| | | unset($fcgi_tpl); |
| | | |
| | |
| | | |
| | | $tpl->setVar('fastcgi_alias', $fastcgi_config['fastcgi_alias']); |
| | | $tpl->setVar('fastcgi_starter_path', $fastcgi_starter_path); |
| | | $tpl->setVar('fastcgi_starter_script', $fastcgi_config['fastcgi_starter_script'].($data['new']['type'] == 'vhostsubdomain' ? '_web' . $data['new']['domain_id'] : '')); |
| | | $tpl->setVar('fastcgi_starter_script', $fastcgi_config['fastcgi_starter_script'].(($data['new']['type'] == 'vhostsubdomain' || $data['new']['type'] == 'vhostalias') ? '_web' . $data['new']['domain_id'] : '')); |
| | | $tpl->setVar('fastcgi_config_syntax', $fastcgi_config['fastcgi_config_syntax']); |
| | | $tpl->setVar('fastcgi_max_requests', $fastcgi_config['fastcgi_max_requests']); |
| | | |
| | |
| | | * PHP-FPM |
| | | */ |
| | | // Support for multiple PHP versions |
| | | if($data['new']['php'] == 'php-fpm'){ |
| | | if($data['new']['php'] == 'php-fpm' || $data['new']['php'] == 'hhvm'){ |
| | | 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'])); |
| | |
| | | $default_php_fpm = true; |
| | | } |
| | | } else { |
| | | if(trim($data['old']['fastcgi_php_version']) != '' && $data['old']['php'] == 'php-fpm'){ |
| | | if(trim($data['old']['fastcgi_php_version']) != '' && ($data['old']['php'] == 'php-fpm' || $data['old']['php'] == 'hhvm')){ |
| | | $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 .= '/'; |
| | |
| | | //$cgi_config = $app->getconf->get_server_config($conf['server_id'], 'cgi'); |
| | | |
| | | $cgi_config['cgi_starter_path'] = $web_config['website_basedir'].'/php-cgi-scripts/[system_user]/'; |
| | | $cgi_config['cgi_starter_script'] = 'php-cgi-starter'.($data['new']['type'] == 'vhostsubdomain' ? '_web' . $data['new']['domain_id'] : ''); |
| | | $cgi_config['cgi_starter_script'] = 'php-cgi-starter'.(($data['new']['type'] == 'vhostsubdomain' || $data['new']['type'] == 'vhostalias') ? '_web' . $data['new']['domain_id'] : ''); |
| | | $cgi_config['cgi_bin'] = '/usr/bin/php-cgi'; |
| | | |
| | | $cgi_starter_path = str_replace('[system_user]', $data['new']['system_user'], $cgi_config['cgi_starter_path']); |
| | |
| | | $cgi_tpl->setVar('php_ini_path', escapeshellcmd($fastcgi_config['fastcgi_phpini_path'])); |
| | | } |
| | | |
| | | $cgi_starter_script = escapeshellcmd($cgi_starter_path.$cgi_config['cgi_starter_script'].($data['new']['type'] == 'vhostsubdomain' ? '_web' . $data['new']['domain_id'] : '')); |
| | | $cgi_starter_script = escapeshellcmd($cgi_starter_path.$cgi_config['cgi_starter_script'].(($data['new']['type'] == 'vhostsubdomain' || $data['new']['type'] == 'vhostalias') ? '_web' . $data['new']['domain_id'] : '')); |
| | | $app->system->file_put_contents($cgi_starter_script, $cgi_tpl->grab()); |
| | | unset($cgi_tpl); |
| | | |
| | |
| | | $app->system->chgrp($cgi_starter_script, $data['new']['system_group']); |
| | | |
| | | $tpl->setVar('cgi_starter_path', $cgi_starter_path); |
| | | $tpl->setVar('cgi_starter_script', $cgi_config['cgi_starter_script'].($data['new']['type'] == 'vhostsubdomain' ? '_web' . $data['new']['domain_id'] : '')); |
| | | $tpl->setVar('cgi_starter_script', $cgi_config['cgi_starter_script'].(($data['new']['type'] == 'vhostsubdomain' || $data['new']['type'] == 'vhostalias') ? '_web' . $data['new']['domain_id'] : '')); |
| | | |
| | | } |
| | | |
| | |
| | | |
| | | //* Add vhost for IPv6 IP |
| | | if($data['new']['ipv6_address'] != '') { |
| | | if ($conf['serverconfig']['web']['vhost_rewrite_v6'] == 'y') { |
| | | if (isset($conf['serverconfig']['server']['v6_prefix']) && $conf['serverconfig']['server']['v6_prefix'] <> '') { |
| | | $explode_v6prefix=explode(':', $conf['serverconfig']['server']['v6_prefix']); |
| | | //* rewrite ipv6 on mirrors |
| | | /* chang $conf to $web_config */ |
| | | if ($web_config['serverconfig']['web']['vhost_rewrite_v6'] == 'y') { |
| | | if (isset($web_config['serverconfig']['server']['v6_prefix']) && $web_config['serverconfig']['server']['v6_prefix'] <> '') { |
| | | $explode_v6prefix=explode(':', $web_config['serverconfig']['server']['v6_prefix']); |
| | | $explode_v6=explode(':', $data['new']['ipv6_address']); |
| | | |
| | | for ( $i = 0; $i <= count($explode_v6prefix)-3; $i++ ) { |
| | |
| | | } |
| | | |
| | | //* Create awstats configuration |
| | | if($data['new']['stats_type'] == 'awstats' && ($data['new']['type'] == 'vhost' || $data['new']['type'] == 'vhostsubdomain')) { |
| | | if($data['new']['stats_type'] == 'awstats' && ($data['new']['type'] == 'vhost' || $data['new']['type'] == 'vhostsubdomain' || $data['new']['type'] == 'vhostalias')) { |
| | | $this->awstats_update($data, $web_config); |
| | | } |
| | | |
| | | $this->php_fpm_pool_update($data, $web_config, $pool_dir, $pool_name, $socket_dir); |
| | | $this->hhvm_update($data, $web_config); |
| | | |
| | | if($web_config['check_apache_config'] == 'y') { |
| | | //* Test if apache starts with the new configuration file |
| | |
| | | |
| | | //* Unset action to clean it for next processed vhost. |
| | | $this->action = ''; |
| | | |
| | | } |
| | | |
| | | function delete($event_name, $data) { |
| | |
| | | $web_config = $app->getconf->get_server_config($conf['server_id'], 'web'); |
| | | $fastcgi_config = $app->getconf->get_server_config($conf['server_id'], 'fastcgi'); |
| | | |
| | | if($data['old']['type'] == 'vhost' || $data['old']['type'] == 'vhostsubdomain') $app->system->web_folder_protection($data['old']['document_root'], false); |
| | | if($data['old']['type'] == 'vhost' || $data['old']['type'] == 'vhostsubdomain' || $data['old']['type'] == 'vhostalias') $app->system->web_folder_protection($data['old']['document_root'], false); |
| | | |
| | | //* Check if this is a chrooted setup |
| | | if($web_config['website_basedir'] != '' && @is_file($web_config['website_basedir'].'/etc/passwd')) { |
| | |
| | | //* Remove the mounts |
| | | $log_folder = 'log'; |
| | | $web_folder = ''; |
| | | if($data['old']['type'] == 'vhostsubdomain') { |
| | | if($data['old']['type'] == 'vhostsubdomain' || $data['old']['type'] == 'vhostalias') { |
| | | $tmp = $app->db->queryOneRecord('SELECT `domain`,`document_root` FROM web_domain WHERE domain_id = '.intval($data['old']['parent_domain_id'])); |
| | | if($tmp['domain'] != ''){ |
| | | $subdomain_host = preg_replace('/^(.*)\.' . preg_quote($tmp['domain'], '/') . '$/', '$1', $data['old']['domain']); |
| | |
| | | unset($subdomain_hosts); |
| | | } |
| | | |
| | | if($data['old']['type'] == 'vhost' || $data['old']['type'] == 'vhostsubdomain'){ |
| | | if($data['old']['type'] == 'vhost' || $data['old']['type'] == 'vhostsubdomain' || $data['old']['type'] == 'vhostalias'){ |
| | | if(is_array($log_folders) && !empty($log_folders)){ |
| | | foreach($log_folders as $log_folder){ |
| | | //if($app->system->is_mounted($data['old']['document_root'].'/'.$log_folder)) exec('umount '.escapeshellarg($data['old']['document_root'].'/'.$log_folder)); |
| | |
| | | } |
| | | unset($log_folders); |
| | | |
| | | if($data['old']['type'] != 'vhost' && $data['old']['type'] != 'vhostsubdomain' && $data['old']['parent_domain_id'] > 0) { |
| | | if($data['old']['type'] != 'vhost' && $data['old']['type'] != 'vhostsubdomain' && $data['old']['type'] != 'vhostalias' && $data['old']['parent_domain_id'] > 0) { |
| | | //* This is a alias domain or subdomain, so we have to update the website instead |
| | | $parent_domain_id = intval($data['old']['parent_domain_id']); |
| | | $tmp = $app->db->queryOneRecord('SELECT * FROM web_domain WHERE domain_id = '.$parent_domain_id." AND active = 'y'"); |
| | |
| | | $app->system->unlink($vhost_file); |
| | | $app->log('Removing vhost file: '.$vhost_file, LOGLEVEL_DEBUG); |
| | | |
| | | if($data['old']['type'] == 'vhost' || $data['old']['type'] == 'vhostsubdomain') { |
| | | if($data['old']['type'] == 'vhost' || $data['old']['type'] == 'vhostsubdomain' || $data['old']['type'] == 'vhostalias') { |
| | | $docroot = escapeshellcmd($data['old']['document_root']); |
| | | if($docroot != '' && !stristr($docroot, '..')) { |
| | | if($data['old']['type'] == 'vhost') { |
| | |
| | | // we use strict check as otherwise directories named '0' may not be deleted |
| | | $do_delete = false; |
| | | } else { |
| | | // read all vhost subdomains with same parent domain |
| | | // read all vhost subdomains and alias with same parent domain |
| | | $used_paths = array(); |
| | | $tmp = $app->db->queryAllRecords("SELECT `web_folder` FROM web_domain WHERE type = 'vhostsubdomain' AND parent_domain_id = ".intval($data['old']['parent_domain_id'])." AND domain_id != ".intval($data['old']['domain_id'])); |
| | | $tmp = $app->db->queryAllRecords("SELECT `web_folder` FROM web_domain WHERE (type = 'vhostsubdomain' OR type = 'vhostalias') AND parent_domain_id = ".intval($data['old']['parent_domain_id'])." AND domain_id != ".intval($data['old']['domain_id'])); |
| | | foreach($tmp as $tmprec) { |
| | | // we normalize the folder entries because we need to compare them |
| | | $tmp_folder = preg_replace('/[\/]{2,}/', '/', $tmprec['web_folder']); // replace / occuring multiple times |
| | |
| | | // remove PHP-FPM pool |
| | | if ($data['old']['php'] == 'php-fpm') { |
| | | $this->php_fpm_pool_delete($data, $web_config); |
| | | } elseif($data['old']['php'] == 'hhvm') { |
| | | $this->hhvm_update($data, $web_config); |
| | | } |
| | | |
| | | //remove the php cgi starter script if available |
| | |
| | | $this->awstats_delete($data, $web_config); |
| | | } |
| | | |
| | | if($data['old']['type'] == 'vhostsubdomain') { |
| | | if($data['old']['type'] == 'vhostsubdomain' || $data['old']['type'] == 'vhostalias') { |
| | | $app->system->web_folder_protection($parent_web_document_root, true); |
| | | } |
| | | |
| | |
| | | $app->services->restartServiceDelayed('httpd', 'reload'); |
| | | } |
| | | |
| | | //* Delete the web-backups |
| | | if($data['old']['type'] == 'vhost') { |
| | | $server_config = $app->getconf->get_server_config($conf['server_id'], 'server'); |
| | | $backup_dir = $server_config['backup_dir']; |
| | | //* mount backup directory, if necessary |
| | | $mount_backup = true; |
| | | $server_config['backup_dir_mount_cmd'] = trim($server_config['backup_dir_mount_cmd']); |
| | | if($server_config['backup_dir'] != '' && $server_config['backup_delete'] == 'y') { |
| | | if($server_config['backup_dir_is_mount'] == 'y' && $server_config['backup_dir_mount_cmd'] != ''){ |
| | | if(!$app->system->is_mounted($backup_dir)){ |
| | | exec(escapeshellcmd($server_config['backup_dir_mount_cmd'])); |
| | | sleep(1); |
| | | if(!$app->system->is_mounted($backup_dir)) $mount_backup = false; |
| | | } |
| | | } |
| | | if($mount_backup){ |
| | | $web_backup_dir = $backup_dir.'/web'.$data_old['domain_id']; |
| | | //** do not use rm -rf $web_backup_dir because database(s) may exits |
| | | exec(escapeshellcmd('rm -f '.$web_backup_dir.'/web'.$data_old['domain_id'].'_').'*'); |
| | | //* cleanup database |
| | | $sql = "DELETE FROM web_backup WHERE server_id = ".$conf['server_id']." AND parent_domain_id = ".$data_old['domain_id']." AND filename LIKE 'web".$data_old['domain_id']."_%'"; |
| | | $app->db->query($sql); |
| | | if($app->db->dbHost != $app->dbmaster->dbHost) $app->dbmaster->query($sql); |
| | | |
| | | $app->log('Deleted the web backup files', LOGLEVEL_DEBUG); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | if($data['old']['type'] != 'vhost') $app->system->web_folder_protection($data['old']['document_root'], true); |
| | | } |
| | |
| | | } |
| | | |
| | | $web_folder = 'web'; |
| | | if($website['type'] == 'vhostsubdomain') $web_folder = $website['web_folder']; |
| | | if($website['type'] == 'vhostsubdomain' || $website['type'] == 'vhostalias') $web_folder = $website['web_folder']; |
| | | |
| | | //* Get the folder path. |
| | | if(substr($folder['path'], 0, 1) == '/') $folder['path'] = substr($folder['path'], 1); |
| | |
| | | |
| | | //* Create the folder path, if it does not exist |
| | | if(!is_dir($folder_path)) { |
| | | $app->system->mkdirpath($folder_path); |
| | | $app->system->chown($folder_path, $website['system_user']); |
| | | $app->system->chgrp($folder_path, $website['system_group']); |
| | | $app->system->mkdirpath($folder_path, 0755, $website['system_user'], $website['system_group']); |
| | | } |
| | | |
| | | //* Create empty .htpasswd file, if it does not exist |
| | |
| | | } |
| | | |
| | | $web_folder = 'web'; |
| | | if($website['type'] == 'vhostsubdomain') $web_folder = $website['web_folder']; |
| | | if($website['type'] == 'vhostsubdomain' || $website['type'] == 'vhostalias') $web_folder = $website['web_folder']; |
| | | |
| | | //* Get the folder path. |
| | | if(substr($folder['path'], 0, 1) == '/') $folder['path'] = substr($folder['path'], 1); |
| | |
| | | } |
| | | |
| | | $web_folder = 'web'; |
| | | if($website['type'] == 'vhostsubdomain') $web_folder = $website['web_folder']; |
| | | if($website['type'] == 'vhostsubdomain' || $website['type'] == 'vhostalias') $web_folder = $website['web_folder']; |
| | | |
| | | //* Get the folder path. |
| | | if(substr($data['old']['path'], 0, 1) == '/') $data['old']['path'] = substr($data['old']['path'], 1); |
| | |
| | | $app->system->chown($new_folder_path.'.htaccess', $website['system_user']); |
| | | $app->system->chgrp($new_folder_path.'.htaccess', $website['system_group']); |
| | | $app->log('Created/modified file '.$new_folder_path.'.htaccess', LOGLEVEL_DEBUG); |
| | | |
| | | //* Create empty .htpasswd file, if it does not exist |
| | | if(!is_file($folder_path.'.htpasswd')) { |
| | | $app->system->touch($new_folder_path.'.htpasswd'); |
| | | $app->system->chmod($new_folder_path.'.htpasswd', 0750); |
| | | $app->system->chown($new_folder_path.'.htpasswd', $website['system_user']); |
| | | $app->system->chgrp($new_folder_path.'.htpasswd', $website['system_group']); |
| | | $app->log('Created file '.$new_folder_path.'.htpasswd', LOGLEVEL_DEBUG); |
| | | } |
| | | } |
| | | |
| | | //* Remove .htaccess file |
| | |
| | | } |
| | | |
| | | $content = ''; |
| | | $content .= "Include \"".$awstats_conf_dir."/awstats.conf\"\n"; |
| | | if (is_file($awstats_conf_dir."/awstats.conf")) { |
| | | $include_file = $awstats_conf_dir."/awstats.conf"; |
| | | } elseif (is_file($awstats_conf_dir."/awstats.model.conf")) { |
| | | $include_file = $awstats_conf_dir."/awstats.model.conf"; |
| | | } |
| | | $content .= "Include \"".$include_file."\"\n"; |
| | | $content .= "LogFile=\"/var/log/ispconfig/httpd/".$data['new']['domain']."/access.log\"\n"; |
| | | $content .= "SiteDomain=\"".$data['new']['domain']."\"\n"; |
| | | $content .= "HostAliases=\"www.".$data['new']['domain']." localhost 127.0.0.1\"\n"; |
| | | |
| | | $app->system->file_put_contents($awstats_conf_dir.'/awstats.'.$data['new']['domain'].'.conf', $content); |
| | | $app->log('Created AWStats config file: '.$awstats_conf_dir.'/awstats.'.$data['new']['domain'].'.conf', LOGLEVEL_DEBUG); |
| | | if (isset($include_file)) { |
| | | $app->system->file_put_contents($awstats_conf_dir.'/awstats.'.$data['new']['domain'].'.conf', $content); |
| | | $app->log('Created AWStats config file: '.$awstats_conf_dir.'/awstats.'.$data['new']['domain'].'.conf', LOGLEVEL_DEBUG); |
| | | } else { |
| | | $app->log("No awstats base config found. Either awstats.conf or awstats.model.conf must exist in ".$awstats_conf_dir.".", LOGLEVEL_WARN); |
| | | } |
| | | } |
| | | |
| | | if(is_file($data['new']['document_root']."/" . $web_folder . "/stats/index.html")) $app->system->unlink($data['new']['document_root']."/" . $web_folder . "/stats/index.html"); |
| | |
| | | if ( @is_file($awstats_conf_dir.'/awstats.'.$data['old']['domain'].'.conf') ) { |
| | | $app->system->unlink($awstats_conf_dir.'/awstats.'.$data['old']['domain'].'.conf'); |
| | | $app->log('Removed AWStats config file: '.$awstats_conf_dir.'/awstats.'.$data['old']['domain'].'.conf', LOGLEVEL_DEBUG); |
| | | } |
| | | } |
| | | |
| | | private function hhvm_update($data, $web_config) { |
| | | global $app, $conf; |
| | | |
| | | if(file_exists($conf['rootpath'] . '/conf-custom/hhvm_starter.master')) { |
| | | $content = file_get_contents($conf['rootpath'] . '/conf-custom/hhvm_starter.master'); |
| | | } else { |
| | | $content = file_get_contents($conf['rootpath'] . '/conf/hhvm_starter.master'); |
| | | } |
| | | |
| | | if($data['new']['php'] == 'hhvm' && $data['old']['php'] != 'hhvm') { |
| | | $content = str_replace('{SYSTEM_USER}', $data['new']['system_user'], $content); |
| | | file_put_contents('/etc/init.d/hhvm_' . $data['new']['system_user'], $content); |
| | | exec('chmod +x /etc/init.d/hhvm_' . $data['new']['system_user'] . ' >/dev/null 2>&1'); |
| | | exec('/usr/sbin/update-rc.d hhvm_' . $data['new']['system_user'] . ' defaults >/dev/null 2>&1'); |
| | | exec('/etc/init.d/hhvm_' . $data['new']['system_user'] . ' start >/dev/null 2>&1'); |
| | | } elseif($data['new']['php'] != 'hhvm' && $data['old']['php'] == 'hhvm') { |
| | | exec('/etc/init.d/hhvm_' . $data['old']['system_user'] . ' stop >/dev/null 2>&1'); |
| | | exec('/usr/sbin/update-rc.d hhvm_' . $data['old']['system_user'] . ' remove >/dev/null 2>&1'); |
| | | unlink('/etc/init.d/hhvm_' . $data['old']['system_user'] . ' >/dev/null 2>&1'); |
| | | } |
| | | } |
| | | |
| | |
| | | |
| | | $fpm_socket = $socket_dir.$pool_name.'.sock'; |
| | | $tpl->setVar('fpm_socket', $fpm_socket); |
| | | $tpl->setVar('fpm_listen_mode', '0600'); |
| | | |
| | | $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('fpm_domain', $data['new']['domain']); |
| | | $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_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 != ''){ |
| | |
| | | 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); |
| | | if($value){ |
| | | $value = trim($value); |
| | | list($key, $value) = explode('=', $ini_setting, 2); |
| | | $value = trim($value); |
| | | if($value != ''){ |
| | | $key = trim($key); |
| | | switch (strtolower($value)) { |
| | | case '0': |