Skip to content

Commit 95e8cec

Browse files
author
mcramer
committed
Fixed: Domain names in rewrite rules need the . and special chars to be escaped
1 parent 8090082 commit 95e8cec

File tree

2 files changed

+28
-17
lines changed

2 files changed

+28
-17
lines changed

server/plugins-available/apache2_plugin.inc.php

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -884,23 +884,23 @@ function update($event_name,$data) {
884884

885885
switch($data['new']['subdomain']) {
886886
case 'www':
887-
$rewrite_rules[] = array( 'rewrite_domain' => '^'.$data['new']['domain'],
887+
$rewrite_rules[] = array( 'rewrite_domain' => '^'.$this->_rewrite_quote($data['new']['domain']),
888888
'rewrite_type' => ($data['new']['redirect_type'] == 'no')?'':'['.$data['new']['redirect_type'].']',
889889
'rewrite_target' => $rewrite_target,
890890
'rewrite_target_ssl' => $rewrite_target_ssl);
891-
$rewrite_rules[] = array( 'rewrite_domain' => '^www.'.$data['new']['domain'],
891+
$rewrite_rules[] = array( 'rewrite_domain' => '^' . $this->_rewrite_quote('www.'.$data['new']['domain']),
892892
'rewrite_type' => ($data['new']['redirect_type'] == 'no')?'':'['.$data['new']['redirect_type'].']',
893893
'rewrite_target' => $rewrite_target,
894894
'rewrite_target_ssl' => $rewrite_target_ssl);
895895
break;
896896
case '*':
897-
$rewrite_rules[] = array( 'rewrite_domain' => '(^|\.)'.$data['new']['domain'],
897+
$rewrite_rules[] = array( 'rewrite_domain' => '(^|\.)'.$this->_rewrite_quote($data['new']['domain']),
898898
'rewrite_type' => ($data['new']['redirect_type'] == 'no')?'':'['.$data['new']['redirect_type'].']',
899899
'rewrite_target' => $rewrite_target,
900900
'rewrite_target_ssl' => $rewrite_target_ssl);
901901
break;
902902
default:
903-
$rewrite_rules[] = array( 'rewrite_domain' => '^'.$data['new']['domain'],
903+
$rewrite_rules[] = array( 'rewrite_domain' => '^'.$this->_rewrite_quote($data['new']['domain']),
904904
'rewrite_type' => ($data['new']['redirect_type'] == 'no')?'':'['.$data['new']['redirect_type'].']',
905905
'rewrite_target' => $rewrite_target,
906906
'rewrite_target_ssl' => $rewrite_target_ssl);
@@ -965,23 +965,25 @@ function update($event_name,$data) {
965965

966966
switch($alias['subdomain']) {
967967
case 'www':
968-
$rewrite_rules[] = array( 'rewrite_domain' => '^'.$alias['domain'],
968+
$rewrite_rules[] = array( 'rewrite_domain' => '^'.$this->_rewrite_quote($alias['domain']),
969969
'rewrite_type' => ($alias['redirect_type'] == 'no')?'':'['.$alias['redirect_type'].']',
970970
'rewrite_target' => $rewrite_target,
971971
'rewrite_target_ssl' => $rewrite_target_ssl);
972-
$rewrite_rules[] = array( 'rewrite_domain' => '^www.'.$alias['domain'],
972+
$rewrite_rules[] = array( 'rewrite_domain' => '^' . $this->_rewrite_quote('www.'.$alias['domain']),
973973
'rewrite_type' => ($alias['redirect_type'] == 'no')?'':'['.$alias['redirect_type'].']',
974974
'rewrite_target' => $rewrite_target,
975975
'rewrite_target_ssl' => $rewrite_target_ssl);
976976
break;
977977
case '*':
978-
$rewrite_rules[] = array( 'rewrite_domain' => '(^|\.)'.$alias['domain'],
978+
$rewrite_rules[] = array( 'rewrite_domain' => '(^|\.)'.$this->_rewrite_quote($alias['domain']),
979979
'rewrite_type' => ($alias['redirect_type'] == 'no')?'':'['.$alias['redirect_type'].']',
980980
'rewrite_target' => $rewrite_target,
981981
'rewrite_target_ssl' => $rewrite_target_ssl);
982982
break;
983983
default:
984-
$rewrite_rules[] = array( 'rewrite_domain' => '^'.$alias['domain'],
984+
if(substr($alias['domain'], 0, 2) === '*.') $domain_rule = '(^|\.)'.$this->_rewrite_quote($alias['domain']);
985+
else $domain_rule = '^'.$this->_rewrite_quote($alias['domain']);
986+
$rewrite_rules[] = array( 'rewrite_domain' => $domain_rule,
985987
'rewrite_type' => ($alias['redirect_type'] == 'no')?'':'['.$alias['redirect_type'].']',
986988
'rewrite_target' => $rewrite_target,
987989
'rewrite_target_ssl' => $rewrite_target_ssl);
@@ -2561,6 +2563,10 @@ public function create_relative_link($f, $t) {
25612563
return symlink($cfrom, $to);
25622564
}
25632565

2566+
private function _rewrite_quote($string) {
2567+
return str_replace(array('.', '*', '?', '+'), array('\\.', '\\*', '\\?', '\\+'), $string);
2568+
}
2569+
25642570
} // end class
25652571

25662572
?>

server/plugins-available/nginx_plugin.inc.php

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -966,7 +966,7 @@ function update($event_name,$data) {
966966
unset($tmp_redirect_path);
967967
unset($tmp_redirect_path_parts);
968968
}
969-
$rewrite_rules[] = array( 'rewrite_domain' => '^'.$data['new']['domain'],
969+
$rewrite_rules[] = array( 'rewrite_domain' => '^'.$this->_rewrite_quote($data['new']['domain']),
970970
'rewrite_type' => ($data['new']['redirect_type'] == 'no')?'':$data['new']['redirect_type'],
971971
'rewrite_target' => $data['new']['redirect_path'],
972972
'rewrite_exclude' => $rewrite_exclude);
@@ -987,7 +987,7 @@ function update($event_name,$data) {
987987
unset($tmp_redirect_path);
988988
unset($tmp_redirect_path_parts);
989989
}
990-
$rewrite_rules[] = array( 'rewrite_domain' => '^www.'.$data['new']['domain'],
990+
$rewrite_rules[] = array( 'rewrite_domain' => '^' . $this->_rewrite_quote('www.'.$data['new']['domain']),
991991
'rewrite_type' => ($data['new']['redirect_type'] == 'no')?'':$data['new']['redirect_type'],
992992
'rewrite_target' => $data['new']['redirect_path'],
993993
'rewrite_exclude' => $rewrite_exclude);
@@ -1009,7 +1009,7 @@ function update($event_name,$data) {
10091009
unset($tmp_redirect_path);
10101010
unset($tmp_redirect_path_parts);
10111011
}
1012-
$rewrite_rules[] = array( 'rewrite_domain' => $data['new']['domain'],
1012+
$rewrite_rules[] = array( 'rewrite_domain' => '(^|\.)'.$this->_rewrite_quote($data['new']['domain']),
10131013
'rewrite_type' => ($data['new']['redirect_type'] == 'no')?'':$data['new']['redirect_type'],
10141014
'rewrite_target' => $data['new']['redirect_path'],
10151015
'rewrite_exclude' => $rewrite_exclude);
@@ -1031,7 +1031,7 @@ function update($event_name,$data) {
10311031
unset($tmp_redirect_path);
10321032
unset($tmp_redirect_path_parts);
10331033
}
1034-
$rewrite_rules[] = array( 'rewrite_domain' => '^'.$data['new']['domain'],
1034+
$rewrite_rules[] = array( 'rewrite_domain' => '^'.$this->_rewrite_quote($data['new']['domain']),
10351035
'rewrite_type' => ($data['new']['redirect_type'] == 'no')?'':$data['new']['redirect_type'],
10361036
'rewrite_target' => $data['new']['redirect_path'],
10371037
'rewrite_exclude' => $rewrite_exclude);
@@ -1107,7 +1107,7 @@ function update($event_name,$data) {
11071107
unset($tmp_redirect_path);
11081108
unset($tmp_redirect_path_parts);
11091109
}
1110-
$rewrite_rules[] = array( 'rewrite_domain' => '^'.$alias['domain'],
1110+
$rewrite_rules[] = array( 'rewrite_domain' => '^'.$this->_rewrite_quote($alias['domain']),
11111111
'rewrite_type' => ($alias['redirect_type'] == 'no')?'':$alias['redirect_type'],
11121112
'rewrite_target' => $alias['redirect_path'],
11131113
'rewrite_exclude' => $rewrite_exclude);
@@ -1128,7 +1128,7 @@ function update($event_name,$data) {
11281128
unset($tmp_redirect_path);
11291129
unset($tmp_redirect_path_parts);
11301130
}
1131-
$rewrite_rules[] = array( 'rewrite_domain' => '^www.'.$alias['domain'],
1131+
$rewrite_rules[] = array( 'rewrite_domain' => '^' . $this->_rewrite_quote('www.'.$alias['domain']),
11321132
'rewrite_type' => ($alias['redirect_type'] == 'no')?'':$alias['redirect_type'],
11331133
'rewrite_target' => $alias['redirect_path'],
11341134
'rewrite_exclude' => $rewrite_exclude);
@@ -1150,7 +1150,7 @@ function update($event_name,$data) {
11501150
unset($tmp_redirect_path);
11511151
unset($tmp_redirect_path_parts);
11521152
}
1153-
$rewrite_rules[] = array( 'rewrite_domain' => $alias['domain'],
1153+
$rewrite_rules[] = array( 'rewrite_domain' => '(^|\.)' . $this->_rewrite_quote($alias['domain']),
11541154
'rewrite_type' => ($alias['redirect_type'] == 'no')?'':$alias['redirect_type'],
11551155
'rewrite_target' => $alias['redirect_path'],
11561156
'rewrite_exclude' => $rewrite_exclude);
@@ -1172,7 +1172,9 @@ function update($event_name,$data) {
11721172
unset($tmp_redirect_path);
11731173
unset($tmp_redirect_path_parts);
11741174
}
1175-
$rewrite_rules[] = array( 'rewrite_domain' => '^'.$alias['domain'],
1175+
if(substr($alias['domain'], 0, 2) === '*.') $domain_rule = '(^|\.)'.$this->_rewrite_quote($alias['domain']);
1176+
else $domain_rule = '^'.$this->_rewrite_quote($alias['domain']);
1177+
$rewrite_rules[] = array( 'rewrite_domain' => $domain_rule,
11761178
'rewrite_type' => ($alias['redirect_type'] == 'no')?'':$alias['redirect_type'],
11771179
'rewrite_target' => $alias['redirect_path'],
11781180
'rewrite_exclude' => $rewrite_exclude);
@@ -2163,7 +2165,10 @@ public function create_relative_link($f, $t) {
21632165

21642166
return symlink($cfrom, $to);
21652167
}
2166-
2168+
2169+
private function _rewrite_quote($string) {
2170+
return str_replace(array('.', '*', '?', '+'), array('\\.', '\\*', '\\?', '\\+'), $string);
2171+
}
21672172

21682173
} // end class
21692174

0 commit comments

Comments
 (0)