diff --git a/dns_editor.php b/dns_editor.php index b6dd43e6..b56bb4f1 100644 --- a/dns_editor.php +++ b/dns_editor.php @@ -68,8 +68,29 @@ if ($action == 'add_record' && ! empty($_POST)) { $errors[] = $lng['error']['dns_arec_noipv4']; } elseif ($type == 'AAAA' && filter_var($content, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6) === false) { $errors[] = $lng['errors']['dns_aaaarec_noipv6']; - } elseif ($type == 'MX' && empty($prio)) { - $errors[] = $lng['error']['dns_mx_prioempty']; + } elseif ($type == 'MX') { + if ($prio === null || $prio < 0) { + $errors[] = $lng['error']['dns_mx_prioempty']; + } + // check for trailing dot + if (substr($content, - 1) == '.') { + // remove it for checks + $content = substr($content, 0, - 1); + } + if (! validateDomain($content)) { + $errors[] = $lng['error']['dns_mx_needdom']; + } else { + // check whether there is a CNAME-record for the same resource + foreach ($dom_entries as $existing_entries) { + $fqdn = $existing_entries['record'] . '.' . $domain; + if ($existing_entries['type'] == 'CNAME' && $fqdn == $content) { + $errors[] = $lng['error']['dns_mx_noalias']; + break; + } + } + } + // append trailing dot (again) + $content .= '.'; } elseif ($type == 'CNAME') { // check for trailing dot if (substr($content, - 1) == '.') { @@ -103,14 +124,17 @@ if ($action == 'add_record' && ! empty($_POST)) { // remove it for checks $content = substr($content, 0, - 1); } - // - if (! validateDomain($content)) { + // check only last part of content, as it can look like: + // _service._proto.name. TTL class SRV priority weight port target. + $_split_content = explode(" ", $content); + $target = trim($_split_content[count($_split_content)-1]); + if (! validateDomain($target)) { $errors[] = $lng['error']['dns_srv_needdom']; } else { // check whether there is a CNAME-record for the same resource foreach ($dom_entries as $existing_entries) { $fqdn = $existing_entries['record'] . '.' . $domain; - if ($existing_entries['type'] == 'CNAME' && $fqdn == $content) { + if ($existing_entries['type'] == 'CNAME' && $fqdn == $target) { $errors[] = $lng['error']['dns_srv_noalias']; break; } diff --git a/lng/english.lng.php b/lng/english.lng.php index 6783d8a8..83e7b232 100644 --- a/lng/english.lng.php +++ b/lng/english.lng.php @@ -1989,3 +1989,16 @@ $lng['serversettings']['backupenabled']['description'] = "If activated, the cust $lng['extras']['path_protection_label'] = 'Important'; $lng['extras']['path_protection_info'] = 'We strongly recommend protecting the given path, see "Extras" -> "Directory protection"'; $lng['tasks']['backup_customerfiles'] = 'Backup job for customer %loginname%'; + +$lng['error']['dns_content_empty'] = 'No content given'; +$lng['error']['dns_arec_noipv4'] = 'No valid IP address for A-record given'; +$lng['error']['dns_mx_prioempty'] = 'Invalid MX priority given'; +$lng['error']['dns_mx_needdom'] = 'The MX content value must be a valid domain-name'; +$lng['error']['dns_mx_noalias'] = 'The MX-content value cannot be an CNAME entry.'; +$lng['error']['dns_cname_invaliddom'] = 'Invalid domain-name for CNAME record'; +$lng['error']['dns_cname_nomorerr'] = 'There already exists a resource-record with the same record-name. It cannot be used as CNAME.'; +$lng['error']['dns_srv_needdom'] = 'The SRV target value must be a valid domain-name'; +$lng['error']['dns_srv_noalias'] = 'The SRV-target value cannot be an CNAME entry.'; +$lng['error']['dns_duplicate_entry'] = 'Record already exists'; +$lng['success']['dns_record_added'] = 'Record added successfully'; +$lng['success']['dns_record_deleted'] = 'Record deleted successfully';