Skip to content

Commit 0b6b84d

Browse files
author
Marius Cramer
committed
Fixed: FS#3580 - Website cannot be modified when subdomain created as website
this also fixes a problem with ignored vhost subdomains on validation
1 parent efdd1a3 commit 0b6b84d

File tree

1 file changed

+10
-126
lines changed

1 file changed

+10
-126
lines changed

interface/lib/classes/validate_domain.inc.php

Lines changed: 10 additions & 126 deletions
Original file line numberDiff line numberDiff line change
@@ -123,157 +123,41 @@ function _check_unique($domain_name, $only_domain = false) {
123123
}
124124

125125
// check if domain has alias/subdomains - if we move a web to another IP, make sure alias/subdomains are checked as well
126-
$aliassubdomains = $app->db->queryAllRecords("SELECT * FROM web_domain WHERE parent_domain_id = ".$app->functions->intval($primary_id)." AND (type = 'alias' OR type = 'subdomain')");
126+
$aliassubdomains = $app->db->queryAllRecords("SELECT * FROM web_domain WHERE parent_domain_id = ".$app->functions->intval($primary_id)." AND (type = 'alias' OR type = 'subdomain' OR type = 'vhostsubdomain')");
127127
$additional_sql1 = '';
128128
$additional_sql2 = '';
129129
if(is_array($aliassubdomains) && !empty($aliassubdomains)){
130130
foreach($aliassubdomains as $aliassubdomain){
131-
$additional_sql1 .= " OR `domain` = '".$app->db->quote($aliassubdomain['domain'])."'";
132-
$additional_sql2 .= " OR CONCAT(`subdomain`, '.', `domain`) = '".$app->db->quote($aliassubdomain['domain'])."'";
131+
$additional_sql1 .= " OR d.domain = '".$app->db->quote($aliassubdomain['domain'])."'";
132+
$additional_sql2 .= " OR CONCAT(d.subdomain, '.', d.domain) = '".$app->db->quote($aliassubdomain['domain'])."'";
133133
}
134134
}
135-
136-
//$check = $app->db->queryOneRecord("SELECT COUNT(*) as `cnt` FROM `web_domain` WHERE `domain` = '" . $app->db->quote($domain_name) . "' AND `domain_id` != " . $app->functions->intval($primary_id));
137-
//if($check['cnt'] > 0) return false;
138-
139-
// we can have the same domain on different servers or different IPs, so we have to check for identical domains on the same IP (or wildcard IPs)
140-
$checks = $app->db->queryAllRecords("SELECT * FROM `web_domain` WHERE (`domain` = '" . $app->db->quote($domain_name) . "'".$additional_sql1.") AND `server_id` = ".intval($domain['server_id'])." AND `domain_id` != " . $app->functions->intval($primary_id).($additional_sql1 != '' && $domain['parent_domain_id'] > 0 ? " AND `parent_domain_id` != ".$app->functions->intval($primary_id) : ""));
141135

142-
136+
137+
$qrystr = "SELECT d.domain_id, IF(d.parent_domain_id != 0 AND p.domain_id IS NOT NULL, p.ip_address, d.ip_address) as `ip_address`, IF(d.parent_domain_id != 0 AND p.domain_id IS NOT NULL, p.ipv6_address, d.ipv6_address) as `ipv6_address` FROM `web_domain` as d LEFT JOIN `web_domain` as p ON (p.domain_id = d.parent_domain_id) WHERE (d.domain = '" . $app->db->quote($domain_name) . "'" . $additional_sql1 . ") AND d.server_id = " . $app->functions->intval($domain['server_id']) . " AND d.domain_id != " . $app->functions->intval($primary_id) . " AND d.parent_domain_id != " . $app->functions->intval($primary_id);
138+
$checks = $app->db->queryAllRecords($qrystr);
143139
if(is_array($checks) && !empty($checks)){
144140
foreach($checks as $check){
145141
if($domain['ip_address'] == '*') return false;
146142
if($check['ip_address'] == '*') return false;
147143
if($domain['ip_address'] != '' && $check['ip_address'] == $domain['ip_address']) return false;
148144
if($domain['ipv6_address'] != '' && $check['ipv6_address'] == $domain['ipv6_address']) return false;
149-
// if alias/subdomain: check IP addresses of parent domain
150-
if($check['ip_address'] == '' || $check['ipv6_address'] == ''){
151-
if($check['parent_domain_id'] > 0){
152-
$check_parent_domain = $app->db->queryOneRecord("SELECT * FROM `web_domain` WHERE `domain_id` = ".$check['parent_domain_id']);
153-
}
154-
}
155-
156-
if($domain['ip_address'] == '' && $check['ip_address'] != ''){
157-
if(is_array($parent_domain) && !empty($parent_domain)){
158-
if($parent_domain['ip_address'] == '*') return false;
159-
if($parent_domain['ip_address'] != '' && $check['ip_address'] == $parent_domain['ip_address']) return false;
160-
}
161-
}
162-
163-
if($domain['ip_address'] == '' && $check['ip_address'] == ''){
164-
if($check['parent_domain_id'] > 0){
165-
if(is_array($check_parent_domain) && !empty($check_parent_domain)){
166-
if($check_parent_domain['ip_address'] == '*') return false;
167-
}
168-
}
169-
if(is_array($parent_domain) && !empty($parent_domain)){
170-
if($parent_domain['ip_address'] == '*') return false;
171-
if($parent_domain['ip_address'] != '' && $check_parent_domain['ip_address'] == $parent_domain['ip_address']) return false;
172-
}
173-
}
174-
175-
if($check['ip_address'] == '' && $domain['ip_address'] != ''){
176-
if($check['parent_domain_id'] > 0){
177-
if(is_array($check_parent_domain) && !empty($check_parent_domain)){
178-
if($check_parent_domain['ip_address'] == '*') return false;
179-
if($check_parent_domain['ip_address'] != '' && $check_parent_domain['ip_address'] == $domain['ip_address']) return false;
180-
}
181-
}
182-
}
183-
184-
if($domain['ipv6_address'] == '' && $check['ipv6_address'] != ''){
185-
if(is_array($parent_domain) && !empty($parent_domain)){
186-
if($parent_domain['ipv6_address'] != '' && $check['ipv6_address'] == $parent_domain['ipv6_address']) return false;
187-
}
188-
}
189-
190-
if($domain['ipv6_address'] == '' && $check['ipv6_address'] == ''){
191-
if(is_array($parent_domain) && !empty($parent_domain)){
192-
if($parent_domain['ipv6_address'] != '' && $check_parent_domain['ipv6_address'] == $parent_domain['ipv6_address']) return false;
193-
}
194-
}
195-
196-
if($check['ipv6_address'] == '' && $domain['ipv6_address'] != ''){
197-
if($check['parent_domain_id'] > 0){
198-
if(is_array($check_parent_domain) && !empty($check_parent_domain)){
199-
if($check_parent_domain['ipv6_address'] != '' && $check_parent_domain['ipv6_address'] == $domain['ipv6_address']) return false;
200-
}
201-
}
202-
}
203145
}
204146
}
205-
206-
147+
207148
if($only_domain == false) {
208-
//$check = $app->db->queryOneRecord("SELECT COUNT(*) as `cnt` FROM `web_domain` WHERE CONCAT(`subdomain`, '.', `domain`) = '" . $app->db->quote($domain_name) . "' AND `domain_id` != " . $app->functions->intval($primary_id));
209-
//if($check['cnt'] > 0) return false;
210-
// we can have the same domain on different servers or different IPs, so we have to check for identical domains on the same IP (or wildcard IPs)
211-
$checks = $app->db->queryAllRecords("SELECT * FROM `web_domain` WHERE (CONCAT(`subdomain`, '.', `domain`) = '" . $app->db->quote($domain_name) . "'".$additional_sql2.") AND `server_id` = ".intval($domain['server_id'])." AND `domain_id` != " . $app->functions->intval($primary_id).($additional_sql2 != '' && $domain['parent_domain_id'] > 0 ? " AND `parent_domain_id` != ".$app->functions->intval($primary_id) : ""));
149+
$qrystr = "SELECT d.domain_id, IF(d.parent_domain_id != 0 AND p.domain_id IS NOT NULL, p.ip_address, d.ip_address) as `ip_address`, IF(d.parent_domain_id != 0 AND p.domain_id IS NOT NULL, p.ipv6_address, d.ipv6_address) as `ipv6_address` FROM `web_domain` as d LEFT JOIN `web_domain` as p ON (p.domain_id = d.parent_domain_id) WHERE (CONCAT(d.subdomain, '.', d.domain)= '" . $app->db->quote($domain_name) . "'" . $additional_sql2 . ") AND d.server_id = " . $app->functions->intval($domain['server_id']) . " AND d.domain_id != " . $app->functions->intval($primary_id) . " AND d.parent_domain_id != " . $app->functions->intval($primary_id);
150+
$checks = $app->db->queryAllRecords($qrystr);
212151
if(is_array($checks) && !empty($checks)){
213152
foreach($checks as $check){
214153
if($domain['ip_address'] == '*') return false;
215154
if($check['ip_address'] == '*') return false;
216155
if($domain['ip_address'] != '' && $check['ip_address'] == $domain['ip_address']) return false;
217156
if($domain['ipv6_address'] != '' && $check['ipv6_address'] == $domain['ipv6_address']) return false;
218-
// if alias/subdomain: check IP addresses of parent domain
219-
if($check['ip_address'] == '' || $check['ipv6_address'] == ''){
220-
if($check['parent_domain_id'] > 0){
221-
$check_parent_domain = $app->db->queryOneRecord("SELECT * FROM `web_domain` WHERE `domain_id` = ".$app->functions->intval($check['parent_domain_id']));
222-
}
223-
}
224-
225-
if($domain['ip_address'] == '' && $check['ip_address'] != ''){
226-
if(is_array($parent_domain) && !empty($parent_domain)){
227-
if($parent_domain['ip_address'] == '*') return false;
228-
if($parent_domain['ip_address'] != '' && $check['ip_address'] == $parent_domain['ip_address']) return false;
229-
}
230-
}
231-
232-
if($domain['ip_address'] == '' && $check['ip_address'] == ''){
233-
if($check['parent_domain_id'] > 0){
234-
if(is_array($check_parent_domain) && !empty($check_parent_domain)){
235-
if($check_parent_domain['ip_address'] == '*') return false;
236-
}
237-
}
238-
if(is_array($parent_domain) && !empty($parent_domain)){
239-
if($parent_domain['ip_address'] == '*') return false;
240-
if($parent_domain['ip_address'] != '' && $check_parent_domain['ip_address'] == $parent_domain['ip_address']) return false;
241-
}
242-
}
243-
244-
if($check['ip_address'] == '' && $domain['ip_address'] != ''){
245-
if($check['parent_domain_id'] > 0){
246-
if(is_array($check_parent_domain) && !empty($check_parent_domain)){
247-
if($check_parent_domain['ip_address'] == '*') return false;
248-
if($check_parent_domain['ip_address'] != '' && $check_parent_domain['ip_address'] == $domain['ip_address']) return false;
249-
}
250-
}
251-
}
252-
253-
if($domain['ipv6_address'] == '' && $check['ipv6_address'] != ''){
254-
if(is_array($parent_domain) && !empty($parent_domain)){
255-
if($parent_domain['ipv6_address'] != '' && $check['ipv6_address'] == $parent_domain['ipv6_address']) return false;
256-
}
257-
}
258-
259-
if($domain['ipv6_address'] == '' && $check['ipv6_address'] == ''){
260-
if(is_array($parent_domain) && !empty($parent_domain)){
261-
if($parent_domain['ipv6_address'] != '' && $check_parent_domain['ipv6_address'] == $parent_domain['ipv6_address']) return false;
262-
}
263-
}
264-
265-
if($check['ipv6_address'] == '' && $domain['ipv6_address'] != ''){
266-
if($check['parent_domain_id'] > 0){
267-
if(is_array($check_parent_domain) && !empty($check_parent_domain)){
268-
if($check_parent_domain['ipv6_address'] != '' && $check_parent_domain['ipv6_address'] == $domain['ipv6_address']) return false;
269-
}
270-
}
271-
}
272157
}
273158
}
274-
275159
}
276-
160+
277161
return true;
278162
}
279163

0 commit comments

Comments
 (0)