From 95e8cecde56b679950d41444e8638b1acdb90a0c Mon Sep 17 00:00:00 2001 From: mcramer <m.cramer@pixcept.de> Date: Thu, 13 Sep 2012 09:31:56 -0400 Subject: [PATCH] Fixed: Domain names in rewrite rules need the . and special chars to be escaped --- server/plugins-available/apache2_plugin.inc.php | 40 ++++++++++++++++++++++++++-------------- 1 files changed, 26 insertions(+), 14 deletions(-) diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php index a20efd6..398b4ae 100644 --- a/server/plugins-available/apache2_plugin.inc.php +++ b/server/plugins-available/apache2_plugin.inc.php @@ -884,23 +884,23 @@ switch($data['new']['subdomain']) { case 'www': - $rewrite_rules[] = array( 'rewrite_domain' => '^'.$data['new']['domain'], + $rewrite_rules[] = array( 'rewrite_domain' => '^'.$this->_rewrite_quote($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_rules[] = array( 'rewrite_domain' => '^' . $this->_rewrite_quote('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_rules[] = array( 'rewrite_domain' => '(^|\.)'.$this->_rewrite_quote($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_rules[] = array( 'rewrite_domain' => '^'.$this->_rewrite_quote($data['new']['domain']), 'rewrite_type' => ($data['new']['redirect_type'] == 'no')?'':'['.$data['new']['redirect_type'].']', 'rewrite_target' => $rewrite_target, 'rewrite_target_ssl' => $rewrite_target_ssl); @@ -920,7 +920,7 @@ unset($client); unset($aa_search); unset($aa_replace); - $server_alias[] .= $auto_alias; + $server_alias[] .= $auto_alias.' '; } // get alias domains (co-domains and subdomains) @@ -965,23 +965,25 @@ switch($alias['subdomain']) { case 'www': - $rewrite_rules[] = array( 'rewrite_domain' => '^'.$alias['domain'], + $rewrite_rules[] = array( 'rewrite_domain' => '^'.$this->_rewrite_quote($alias['domain']), 'rewrite_type' => ($alias['redirect_type'] == 'no')?'':'['.$alias['redirect_type'].']', 'rewrite_target' => $rewrite_target, 'rewrite_target_ssl' => $rewrite_target_ssl); - $rewrite_rules[] = array( 'rewrite_domain' => '^www.'.$alias['domain'], + $rewrite_rules[] = array( 'rewrite_domain' => '^' . $this->_rewrite_quote('www.'.$alias['domain']), 'rewrite_type' => ($alias['redirect_type'] == 'no')?'':'['.$alias['redirect_type'].']', 'rewrite_target' => $rewrite_target, 'rewrite_target_ssl' => $rewrite_target_ssl); break; case '*': - $rewrite_rules[] = array( 'rewrite_domain' => '(^|\.)'.$alias['domain'], + $rewrite_rules[] = array( 'rewrite_domain' => '(^|\.)'.$this->_rewrite_quote($alias['domain']), 'rewrite_type' => ($alias['redirect_type'] == 'no')?'':'['.$alias['redirect_type'].']', 'rewrite_target' => $rewrite_target, 'rewrite_target_ssl' => $rewrite_target_ssl); break; default: - $rewrite_rules[] = array( 'rewrite_domain' => '^'.$alias['domain'], + if(substr($alias['domain'], 0, 2) === '*.') $domain_rule = '(^|\.)'.$this->_rewrite_quote($alias['domain']); + else $domain_rule = '^'.$this->_rewrite_quote($alias['domain']); + $rewrite_rules[] = array( 'rewrite_domain' => $domain_rule, 'rewrite_type' => ($alias['redirect_type'] == 'no')?'':'['.$alias['redirect_type'].']', 'rewrite_target' => $rewrite_target, 'rewrite_target_ssl' => $rewrite_target_ssl); @@ -1745,8 +1747,8 @@ //* Create the .htaccess file //if(!is_file($folder_path.'.htaccess')) { $begin_marker = '### ISPConfig folder protection begin ###'; - $end_marker = '### ISPConfig folder protection end ###'; - $ht_file = $begin_marker."\nAuthType Basic\nAuthName \"Members Only\"\nAuthUserFile ".$folder_path.".htpasswd\nrequire valid-user\n".$end_marker."\n\n"; + $end_marker = "### ISPConfig folder protection end ###\n\n"; + $ht_file = $begin_marker."\nAuthType Basic\nAuthName \"Members Only\"\nAuthUserFile ".$folder_path.".htpasswd\nrequire valid-user\n".$end_marker; if(file_exists($folder_path.'.htaccess')) { $old_content = $app->system->file_get_contents($folder_path.'.htaccess'); @@ -1806,12 +1808,14 @@ //* Remove .htaccess file if(is_file($folder_path.'.htaccess')) { $begin_marker = '### ISPConfig folder protection begin ###'; - $end_marker = '### ISPConfig folder protection end ###'; + $end_marker = "### ISPConfig folder protection end ###\n\n"; $ht_file = $app->system->file_get_contents($folder_path.'.htaccess'); if(preg_match('/' . preg_quote($begin_marker, '/') . '(.*?)' . preg_quote($end_marker, '/') . '/s', $ht_file, $matches)) { $ht_file = str_replace($matches[0], '', $ht_file); + } else { + $ht_file = str_replace("AuthType Basic\nAuthName \"Members Only\"\nAuthUserFile ".$folder_path.".htpasswd\nrequire valid-user", '', $ht_file); } if(trim($ht_file) == '') { @@ -1873,7 +1877,7 @@ if(!is_dir($new_folder_path)) $app->system->mkdirpath($new_folder_path); $begin_marker = '### ISPConfig folder protection begin ###'; - $end_marker = '### ISPConfig folder protection end ###'; + $end_marker = "### ISPConfig folder protection end ###\n\n"; if($data['old']['path'] != $data['new']['path']) { @@ -1890,6 +1894,8 @@ if(preg_match('/' . preg_quote($begin_marker, '/') . '(.*?)' . preg_quote($end_marker, '/') . '/s', $ht_file, $matches)) { $ht_file = str_replace($matches[0], '', $ht_file); + } else { + $ht_file = str_replace("AuthType Basic\nAuthName \"Members Only\"\nAuthUserFile ".$old_folder_path.".htpasswd\nrequire valid-user", '', $ht_file); } if(trim($ht_file) == '') { @@ -1905,7 +1911,7 @@ //* Create the .htaccess file if($data['new']['active'] == 'y') { - $ht_file = $begin_marker."\nAuthType Basic\nAuthName \"Members Only\"\nAuthUserFile ".$new_folder_path.".htpasswd\nrequire valid-user\n".$end_marker."\n\n"; + $ht_file = $begin_marker."\nAuthType Basic\nAuthName \"Members Only\"\nAuthUserFile ".$new_folder_path.".htpasswd\nrequire valid-user\n".$end_marker; if(file_exists($new_folder_path.'.htaccess')) { $old_content = $app->system->file_get_contents($new_folder_path.'.htaccess'); @@ -1930,6 +1936,8 @@ if(preg_match('/' . preg_quote($begin_marker, '/') . '(.*?)' . preg_quote($end_marker, '/') . '/s', $ht_file, $matches)) { $ht_file = str_replace($matches[0], '', $ht_file); + } else { + $ht_file = str_replace("AuthType Basic\nAuthName \"Members Only\"\nAuthUserFile ".$new_folder_path.".htpasswd\nrequire valid-user", '', $ht_file); } if(trim($ht_file) == '') { @@ -2555,6 +2563,10 @@ return symlink($cfrom, $to); } + private function _rewrite_quote($string) { + return str_replace(array('.', '*', '?', '+'), array('\\.', '\\*', '\\?', '\\+'), $string); + } + } // end class ?> -- Gitblit v1.9.1