From c7f0b83c0da6f807f5859d5d666c1dfd009019b9 Mon Sep 17 00:00:00 2001 From: tbrehm <t.brehm@ispconfig.org> Date: Tue, 06 Nov 2012 10:11:11 -0500 Subject: [PATCH] Implemented: FS#2437 - iterate_query in dovecot-sql.conf is missing The query is added for reference and is commented out by default as it is not compatible with dovecot 1.2 and not required by ispconfig. --- server/plugins-available/nginx_plugin.inc.php | 405 +++++++++++++++++++++++++++++++++++---------------------- 1 files changed, 246 insertions(+), 159 deletions(-) diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php index ef376e0..f6341dc 100644 --- a/server/plugins-available/nginx_plugin.inc.php +++ b/server/plugins-available/nginx_plugin.inc.php @@ -115,7 +115,7 @@ $crt_file = $ssl_dir.'/'.$domain.'.crt'; //* Create a SSL Certificate - if($data['new']['ssl_action'] == 'create') { + if($data['new']['ssl_action'] == 'create' && $conf['mirror_server_id'] == 0) { $this->ssl_certificate_changed = true; @@ -934,109 +934,189 @@ $vhost_data['seo_redirect_enabled'] = 0; } - $tpl->setVar($vhost_data); + // Rewrite rules + $own_rewrite_rules = array(); $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]') $data['new']['redirect_path'] = '$scheme'.substr($data['new']['redirect_path'],8); - - /* Disabled path extension - if($data['new']['redirect_type'] == 'no' && substr($data['new']['redirect_path'],0,4) != 'http') { - $data['new']['redirect_path'] = $data['new']['document_root'].'/web'.realpath($data['new']['redirect_path']).'/'; + if(substr($data['new']['redirect_path'],0,8) == '[scheme]'){ + if($data['new']['redirect_type'] != 'internal'){ + $data['new']['redirect_path'] = '$scheme'.substr($data['new']['redirect_path'],8); + } else { + $data['new']['redirect_path'] = 'http'.substr($data['new']['redirect_path'],8); + } } - */ switch($data['new']['subdomain']) { case 'www': if(substr($data['new']['redirect_path'],0,1) == '/'){ // relative path - $rewrite_exclude = '(?!'.substr($data['new']['redirect_path'],0,-1).')'; + if($data['new']['redirect_type'] == 'internal'){ + $vhost_data['web_document_root_www_internal'] = 'root '.$vhost_data['web_document_root_www'].';'; + $vhost_data['web_document_root_www'] .= substr($data['new']['redirect_path'],0,-1); + break; + } + $rewrite_exclude = '(?!/\b('.substr($data['new']['redirect_path'],1,-1).(substr($data['new']['redirect_path'],1,-1) != ''? '|': '').'stats'.($vhost_data['errordocs'] == 1 ? '|error' : '').')\b)/'; } else { // URL - check if URL is local $tmp_redirect_path = $data['new']['redirect_path']; if(substr($tmp_redirect_path,0,7) == '$scheme') $tmp_redirect_path = 'http'.substr($tmp_redirect_path,7); $tmp_redirect_path_parts = parse_url($tmp_redirect_path); - if($tmp_redirect_path_parts['host'] == $data['new']['domain'] && ($tmp_redirect_path_parts['port'] == '80' || $tmp_redirect_path_parts['port'] == '443' || !isset($tmp_redirect_path_parts['port']))){ + if(($tmp_redirect_path_parts['host'] == $data['new']['domain'] || $tmp_redirect_path_parts['host'] == 'www.'.$data['new']['domain']) && ($tmp_redirect_path_parts['port'] == '80' || $tmp_redirect_path_parts['port'] == '443' || !isset($tmp_redirect_path_parts['port']))){ + // URL is local if(substr($tmp_redirect_path_parts['path'],-1) == '/') $tmp_redirect_path_parts['path'] = substr($tmp_redirect_path_parts['path'],0,-1); if(substr($tmp_redirect_path_parts['path'],0,1) != '/') $tmp_redirect_path_parts['path'] = '/'.$tmp_redirect_path_parts['path']; - $rewrite_exclude = '(?!'.$tmp_redirect_path_parts['path'].')'; + //$rewrite_exclude = '((?!'.$tmp_redirect_path_parts['path'].'))'; + if($data['new']['redirect_type'] == 'internal'){ + $vhost_data['web_document_root_www_internal'] = 'root '.$vhost_data['web_document_root_www'].';'; + $vhost_data['web_document_root_www'] .= $tmp_redirect_path_parts['path']; + break; + } else { + $rewrite_exclude = '(?!/\b('.substr($tmp_redirect_path_parts['path'],1).(substr($tmp_redirect_path_parts['path'],1) != ''? '|': '').'stats'.($vhost_data['errordocs'] == 1 ? '|error' : '').')\b)/'; + } } else { - $rewrite_exclude = '(.?)'; + // external URL + $rewrite_exclude = '(.?)/'; + if($data['new']['redirect_type'] == 'internal'){ + $vhost_data['use_internal'] = 'y'; + } } unset($tmp_redirect_path); unset($tmp_redirect_path_parts); } - $rewrite_rules[] = array( 'rewrite_domain' => '^'.$this->_rewrite_quote($data['new']['domain']), - 'rewrite_type' => ($data['new']['redirect_type'] == 'no')?'':$data['new']['redirect_type'], - 'rewrite_target' => $data['new']['redirect_path'], - 'rewrite_exclude' => $rewrite_exclude); - - if(substr($data['new']['redirect_path'],0,1) == '/'){ // relative path - $rewrite_exclude = '(?!'.substr($data['new']['redirect_path'],0,-1).')'; - } else { // URL - check if URL is local - $tmp_redirect_path = $data['new']['redirect_path']; - if(substr($tmp_redirect_path,0,7) == '$scheme') $tmp_redirect_path = 'http'.substr($tmp_redirect_path,7); - $tmp_redirect_path_parts = parse_url($tmp_redirect_path); - if($tmp_redirect_path_parts['host'] == 'www.'.$data['new']['domain'] && ($tmp_redirect_path_parts['port'] == '80' || $tmp_redirect_path_parts['port'] == '443' || !isset($tmp_redirect_path_parts['port']))){ - if(substr($tmp_redirect_path_parts['path'],-1) == '/') $tmp_redirect_path_parts['path'] = substr($tmp_redirect_path_parts['path'],0,-1); - if(substr($tmp_redirect_path_parts['path'],0,1) != '/') $tmp_redirect_path_parts['path'] = '/'.$tmp_redirect_path_parts['path']; - $rewrite_exclude = '(?!'.$tmp_redirect_path_parts['path'].')'; - } else { - $rewrite_exclude = '(.?)'; - } - unset($tmp_redirect_path); - unset($tmp_redirect_path_parts); - } - $rewrite_rules[] = array( 'rewrite_domain' => '^' . $this->_rewrite_quote('www.'.$data['new']['domain']), - 'rewrite_type' => ($data['new']['redirect_type'] == 'no')?'':$data['new']['redirect_type'], - 'rewrite_target' => $data['new']['redirect_path'], - 'rewrite_exclude' => $rewrite_exclude); + $own_rewrite_rules[] = array( 'rewrite_domain' => '^'.$this->_rewrite_quote($data['new']['domain']), + 'rewrite_type' => ($data['new']['redirect_type'] == 'no')?'':$data['new']['redirect_type'], + 'rewrite_target' => $data['new']['redirect_path'], + 'rewrite_exclude' => $rewrite_exclude, + 'use_rewrite' => ($data['new']['redirect_type'] == 'internal' ? false:true), + 'use_internal' => ($data['new']['redirect_type'] == 'internal' ? true:false)); break; case '*': if(substr($data['new']['redirect_path'],0,1) == '/'){ // relative path - $rewrite_exclude = '(?!'.substr($data['new']['redirect_path'],0,-1).')'; + if($data['new']['redirect_type'] == 'internal'){ + $vhost_data['web_document_root_www_internal'] = 'root '.$vhost_data['web_document_root_www'].';'; + $vhost_data['web_document_root_www'] .= substr($data['new']['redirect_path'],0,-1); + break; + } + $rewrite_exclude = '(?!/\b('.substr($data['new']['redirect_path'],1,-1).(substr($data['new']['redirect_path'],1,-1) != ''? '|': '').'stats'.($vhost_data['errordocs'] == 1 ? '|error' : '').')\b)/'; } else { // URL - check if URL is local $tmp_redirect_path = $data['new']['redirect_path']; if(substr($tmp_redirect_path,0,7) == '$scheme') $tmp_redirect_path = 'http'.substr($tmp_redirect_path,7); $tmp_redirect_path_parts = parse_url($tmp_redirect_path); - if(substr($tmp_redirect_path_parts['host'],-strlen($data['new']['domain'])) == $data['new']['domain'] && ($tmp_redirect_path_parts['port'] == '80' || $tmp_redirect_path_parts['port'] == '443' || !isset($tmp_redirect_path_parts['port']))){ + /* + // find alias & subdomains that are server aliases + $is_serveralias = true; + if($app->db->queryAllRecords("SELECT * FROM web_domain WHERE (CONCAT( subdomain, '.', domain ) = '".$tmp_redirect_path_parts['host']."' OR domain = '".$tmp_redirect_path_parts['host']."') AND (parent_domain_id != ".$data['new']['domain_id']." OR (parent_domain_id = ".$data['new']['domain_id']." AND ((redirect_type != '' AND redirect_type != 'no' AND redirect_path != '') OR type = 'vhostsubdomain'))) AND active = 'y'")) $is_serveralias = false; + + if(substr($tmp_redirect_path_parts['host'],-strlen($data['new']['domain'])) != $data['new']['domain']) $is_serveralias = false; + + + + + "SELECT * FROM web_domain WHERE (CONCAT( subdomain, '.', domain ) = 'bla.huhu.de' OR domain = 'bla.huhu.de' OR CONCAT( subdomain, '.', domain ) = '*.huhu.de') AND (domain_id = 10 OR (parent_domain_id = 10 AND (redirect_type = '' OR redirect_type = 'no' OR redirect_path = ''))) AND type != 'vhostsubdomain' AND active = 'y'" + + $check_alias_subdomains = $app->db->queryAllRecords("SELECT * FROM web_domain WHERE parent_domain_id = ".$data['new']['domain_id']." AND (redirect_type = '' OR redirect_type = 'no') AND redirect_path = '' AND active = 'y' AND type != 'vhostsubdomain'"); + + //$check_not_alias_subdomains = $app->db->queryAllRecords("SELECT domain FROM web_domain WHERE domain LIKE '%.".$data['new']['domain']."' AND domain != '".$data['new']['domain']."' AND redirect_type != '' AND redirect_type != 'no' AND redirect_path != '' AND domain_id != ".$data['new']['domain_id']); + $alias_subdomains = array(); + if(is_array($check_alias_subdomains) && !empty($check_alias_subdomains)){ + foreach($check_alias_subdomains as $check_alias_subdomain){ + $alias_subdomains[] = $check_alias_subdomain['domain']; + if($check_alias_subdomain['subdomain'] == 'www') $alias_subdomains[] = 'www.'.$check_alias_subdomain['domain']; + if($check_alias_subdomain['subdomain'] == '*'){ + //$alias_subdomains[] = '*.'.$check_alias_subdomain['domain']; + if(substr($tmp_redirect_path_parts['host'],-strlen($check_alias_subdomain['domain'])) == $check_alias_subdomain['domain']){ + //$check_not_alias_subdomains = $app->db->queryAllRecords("SELECT * FROM web_domain WHERE parent_domain_id = ".$data['new']['domain_id']." AND redirect_type != '' AND redirect_type != 'no' AND redirect_path != '' AND active = 'y' AND type != 'vhostsubdomain'"); + $check_not_alias_subdomains = $app->db->queryAllRecords("SELECT * FROM web_domain WHERE CONCAT( subdomain, '.', domain ) = '".$tmp_redirect_path_parts['host']."' OR domain = '".$tmp_redirect_path_parts['host']."'"); + //$alias_subdomains[] = $tmp_redirect_path_parts['host']; + } + } + } + } + if(!empty($alias_subdomains)){ + if(in_array($tmp_redirect_path_parts['host'], $alias_subdomains)){ + $is_serveralias = true; + } else { + $is_serveralias = false; + } + } else { + $is_serveralias = false; + } + */ + //if($is_serveralias && ($tmp_redirect_path_parts['port'] == '80' || $tmp_redirect_path_parts['port'] == '443' || !isset($tmp_redirect_path_parts['port']))){ + if($this->url_is_local($tmp_redirect_path_parts['host'], $data['new']['domain_id'])){ + // URL is local if(substr($tmp_redirect_path_parts['path'],-1) == '/') $tmp_redirect_path_parts['path'] = substr($tmp_redirect_path_parts['path'],0,-1); if(substr($tmp_redirect_path_parts['path'],0,1) != '/') $tmp_redirect_path_parts['path'] = '/'.$tmp_redirect_path_parts['path']; - $rewrite_exclude = '(?!'.$tmp_redirect_path_parts['path'].')'; + //$rewrite_exclude = '((?!'.$tmp_redirect_path_parts['path'].'))'; + if($data['new']['redirect_type'] == 'internal'){ + $vhost_data['web_document_root_www_internal'] = 'root '.$vhost_data['web_document_root_www'].';'; + $vhost_data['web_document_root_www'] .= $tmp_redirect_path_parts['path']; + break; + } else { + $rewrite_exclude = '(?!/\b('.substr($tmp_redirect_path_parts['path'],1).(substr($tmp_redirect_path_parts['path'],1) != ''? '|': '').'stats'.($vhost_data['errordocs'] == 1 ? '|error' : '').')\b)/'; + } } else { - $rewrite_exclude = '(.?)'; + // external URL + $rewrite_exclude = '(.?)/'; + if($data['new']['redirect_type'] == 'internal'){ + $vhost_data['use_internal'] = 'y'; + } } unset($tmp_redirect_path); unset($tmp_redirect_path_parts); } - $rewrite_rules[] = array( 'rewrite_domain' => '(^|\.)'.$this->_rewrite_quote($data['new']['domain']), + $own_rewrite_rules[] = array( 'rewrite_domain' => '(^|\.)'.$this->_rewrite_quote($data['new']['domain']), 'rewrite_type' => ($data['new']['redirect_type'] == 'no')?'':$data['new']['redirect_type'], 'rewrite_target' => $data['new']['redirect_path'], - 'rewrite_exclude' => $rewrite_exclude); + 'rewrite_exclude' => $rewrite_exclude, + 'use_rewrite' => ($data['new']['redirect_type'] == 'internal' ? false:true), + 'use_internal' => ($data['new']['redirect_type'] == 'internal' ? true:false)); break; default: if(substr($data['new']['redirect_path'],0,1) == '/'){ // relative path - $rewrite_exclude = '(?!'.substr($data['new']['redirect_path'],0,-1).')'; + if($data['new']['redirect_type'] == 'internal'){ + $vhost_data['web_document_root_www_internal'] = 'root '.$vhost_data['web_document_root_www'].';'; + $vhost_data['web_document_root_www'] .= substr($data['new']['redirect_path'],0,-1); + break; + } + $rewrite_exclude = '(?!/\b('.substr($data['new']['redirect_path'],1,-1).(substr($data['new']['redirect_path'],1,-1) != ''? '|': '').'stats'.($vhost_data['errordocs'] == 1 ? '|error' : '').')\b)/'; } else { // URL - check if URL is local $tmp_redirect_path = $data['new']['redirect_path']; if(substr($tmp_redirect_path,0,7) == '$scheme') $tmp_redirect_path = 'http'.substr($tmp_redirect_path,7); $tmp_redirect_path_parts = parse_url($tmp_redirect_path); if($tmp_redirect_path_parts['host'] == $data['new']['domain'] && ($tmp_redirect_path_parts['port'] == '80' || $tmp_redirect_path_parts['port'] == '443' || !isset($tmp_redirect_path_parts['port']))){ + // URL is local if(substr($tmp_redirect_path_parts['path'],-1) == '/') $tmp_redirect_path_parts['path'] = substr($tmp_redirect_path_parts['path'],0,-1); if(substr($tmp_redirect_path_parts['path'],0,1) != '/') $tmp_redirect_path_parts['path'] = '/'.$tmp_redirect_path_parts['path']; - $rewrite_exclude = '(?!'.$tmp_redirect_path_parts['path'].')'; + //$rewrite_exclude = '((?!'.$tmp_redirect_path_parts['path'].'))'; + if($data['new']['redirect_type'] == 'internal'){ + $vhost_data['web_document_root_www_internal'] = 'root '.$vhost_data['web_document_root_www'].';'; + $vhost_data['web_document_root_www'] .= $tmp_redirect_path_parts['path']; + break; + } else { + $rewrite_exclude = '(?!/\b('.substr($tmp_redirect_path_parts['path'],1).(substr($tmp_redirect_path_parts['path'],1) != ''? '|': '').'stats'.($vhost_data['errordocs'] == 1 ? '|error' : '').')\b)/'; + } } else { - $rewrite_exclude = '(.?)'; + // external URL + $rewrite_exclude = '(.?)/'; + if($data['new']['redirect_type'] == 'internal'){ + $vhost_data['use_internal'] = 'y'; + } } unset($tmp_redirect_path); unset($tmp_redirect_path_parts); } - $rewrite_rules[] = array( 'rewrite_domain' => '^'.$this->_rewrite_quote($data['new']['domain']), - 'rewrite_type' => ($data['new']['redirect_type'] == 'no')?'':$data['new']['redirect_type'], - 'rewrite_target' => $data['new']['redirect_path'], - 'rewrite_exclude' => $rewrite_exclude); + $own_rewrite_rules[] = array( 'rewrite_domain' => '^'.$this->_rewrite_quote($data['new']['domain']), + 'rewrite_type' => ($data['new']['redirect_type'] == 'no')?'':$data['new']['redirect_type'], + 'rewrite_target' => $data['new']['redirect_path'], + 'rewrite_exclude' => $rewrite_exclude, + 'use_rewrite' => ($data['new']['redirect_type'] == 'internal' ? false:true), + 'use_internal' => ($data['new']['redirect_type'] == 'internal' ? true:false)); } } + + $tpl->setVar($vhost_data); $server_alias = array(); @@ -1054,8 +1134,6 @@ $server_alias[] .= $auto_alias.' '; } - // 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'"); switch($data['new']['subdomain']) { case 'www': $server_alias[] = 'www.'.$data['new']['domain'].' '; @@ -1064,120 +1142,89 @@ $server_alias[] = '*.'.$data['new']['domain'].' '; break; } + + // 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'"); if(is_array($aliases)) { foreach($aliases 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'].' '; - break; + if($alias['redirect_type'] == '' || $alias['redirect_path'] == '') { + 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'].' '; + break; + } + $app->log('Add server alias: '.$alias['domain'],LOGLEVEL_DEBUG); } - $app->log('Add server alias: '.$alias['domain'],LOGLEVEL_DEBUG); // Rewriting if($alias['redirect_type'] != '' && $alias['redirect_path'] != '') { if(substr($alias['redirect_path'],-1) != '/') $alias['redirect_path'] .= '/'; - if(substr($alias['redirect_path'],0,8) == '[scheme]') $alias['redirect_path'] = '$scheme'.substr($alias['redirect_path'],8); - - /* Disabled the path extension - if($data['new']['redirect_type'] == 'no' && substr($data['new']['redirect_path'],0,4) != 'http') { - $data['new']['redirect_path'] = $data['new']['document_root'].'/web'.realpath($data['new']['redirect_path']).'/'; + if(substr($alias['redirect_path'],0,8) == '[scheme]'){ + if($alias['redirect_type'] != 'internal'){ + $alias['redirect_path'] = '$scheme'.substr($alias['redirect_path'],8); + } else { + $alias['redirect_path'] = 'http'.substr($alias['redirect_path'],8); + } } - */ switch($alias['subdomain']) { case 'www': if(substr($alias['redirect_path'],0,1) == '/'){ // relative path - $rewrite_exclude = '(?!'.substr($alias['redirect_path'],0,-1).')'; - } else { // URL - check if URL is local - $tmp_redirect_path = $alias['redirect_path']; - if(substr($tmp_redirect_path,0,7) == '$scheme') $tmp_redirect_path = 'http'.substr($tmp_redirect_path,7); - $tmp_redirect_path_parts = parse_url($tmp_redirect_path); - if($tmp_redirect_path_parts['host'] == $alias['domain'] && ($tmp_redirect_path_parts['port'] == '80' || $tmp_redirect_path_parts['port'] == '443' || !isset($tmp_redirect_path_parts['port']))){ - if(substr($tmp_redirect_path_parts['path'],-1) == '/') $tmp_redirect_path_parts['path'] = substr($tmp_redirect_path_parts['path'],0,-1); - if(substr($tmp_redirect_path_parts['path'],0,1) != '/') $tmp_redirect_path_parts['path'] = '/'.$tmp_redirect_path_parts['path']; - $rewrite_exclude = '(?!'.$tmp_redirect_path_parts['path'].')'; - } else { - $rewrite_exclude = '(.?)'; - } - unset($tmp_redirect_path); - unset($tmp_redirect_path_parts); + $alias['redirect_path'] = ($alias['redirect_type'] == 'internal'? 'http' : '$scheme').'://'.($vhost_data['seo_redirect_enabled'] ? $vhost_data['seo_redirect_target_domain'] : $data['new']['domain']).$alias['redirect_path']; } - $rewrite_rules[] = array( 'rewrite_domain' => '^'.$this->_rewrite_quote($alias['domain']), + if($alias['redirect_type'] != 'internal'){ + if(substr($alias['redirect_path'],-1) == '/') $alias['redirect_path'] = substr($alias['redirect_path'],0,-1); + } + $rewrite_rules[] = array( 'rewrite_domain' => $alias['domain'], 'rewrite_type' => ($alias['redirect_type'] == 'no')?'':$alias['redirect_type'], 'rewrite_target' => $alias['redirect_path'], - 'rewrite_exclude' => $rewrite_exclude); + 'use_rewrite' => ($alias['redirect_type'] == 'internal' ? false:true), + 'use_internal' => ($alias['redirect_type'] == 'internal' ? true:false)); if(substr($alias['redirect_path'],0,1) == '/'){ // relative path - $rewrite_exclude = '(?!'.substr($alias['redirect_path'],0,-1).')'; - } else { // URL - check if URL is local - $tmp_redirect_path = $alias['redirect_path']; - if(substr($tmp_redirect_path,0,7) == '$scheme') $tmp_redirect_path = 'http'.substr($tmp_redirect_path,7); - $tmp_redirect_path_parts = parse_url($tmp_redirect_path); - if($tmp_redirect_path_parts['host'] == 'www.'.$alias['domain'] && ($tmp_redirect_path_parts['port'] == '80' || $tmp_redirect_path_parts['port'] == '443' || !isset($tmp_redirect_path_parts['port']))){ - if(substr($tmp_redirect_path_parts['path'],-1) == '/') $tmp_redirect_path_parts['path'] = substr($tmp_redirect_path_parts['path'],0,-1); - if(substr($tmp_redirect_path_parts['path'],0,1) != '/') $tmp_redirect_path_parts['path'] = '/'.$tmp_redirect_path_parts['path']; - $rewrite_exclude = '(?!'.$tmp_redirect_path_parts['path'].')'; - } else { - $rewrite_exclude = '(.?)'; - } - unset($tmp_redirect_path); - unset($tmp_redirect_path_parts); + $alias['redirect_path'] = ($alias['redirect_type'] == 'internal'? 'http' : '$scheme').'://'.($vhost_data['seo_redirect_enabled'] ? $vhost_data['seo_redirect_target_domain'] : $data['new']['domain']).$alias['redirect_path']; } - $rewrite_rules[] = array( 'rewrite_domain' => '^' . $this->_rewrite_quote('www.'.$alias['domain']), - 'rewrite_type' => ($alias['redirect_type'] == 'no')?'':$alias['redirect_type'], - 'rewrite_target' => $alias['redirect_path'], - 'rewrite_exclude' => $rewrite_exclude); + if($alias['redirect_type'] != 'internal'){ + if(substr($alias['redirect_path'],-1) == '/') $alias['redirect_path'] = substr($alias['redirect_path'],0,-1); + } + $rewrite_rules[] = array( 'rewrite_domain' => 'www.'.$alias['domain'], + 'rewrite_type' => ($alias['redirect_type'] == 'no')?'':$alias['redirect_type'], + 'rewrite_target' => $alias['redirect_path'], + 'use_rewrite' => ($alias['redirect_type'] == 'internal' ? false:true), + 'use_internal' => ($alias['redirect_type'] == 'internal' ? true:false)); break; case '*': if(substr($alias['redirect_path'],0,1) == '/'){ // relative path - $rewrite_exclude = '(?!'.substr($alias['redirect_path'],0,-1).')'; - } else { // URL - check if URL is local - $tmp_redirect_path = $alias['redirect_path']; - if(substr($tmp_redirect_path,0,7) == '$scheme') $tmp_redirect_path = 'http'.substr($tmp_redirect_path,7); - $tmp_redirect_path_parts = parse_url($tmp_redirect_path); - if(substr($tmp_redirect_path_parts['host'],-strlen($alias['domain'])) == $alias['domain'] && ($tmp_redirect_path_parts['port'] == '80' || $tmp_redirect_path_parts['port'] == '443' || !isset($tmp_redirect_path_parts['port']))){ - if(substr($tmp_redirect_path_parts['path'],-1) == '/') $tmp_redirect_path_parts['path'] = substr($tmp_redirect_path_parts['path'],0,-1); - if(substr($tmp_redirect_path_parts['path'],0,1) != '/') $tmp_redirect_path_parts['path'] = '/'.$tmp_redirect_path_parts['path']; - $rewrite_exclude = '(?!'.$tmp_redirect_path_parts['path'].')'; - } else { - $rewrite_exclude = '(.?)'; - } - unset($tmp_redirect_path); - unset($tmp_redirect_path_parts); + $alias['redirect_path'] = ($alias['redirect_type'] == 'internal'? 'http' : '$scheme').'://'.($vhost_data['seo_redirect_enabled'] ? $vhost_data['seo_redirect_target_domain'] : $data['new']['domain']).$alias['redirect_path']; } - $rewrite_rules[] = array( 'rewrite_domain' => '(^|\.)' . $this->_rewrite_quote($alias['domain']), + if($alias['redirect_type'] != 'internal'){ + if(substr($alias['redirect_path'],-1) == '/') $alias['redirect_path'] = substr($alias['redirect_path'],0,-1); + } + $rewrite_rules[] = array( 'rewrite_domain' => '*.' . $alias['domain'], 'rewrite_type' => ($alias['redirect_type'] == 'no')?'':$alias['redirect_type'], 'rewrite_target' => $alias['redirect_path'], - 'rewrite_exclude' => $rewrite_exclude); + 'use_rewrite' => ($alias['redirect_type'] == 'internal' ? false:true), + 'use_internal' => ($alias['redirect_type'] == 'internal' ? true:false)); break; default: if(substr($alias['redirect_path'],0,1) == '/'){ // relative path - $rewrite_exclude = '(?!'.substr($alias['redirect_path'],0,-1).')'; - } else { // URL - check if URL is local - $tmp_redirect_path = $alias['redirect_path']; - if(substr($tmp_redirect_path,0,7) == '$scheme') $tmp_redirect_path = 'http'.substr($tmp_redirect_path,7); - $tmp_redirect_path_parts = parse_url($tmp_redirect_path); - if($tmp_redirect_path_parts['host'] == $alias['domain'] && ($tmp_redirect_path_parts['port'] == '80' || $tmp_redirect_path_parts['port'] == '443' || !isset($tmp_redirect_path_parts['port']))){ - if(substr($tmp_redirect_path_parts['path'],-1) == '/') $tmp_redirect_path_parts['path'] = substr($tmp_redirect_path_parts['path'],0,-1); - if(substr($tmp_redirect_path_parts['path'],0,1) != '/') $tmp_redirect_path_parts['path'] = '/'.$tmp_redirect_path_parts['path']; - $rewrite_exclude = '(?!'.$tmp_redirect_path_parts['path'].')'; - } else { - $rewrite_exclude = '(.?)'; - } - unset($tmp_redirect_path); - unset($tmp_redirect_path_parts); + $alias['redirect_path'] = ($alias['redirect_type'] == 'internal'? 'http' : '$scheme').'://'.($vhost_data['seo_redirect_enabled'] ? $vhost_data['seo_redirect_target_domain'] : $data['new']['domain']).$alias['redirect_path']; } - if(substr($alias['domain'], 0, 2) === '*.') $domain_rule = '(^|\.)'.$this->_rewrite_quote(substr($alias['domain'], 2)); - else $domain_rule = '^'.$this->_rewrite_quote($alias['domain']); + if($alias['redirect_type'] != 'internal'){ + if(substr($alias['redirect_path'],-1) == '/') $alias['redirect_path'] = substr($alias['redirect_path'],0,-1); + } + if(substr($alias['domain'], 0, 2) === '*.') $domain_rule = '*.'.substr($alias['domain'], 2); + else $domain_rule = $alias['domain']; $rewrite_rules[] = array( 'rewrite_domain' => $domain_rule, - 'rewrite_type' => ($alias['redirect_type'] == 'no')?'':$alias['redirect_type'], - 'rewrite_target' => $alias['redirect_path'], - 'rewrite_exclude' => $rewrite_exclude); + 'rewrite_type' => ($alias['redirect_type'] == 'no')?'':$alias['redirect_type'], + 'rewrite_target' => $alias['redirect_path'], + 'use_rewrite' => ($alias['redirect_type'] == 'internal' ? false:true), + 'use_internal' => ($alias['redirect_type'] == 'internal' ? true:false)); } } } @@ -1200,6 +1247,9 @@ if(count($rewrite_rules) > 0) { $tpl->setLoop('redirects',$rewrite_rules); + } + if(count($own_rewrite_rules) > 0) { + $tpl->setLoop('own_redirects',$own_rewrite_rules); } //* Create basic http auth for website statistics @@ -1792,7 +1842,11 @@ } if(is_file($data['new']['document_root']."/" . $web_folder . "/stats/index.html")) $app->system->unlink($data['new']['document_root']."/" . $web_folder . "/stats/index.html"); - $app->system->copy("/usr/local/ispconfig/server/conf/awstats_index.php.master",$data['new']['document_root']."/" . $web_folder . "/stats/index.php"); + if(file_exists("/usr/local/ispconfig/server/conf-custom/awstats_index.php.master")) { + $app->system->copy("/usr/local/ispconfig/server/conf-custom/awstats_index.php.master",$data['new']['document_root']."/" . $web_folder . "/stats/index.php"); + } else { + $app->system->copy("/usr/local/ispconfig/server/conf/awstats_index.php.master",$data['new']['document_root']."/" . $web_folder . "/stats/index.php"); + } } //* Delete the awstats configuration file @@ -1904,27 +1958,31 @@ $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 = trim($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); - } + $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); + if($value){ + $value = trim($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); } + } } } } @@ -2035,9 +2093,12 @@ $locations = array(); $islocation = false; $linecount = sizeof($lines); + $server_count = 0; for($i=0;$i<$linecount;$i++){ $l = trim($lines[$i]); + if(substr($l, 0, 8) == 'server {') $server_count += 1; + if($server_count > 1) break; if(substr($l, 0, 8) == 'location' && !$islocation){ $islocation = true; @@ -2169,6 +2230,32 @@ private function _rewrite_quote($string) { return str_replace(array('.', '*', '?', '+'), array('\\.', '\\*', '\\?', '\\+'), $string); } + + private function url_is_local($hostname, $domain_id){ + global $app, $conf; + if($app->db->queryAllRecords("SELECT * FROM web_domain WHERE domain = '".$hostname."' AND domain_id != ".$domain_id." AND parent_domain_id != ".$domain_id." AND active = 'y'")) return false; + if($app->db->queryAllRecords("SELECT * FROM web_domain WHERE CONCAT( subdomain, '.', domain ) = '".$hostname."' AND domain_id != ".$domain_id." AND parent_domain_id != ".$domain_id." AND active = 'y' AND subdomain != 'none' AND subdomain != '*'")) return false; + if($app->db->queryAllRecords("SELECT * FROM web_domain WHERE domain = '".$hostname."' AND domain_id = ".$domain_id." AND active = 'y'")) return true; + if($app->db->queryAllRecords("SELECT * FROM web_domain WHERE CONCAT( subdomain, '.', domain ) = '".$hostname."' AND domain_id = ".$domain_id." AND active = 'y' AND subdomain != 'none' AND subdomain != '*'")) return true; + if($app->db->queryAllRecords("SELECT * FROM web_domain WHERE domain = '".$hostname."' AND parent_domain_id = ".$domain_id." AND (redirect_type = '' OR redirect_path = '') AND type != 'vhostsubdomain' AND active = 'y'")) return true; + if($app->db->queryAllRecords("SELECT * FROM web_domain WHERE CONCAT( subdomain, '.', domain ) = '".$hostname."' AND parent_domain_id = ".$domain_id." AND (redirect_type = '' OR redirect_path = '') AND type != 'vhostsubdomain' AND active = 'y' AND subdomain != 'none' AND subdomain != '*'")) return true; + $server_aliases = $app->db->queryAllRecords("SELECT subdomain, domain FROM web_domain WHERE (domain_id = ".$domain_id." OR (parent_domain_id = ".$domain_id." AND (redirect_type = '' OR redirect_path = ''))) AND type != 'vhostsubdomain' AND active = 'y'"); + if(is_array($server_aliases) && !empty($server_aliases)){ + foreach($server_aliases as $server_alias){ + if($server_alias['subdomain'].'.'.$server_alias['domain'] == $hostname) return true; + if($server_alias['subdomain'] == '*' && substr($hostname,-strlen($server_alias['domain'])) == $server_alias['domain']){ + $pattern = '/\.'.str_replace('.', '\.', $server_alias['domain']).'$/i'; + if(preg_match($pattern, $hostname)) return true; + } + } + } + + + + + //if($app->db->queryAllRecords("SELECT * FROM web_domain WHERE parent_domain_id = ".$domain_id." AND type = 'vhostsubdomain' AND active = 'y'")) return false; + return false; + } } // end class -- Gitblit v1.9.1